麥克·阿什 致力於他的博客 iPhone 64S 切換到 5 位元架構的實際影響。本文借鑒了他的發現。
之所以寫這篇文章,主要是因為關於配備 5 位元 ARM 處理器的新款 iPhone 64s 對用戶和市場的實際意義存在大量錯誤訊息。在這裡,我們將嘗試為開發人員帶來有關此轉變的效能、功能和影響的客觀資訊。
“64位”
「X 位元」標籤可以引用處理器的兩個部分 - 整數暫存器的寬度和指標的寬度。幸運的是,在大多數現代處理器上,這些寬度是相同的,因此對於 A7,這意味著 64 位元整數暫存器和 64 位元指標。
然而,同樣重要的是要指出「64 位元」的含義: RAM物理位址大小。與 RAM 通訊的位元數(因此設備可以支援的 RAM 量)與 CPU 位數無關。 ARM 處理器具有 26 位元和 40 位元位址之間的任何位置,並且可以獨立於系統的其餘部分進行變更。
- 資料匯流排大小。從 RAM 或緩衝記憶體接收的資料量同樣與該因素無關。各個處理器指令可能請求不同數量的數據,但它們要么以塊的形式發送,要么從內存接收超出需要的數據。這取決於資料量的大小。 iPhone 5 已經以 64 位元量子的形式從記憶體接收資料(並且具有 32 位元處理器),我們可以遇到高達 192 位元的大小。
- 任何與浮點數有關的東西。此類暫存器 (FPU) 的大小同樣獨立於處理器的內部工作。 ARM 在 ARM64(64 位元 ARM 處理器)之前就一直使用 64 位元 FPU。
一般優點和缺點
如果我們比較相同的 32 位元和 64 位元架構,它們通常並沒有那麼不同。這也是大眾普遍對蘋果行動裝置轉向 64 位元的原因感到困惑的原因之一。然而,這一切都來自於A7(ARM64)處理器的具體參數以及蘋果如何使用它,而不僅僅是來自該處理器具有64位元架構這一事實。
然而,如果我們仍然看看這兩種架構之間的差異,我們會發現幾個差異。顯而易見的是,64 位元整數暫存器可以更有效地處理 64 位元整數。即使在此之前,也可以在 32 位元處理器上使用它們,但這通常意味著將它們分成 32 位元長的片段,這會導致計算速度變慢。因此,64 位元處理器通常可以使用 64 位元類型進行計算,與使用 32 位元類型進行計算一樣快。這意味著通常使用 64 位元類型的應用程式可以在 64 位元處理器上運行得更快。
雖然 64 位元不會影響處理器可以使用的 RAM 總量,但它可以讓您更輕鬆地在一個程式中使用大塊 RAM。任何在 32 位元處理器上運行的單一程式都只有大約 4 GB 的位址空間。考慮到作業系統和標準庫會佔用一些空間,這會為程式留下 1-3 GB 的空間供應用程式使用。但是,如果 32 位元系統具有超過 4 GB 的 RAM,則使用該記憶體會稍微複雜一些。我們必須強製作業系統為我們的程式映射這些更大的記憶體區塊(記憶體虛擬化),或者我們可以將程式分成多個進程(理論上每個進程都有 4GB 的記憶體可用於直接尋址)。
然而,這些「駭客」非常困難且緩慢,以至於很少有應用程式使用它們。實際上,在 32 位元處理器上,每個程式只會使用其 1-3 GB 內存,更多可用 RAM 可用於同時運行多個程式或使用此內存作為緩衝區(緩存)。這些用途很實用,但我們希望任何程式都能夠輕鬆使用大於 4GB 的記憶體區塊。
現在我們來看看一個常見的(實際上是不正確的)說法:沒有超過 4GB 的內存,64 位元架構就沒用。即使在記憶體較少的系統上,較大的位址空間也很有用。記憶體映射檔案是一種方便的工具,其中文件的部分內容在邏輯上連結到進程的內存,而無需將整個文件載入到記憶體中。因此,系統可以逐漸處理比 RAM 容量大很多倍的大檔案。在 32 位元系統上,如此大的檔案無法可靠地進行記憶體映射,而在 64 位元系統上,由於位址空間更大,因此這是小菜一碟。
然而,較大的指標也帶來了一個很大的缺點:否則相同的程式在 64 位元處理器上需要更多的記憶體(這些較大的指標必須儲存在某個地方)。由於指標是程式中常見的部分,因此這種差異會對快取造成負擔,進而導致整個系統運作速度變慢。因此,從長遠來看,我們可以看到,如果我們只是將處理器架構更改為 64 位,實際上會降低整個系統的速度。所以這個因素必須透過其他地方更多的優化來平衡。
ARM64
A7 是為新款 iPhone 64s 提供支援的 5 位元處理器,它不僅僅是具有更寬寄存器的常規 ARM 處理器。 ARM64 對舊的 32 位元版本進行了重大改進。
註冊表
ARM64 擁有兩倍於 32 位元 ARM 的整數暫存器(注意不要混淆暫存器的數量和寬度 - 我們在「64 位元」部分中討論過寬度。因此 ARM64 擁有兩倍寬的暫存器和兩倍的數量暫存器)。 32位元ARM有16個整數暫存器:13個程式計數器(PC-包含目前指令的編號)、64個堆疊指標(指向正在進行的函數的指標)、32個連結暫存器(指向結束後傳回的指標)的功能),其餘28 個供應用程式使用。然而,ARM32有64個整數暫存器,包括16個零暫存器、32個連結暫存器、128個幀指標(類似堆疊指標)和XNUMX個為將來保留的暫存器。這使得我們有 XNUMX 個暫存器供應用程式使用,是 XNUMX 位元 ARM 的兩倍以上。同時,ARMXNUMX 將浮點數 (FPU) 暫存器的數量從 XNUMX 個 XNUMX 位元暫存器增加了一倍。
但為什麼寄存器的數量如此重要呢?記憶體通常比 CPU 計算速度慢,並且讀/寫可能需要很長時間。這將使快速處理器必須繼續等待內存,並且我們將達到系統的自然速度限制。處理器試圖透過緩衝區層來隱藏這一障礙,但即使是最快的緩衝區(L1)仍然比處理器的計算慢。然而,暫存器是直接位於處理器中的儲存單元,它們的讀取/寫入速度足夠快,不會減慢處理器的速度。暫存器的數量實際上意味著處理器計算最快的記憶體量,這極大地影響了整個系統的速度。
同時,這個速度需要編譯器良好的最佳化支持,以便語言可以使用這些暫存器,而不必將所有內容儲存在通用應用程式(慢速)記憶體中。
指令系統
ARM64也為指令集帶來了重大變化。指令集是處理器可以執行的一組原子操作(例如“ADD register1 register2”將兩個暫存器中的數字相加)。各個語言可用的函數都是由這些指令組成的。更複雜的函數必須執行更多指令,因此它們可能會更慢。
ARM64 中的新增功能包括 AES 加密、SHA-1 和 SHA-256 雜湊函數指令。因此,只有語言才會呼叫此指令,而不是複雜的實作 - 這將為此類函數的計算帶來巨大的加速,並有望增加應用程式的安全性。例如。新的 Touch ID 也在加密中使用這些指令,從而實現真正的速度和安全性(理論上,攻擊者必須修改處理器本身才能存取資料 - 至少考慮到其微型尺寸,這是不切實際的)。
與32位元的兼容性
值得一提的是,A7 可以完全在 32 位元模式下運行,無需模擬。這意味著新款 iPhone 5s 可以運行在 32 位元 ARM 上編譯的應用程序,不會出現任何速度減慢的情況。然而,這樣它就無法利用新的 ARM64 功能,因此專門為 A7 進行特殊建置始終是值得的,它應該運行得更快。
運行時變化
運行時是向程式語言添加功能的程式碼,它可以在應用程式運行時使用,直到翻譯完成。由於 Apple 不需要維護應用程式相容性(64 位元二進位檔案在 32 位元上運行),因此他們有能力對 Objective-C 語言進行更多改進。
其中之一就是所謂的 標記指針 (標記的指標)。通常,物件和指向這些物件的指標都會儲存在記憶體的不同部分中。然而,新的指標類型允許資料很少的類別直接在指標中儲存物件。這一步不需要直接為物件分配內存,只需建立一個指標和其中的物件即可。標記指標僅在 64 位元體系結構中受支持,也是因為 32 位元指標中不再有足夠的空間來儲存足夠的有用資料。因此,與 OS X 不同,iOS 還不支援此功能。然而,隨著 ARM64 的到來,這種情況正在改變,iOS 在這方面也趕上了 OS X。
雖然指針有 64 位長,但在 ARM64 上,只有 33 位用於指針自己的地址。如果我們能夠可靠地解密其餘的指標位,我們就可以使用這個空間來儲存附加資料——就像前面提到的標記指標的情況一樣。從概念上講,這是 Objective-C 歷史上最大的變化之一,儘管它不是一個有市場的功能——所以大多數用戶不會知道 Apple 是如何推動 Objective-C 向前發展的。
至於這樣一個標記指標的剩餘空間可以儲存有用的數據,例如Objective-C現在就用它來儲存所謂的 引用計數 (參考文獻數量)。以前,引用計數儲存在記憶體中的不同位置,儲存在為其準備的雜湊表中,但是在大量 alloc/dealloc/retain/release 調用的情況下,這可能會減慢整個系統的速度。由於線程安全,該表必須被鎖定,因此兩個線程中的兩個物件的引用計數不能同時更改。然而,這個值是新插入到所謂的其餘部分中的。 ISA 指標。這又是一個不起眼,但卻是未來巨大的優勢和加速。然而,這在 32 位元架構中永遠無法實現。
有關關聯對象的信息,該對像是否弱引用,是否需要為該對像生成析構函數等信息,也被新插入到對象指針的剩餘位置中。得益於這些信息,Objective-C運行時能夠從根本上加快運行時速度,這體現在每個應用程式的速度上。根據測試,這意味著所有記憶體管理呼叫的速度提高了約 40-50%。只需切換到 64 位元指標並使用這個新空間。
záver
儘管競爭對手會試圖傳播這樣的觀點:轉向 64 位元架構是不必要的,但您已經知道這只是一個非常無知的觀點。確實,簡單地切換到 64 位元而不調整語言或應用程式並沒有真正的意義 - 它甚至會減慢整個系統的速度。但新的 A7 使用帶有新指令集的現代 ARM64,並且 Apple 不辭辛勞地對整個 Objective-C 語言進行現代化改造並利用新功能 - 因此承諾了加速。
在這裡,我們已經提到了 64 位元架構是向前邁出的正確一步的大量原因。這是另一場「幕後」革命,蘋果將努力不僅在設計、用戶介面和豐富的生態系統方面保持領先地位,而且主要利用市場上最現代的技術。
很多不知情的Android/三星用戶應該閱讀這篇文章,然後躲在角落。
好吧,我們必須為他們感到難過。多年來,他們為 Android 的悲慘用戶體驗和用戶介面辯解,稱自己擁有技術最先進的作業系統和功能,但現在他們發現自己又落後了很多年:)
如果一個人不是一隻羊,聽廣告(而且他很擅長),那麼經過親身經歷,他可以形成自己的觀點:-)。
我嘗試了幾乎所有的比賽並形成了自己的觀點。
對我來說,我需要一部新的超高效能手機,因為我在上面花的錢不多。那是我需要更低的性能和更低的價格;-)。也許我更喜歡速度較慢、電池更大的手機。
另一方面,新的 procak 對於有很多遊戲的 iPad 很有用:-)。
我是 Android/HTC :) 因為 IT 對我來說非常有趣,紮根並將高品質硬體轉換為快速戰鬥機是我的愛好。 iOS 不允許我這麼做。 (這甚至沒有必要。或多或少,iOS 的設計是為了讓一切正常運行,你不需要在那裡做任何事情。當我不再喜歡玩的時候,我會買一個蘋果並享受它)。但我不明白為什麼你們總是像孩子一樣互相攻擊。蘋果和安卓完全一樣。這就像比較民主與獨裁等等......我觀看了 iPhone 5S 演示會議,儘管我沒有擁有任何來自 Apple 的產品,但我喜歡 64 位元和隨之而來的其他改進。但這並不是因為我是一個複雜的 honimír trtko,坐在電腦後面追逐 Android 或 Apple,而是因為我看到了進展,不會讓我等待太久。禮貌地說,人們應該開始努力工作,這樣他們就沒有時間處理廢話。
來自另一方的建設性貢獻:) kiez 這會讓剩下 99% android 積極的人睜開眼睛
也許應該先討論99%的蘋果狂熱者,然後我們才能進行建設性的對話
非常複雜的事情簡單解釋一下...謝謝
很棒的文章!是的,我同意 Android/WP 用戶應該閱讀這篇文章。與其喋喋不休地談論「64b 在手機中如何毫無用處」…
你手上可能從來沒有過wp,否則你不會擁有這個
自從在行動市場取得第一次成功以來,三星除了抹黑競爭對手之外什麼也沒做,但本質上,它一直在追隨自己的腳步。蘋果一直是科技公司的榜樣,如果他們只專注於嘲笑和不斷誤導客戶,他們很快就會跌倒。蘋果一直走自己的路,而且一直都是一個非常好的時機問題,而這一點是業內許多競爭公司所缺乏的。
可以說,三星正在順應潮流並充分利用其可能性。他把賭注押在Android上,他有很棒的硬件,他自己做了很多東西,他有很好的支持。與任何掠奪性的亞洲公司一樣,它利用了廣告的所有可能性。當然,他還會偷竊和複製。 「斜眼」最擅長的就是抄襲。他們算得很清楚,比我行我素、一步一步來便宜很多。作為一家實力雄厚的公司,它完全可以負擔得起。然而…
我只是不明白為什麼手機的速度不斷提高,給我一些你用它做什麼的例子,慢慢地提高手機的性能對我來說沒有任何意義,但我會刪除行銷這個詞。
遊戲,優化不佳的遊戲。此外,iPad 3 上的《運輸大亨》運作起來並不像在桌上型電腦上那樣流暢,而且解析度也不一樣。例子。
我只是不明白為什麼手機的速度不斷提高,給我一些你用它做什麼的例子,如果我從中刪除「行銷」這個詞,提高手機的效能對我來說慢慢就沒有意義了。
用於視訊、音訊和影像處理。繼續比賽。
任何一個只用 iPhone 打電話、發短信、偶爾閱讀或發送電子郵件、偶爾上網的人,都會需要一部 iPhone 4。我相信這樣的用戶有很多。並不是每個人都需要全世界最好的手機:-)
羊
硬體和軟體之間的實體權衡對您來說沒有任何意義嗎?這讓我有點想起19世紀末,當時的物理學家說物理學中的一切都已經被發現了,沒有必要繼續下去(相對論早十年,量子論早三年) 。
對最好的追求永無止境。有時軟體主導,有時硬體主導。但如果其中一個被卡住了,它就不會放過另一個。我們不會對我們的後代如此自私:) 因此,對於您的評論 - 更快的手機將啟用更強大的應用程序,這將能夠比驅動器做更多的事情。曾經的事情即使是今天的計算機也無法滿足。未來是令人興奮的。
確切地 :)
好文章,但我不明白為什麼蘋果不在 A7 中配備 2GB RAM。是的,iOS多工處理不一定需要2GB,但是考慮到記憶體指標長度的兩倍,它會更合適。
但除此之外,我同意64 位元處理器對於手機來說是“不必要的”,就像視網膜顯示器或光學滑鼠而不是球是不必要的一樣- 所有這些發明都被標記為“不必要”,但在我看來正確的詞是“永恆”,因為一旦到來,蘋果並不害怕推出新的東西。
我同意那個。不幸的是,即使是「無用」也不是一個準確的表達。不必要的意思是人們不知道其優先順序的東西。這絕對不是真的。速度可能不需要這麼快,但它一定會認的。而當軟體趕上硬體時,就會再次有改進的空間。
當然,我贊成,我的意思是 iP5 確實是一款速度相當快的智慧型手機,因此 5S 根本不必是 64 位元。但有一天,有人必須再次處理這個問題,而這個人就是蘋果,而且就是現在。從我記事起,專家們就一直在談論 64 位元處理器即使在電腦中也毫無用處。
對我這個差點考完的IT外行人來說,結論很重要。整篇文章(有評論支持)對我來說似乎很有見地,雖然我無法解釋它,但具有 7 位元架構的 A64 是向前邁出的一步。感謝您的資訊。
我會編輯文章的標題,因為這是一種行銷舉措。每一項創新本質上都是一種行銷舉措。 :-)
我不這樣認為。例如,三星就採用了行銷措施。它們帶有 RAM,而 iPhone 根本不需要 RAM。他們逃脫了根本無法使用的功能。他們故意提高處理器效能以進行測試。 ETC。這就是行銷,雖然是的,它具有誤導性,但他們不應該僥倖逃脫;)