蘋果ARM64移動處理器

2021-06-25 16:33:56 字數 3626 閱讀 5925

/friday-qa-2013-09-27-arm64-and-you.html

「64位」

我們先來談談「64位」這個術語及其含義。大家對於這個術語一直比較困惑,很大一部分原因在於,它沒有統一的、約定俗成的定義。然而,在大體上卻達成了一些共識,儘管這些共識並未為大眾所知。

「×× 位」cpu通常是指兩個部分的寬度:整數暫存器的寬度和指標的寬度。值得慶幸的是,在大多數現代cpu中,它們是一致的。「64位」通常是指cpu有64 位整數暫存器和64位指標。除了搞清楚「64位」所指的物件外,明白非「64位」所指的物件也十分重要,這些物件通常包括以下幾種。

「64位」的優點與缺點

儘管64位與硬體可支援的最大記憶體無關,但便於單一程式使用更大記憶體。在32位cpu中,單一程式僅有4gb位址空間,減去被作業系統和標準庫所占用的部 分,只剩1~3gb可用。如果乙個32位系統的ram超過4gb,單一程式很難充分利用全部空間,除非開發者耍些小聰明,例如直接命令作業系統按需求分配 記憶體,或將程式拆分成多個程序。但在實際應用中,很少有程式這麼做,因為程式設計更麻煩,還會有損效能。系統擁有更多記憶體的好處是,能同時執行多個應用並減少 硬碟快取。這樣固然不錯,但難免有個別程式需要使用更多記憶體的情況。

即使對於物理記憶體較小的系統,更大的位址空間也有幫助。記憶體對映檔案是種有用的結構,在32位系統中,程式不能對映大檔案(通常是指超過幾百mb的檔案),而64位系統的可用位址空間更大,不必有這方面的擔心。

不過,增加指標寬度有個嚴重的缺點:在所有其他條件都相同的情況下,單一程式在64位cpu系統中更佔記憶體。因為指標本身也需要儲存於記憶體中,在64位系統 上,這個空間增加了一倍。而大多數程式運用指標很頻繁,所以額外占用的空間往往不少。這給快取帶來了壓力,從而導致效能降低。

簡而言之,「64位」可以提公升某些應用的效能,並使記憶體對映檔案這種程式設計技術更易用。不過,它也會因占用更多記憶體而降低效能。

arm64

iphone 5s的64位cpu是配有更寬暫存器的arm處理器,與32位arm架構相比,64位arm架構包括以下重大變動:首先是名稱的變化——它的官方名稱為 「aarch64」,但這個名字讀起來很繞口,敲起來也彆扭。蘋果稱它為arm64,我也更傾向於用這個名字。

較32位arm架構而 言,arm64的整數暫存器數量增加了一倍,32位arm架構有16個整數暫存器,其中1個是專用的程式計數器,還有2個用於堆疊指標和鏈結,其他13個 則作一般用途。而arm64位架構有32個整數暫存器,包括1個專用的零暫存器,1個鏈結暫存器和1個幀指標暫存器,還有1個暫存器預留給平台,另外28 個則為通用整數暫存器。arm64上可用浮點暫存器的數量有所增加。32位arm處理器有32個32位浮點暫存器,還有16個額外的64位暫存器。這些寄 存器的結構有些特殊,可被視為等價於16個重疊的128位暫存器。arm64則將其簡化為32個128位暫存器,且沒有重疊。

暫存器的數量 會對效能會產生巨大影響。與cpu相比,記憶體要慢得多。與cpu處理一條指令的時間相比,讀取和寫入記憶體都需要更長時間。cpu試圖通過引入快取來緩解這 一差距。但與cpu內部的暫存器相比,即使速度最快的快取也慢得多。更多的暫存器意味著更多資料能儲存在cpu內部,這降低了記憶體訪問頻率,同時提高了性 能。

除了增加暫存器數量,arm64也為指令集帶來了重大變化。大多數32位arm處理器可基於執行時條件暫存器的狀態執行條件指令,這使 得在編譯if等語句時無需分支。不過這種方式引入的麻煩多於便利,因此arm64取消了條件執行。arm64的neon simd單元完全符合ieee754雙精度標準,而32位版本的neon simd單元只支援單精度。arm64還增加了專門的aes、sha-1、sha-256加密指令。這些指令也許對普通應用幫助不大,但對特定領域的應用 來說價值無窮。

objective-c runtime變化

在mac os x 10.7作業系統中,蘋果引入了標籤指標,這種指標允許某些類和其少量例項資料完全儲存在指標中。這樣在使用某些類時(如nsnumber)就無需分配內 存,並提公升效能。標籤指標僅支援64位架構,一部分原因是受二進位制相容制約,另一部分原因是32位指標預留的資料空間不足。之前的ios系統都不支援標籤 指標,而在arm64位架構中,objective-c runtime已包含了標籤指標,因此也可以享受mac系統所具備的便利了。

儘管指標為64位,但在實際使用中,這些位數並不是都用上了。例如x86-64的mac os x系統僅使用了其中的47位。而arm64上占用得更少,目前只有33位。只要未被系統全部占用,這些指標就能用於儲存資料。這是objective-c runtime演進史上最重要的變化之一。

另作他用的isa指標

objective-c物件是連續的記憶體塊,這個記憶體塊中第乙個指標大小的部分稱為isa。一般來說,isa是乙個指向該物件所屬類的指標。

不過這麼大的空間僅作為指標有點兒浪費,尤其是在64位cpu上。執行ios的arm64目前僅使用了乙個指標的33位,而其餘31位則另作他用。另外,類 指標還需要對齊,這就釋放了另外3位,於是isa指標中共有34位可另作他用。蘋果的arm64 runtime正是利用了這一點使效能有了大幅提公升。

不過,最重要的效能提公升也許得益於內聯引用計數。幾乎所有的objective-c物件都採用引用計數(nsstring文字等常量物件是例外),這使得修 改引用計數的操作極為頻繁。尤其對於採用自動引用計數的系統來說,資源消耗非常高。因此,提高引用計數的效能變得至關重要。

以往,引用計數 並不儲存在物件中,因為isa空間不足。當然,我們可以為每個物件專門分配一塊空間用於儲存引用計數,但這會占用更多的記憶體空間。對今天的系統來說,額外 的空間也許不算什麼,但對早期的objective-c系統影響嚴重。由於這樣的原因,引用計數被系統儲存在了乙個單獨的表中。

於是,當為物件增加新引用時,runtime會執行以下操作:

這些操作非常緩慢!即使用最快的雜湊表,也沒有直接從記憶體訪問來得快。

對於arm64,isa欄位中的19位用於內聯儲存引用計數。這意味著,增加物件引用的步驟可以簡化為:在isa欄位正確部分執行原子操作加一。

僅此而已!速度將會快得多!當然,還有一些極端情況需要處理,真正的操作會略微複雜一些。

以往在**objective-c物件時,需要執行大量清除工作,跳過其中不必要的步驟,就可以提高效能。利用剩餘的可用位,還有其他一些方法可使**物件的速度更快。

將上面提到的所有優化集合在一起,arm64的效能優勢就變得非常明顯了。根據我自己不太嚴格的效能測試顯示,在iphone 5s 32位模式下,基本物件的建立和銷毀大約需要380ns,而在64位模式,僅需200ns。如果某類例項曾有過弱引用並與物件集合關聯,32位模式下的耗 時上公升至約480ns,而64位模式下保持不變,仍為200ns。

結束語

「64位」a7處理器既不是一種營銷手段,也不是乙個能催生創新應用的巨大突破。真實的情況是,它介於兩者之間,就像我們經常見到的技術演進一樣。

arm64讓某些應用的計算速度快了一些,大多數應用占用的記憶體變得更多,也讓一些程式設計技巧更容易使用。不過從總體上看,還不算重大變化。

在向64位過渡的過程中,arm架構增加了暫存器的數量,並對其使用做了修改。改進了指令集,令其效能優於過去的32位處理器。

蘋果也從這種過渡中改變自己。最大的變化是內聯引用計數,這一改變使得在通常情況下,無需進行代價昂貴的雜湊表查詢,讓物件的建立和銷毀代價都減少了近一半。標籤指標也有利於效能提公升並減少了記憶體占用。

arm64使蘋果的硬體如虎添翼,儘管我們都知道這一天遲早會到來,但沒想到這麼快,真是很棒!

ARM 64位處理器出貨,攪動計算市場

就在幾天前,當蘋果發布最新7.8英吋ipad mini,讓業內人士大呼蘋果要絕人生路,從智慧型手機,到ipad mini,再到ipad,所有想涉足智慧型移動終端的對手,都要大跌眼鏡了。我相信,蘋果的這一戰略絕對不是腦門一熱的臨時起意,而是沿自己明確的路徑規劃在推進。同理,作為處理器ip授權領域風頭正...

ARM處理器模式

cpsr暫存器 arm v4的cpsr暫存器 和儲存它的spsr暫存器 中的位分配如下圖所示。處理器模式決定了哪些暫存器是活動的以及對cpsr訪問權。處理器模式要麼是特權模式,要麼是非特權模式。特權模式允許對cpsr的完全讀 寫訪問 與些相反,非特權模式只允許對cpsr的控制域進行讀訪問,但允許對條...

ARM處理器型號

arm公司擁有眾多cpu指令集,cpu架構,cpu系列.本文旨在介紹arm公司的cpu產品線.下圖展示了arm公司cpu的產品線 首先有必要了解一下arm公司的命名規則 arm的命名規則,大致分成三類 1.基於arm architecture版本的 指令集架構 命名規則 2.基於arm archit...