ARM v8處理器概述、架構及技術介紹
ARMv8架構的概述
ARMv8架構包含32位和64位執行狀態,其引入了使用 64 位寬寄存器執行執行的功能,并且提供了向后兼容性機制,使現有的 ARMv7 軟件能夠執行。
- ? AArch64 :ARMv8中64位的執行狀態。
- ? AArch32:ARMv8中32位的執行狀態,與ARMv7幾乎相同。
在GNU和Linux的文檔中(除了Redhat和Fedora外),有時會將AArch64稱為ARM64。
Cortex-A 系列處理器現在包括在 ARMv8-A 和 ARMv7-A 中實現:
- ? Cortex-A5, Cortex-A7, Cortex-A8, Cortex-A9, Cortex-A15以及Cortex-A17處理器全部由 ARMv7-A 架構實現。
- ? Cortex-A53,Cortex-A57 和Cortex-A73處理器由 ARMv8-A 架構實現。
ARMv8 處理器仍然支持為 ARMv7-A 處理器編寫的軟件(有一些例外)。這意味著,例如,為 ARMv7 Cortex-A 系列處理器編寫的 32 位代碼也可運行在 ARMv8 處理器(如 Cortex-A57)上。但是,僅當 ARMv8 處理器處于 AArch32 執行狀態時,代碼才會運行。
此外,A64 的64 位指令集不能在 ARMv7 處理器上運行,而只能在 ARMv8 處理器上運行。
從32位到64位的變化The changes from 32 bits to 64 bits
64位的處理器其性能上有很大的提升,其中包括以下改變:
1.Larger register pool(更大的寄存器池)
A64 指令集提供了一些顯著的性能優勢,其中包括一個更大的寄存器池。A64具有31個64bits通用寄存器和ARM Architecture Procedure Call Standard (AAPCS) 提供了性能上的加速,當用戶在函數調用中需要傳遞四個以上參數(需要四個以上寄存器)時,在ARMv7中可能要使用棧,而在AArch64中,最多可以在寄存器中傳遞八個參數,因此可以增加性能,減少棧的使用。
2.Wider integer registers(具有更寬的整數寄存器)
更寬的整數寄存器使對 64 位數據運行的代碼能夠更高效地工作。32 位處理器可能需要多個操作才能對 64 位數據執行算術運算。64 位處理器可能能夠在單個操作中執行相同的任務,速度通常和以同一處理器執行 32 位操作相同。因此,執行許多 64 位大小操作的代碼速度明顯更快。
3.Larger virtual address spac(更大的虛擬地址空間)
64 位操作使應用程序能夠使用更大的虛擬地址空間。雖然大型物理地址擴展 (Large Physical Address Extension,LPAE) 將 32 位處理器的物理地址空間擴展到 40 位,但它不會擴展虛擬地址空間。這意味著即使使用 LPAE,單個應用程序也僅限于 32 位 (4GB) 地址空間。這是因為此地址空間中的某些空間是為操作系統保留的。
較大的虛擬地址空間還支持內存映射較大的文件。這是將文件內容映射到線程的內存映射。即使物理 RAM 可能不夠大,無法包含整個文件,也可能發生這種情況。
32位地址空間
作為32位的微處理器,ARM體系結構所支持的最大尋址空間為4GB(2^32^字節), 可將該地址空間看作是大小為 2^32^ 個字節(8bit),這些字節的單元地址是一個無符號的32位數值,其取值范圍為0~2^32-1^。ARM地址空間也可以看作是2^30^個32位的字(1 word = 4 bytes)單元。這些字單元的地址可以被4整除,也就是說該地址的低兩位為00。地址為A的字數據,包括地址為A,A+1,A+2,A+3這4個字節單元的內容。
每執行一條指令,當前指令計數器加4個字節。
4.Larger physical address space(更大的物理地址空間)
在 32 位體系結構上運行的軟件可能需要在執行時映射內存中的一些數據進行輸入輸出。具有更大的地址空間(使用 64 位指針)可避免此問題。
但是,使用 64 位指針確實會產生一些成本:同一段代碼通常比使用 32 位指針使用更多的內存。
每個指針都存儲在內存中,需要8個字節而不是4個字節。這聽起來可能微不足道,但可能會造成重大負擔。此外,與64 位相關的內存空間使用量的增加,可能會導致緩存中命中(hit)率下降,這反過來又會降低性能。
- ? 64-bit pointers: 8 bytes
- ? 32-bit pointers: 4 bytes
ARMv8-A 架構
ARM架構可以追溯到1985年,自早期的ARM內核以來,它已經得到了巨大的發展,在每一步都增加了特性和功能。
ARMv4 and earlier
這些早期的處理器僅使用 ARM 32 位指令集。
ARMv4T
ARMv4T 架構將 Thumb 16 位指令集添加到 ARM 32 位指令集中。這是第一個廣泛許可的架構。它由ARM7TDMI?和ARM9TDMI?處理器實現。
ARMv5TE
ARMv5TE 架構為 DSP 類型操作、飽和算術以及 ARM 和 Thumb 互通增加了改進。ARM926EJ-S? 實現了這種架構。
ARMv6
ARMv6 進行了多項增強,包括對未對齊內存訪問的支持、對內存體系結構的重大更改以及對多處理器的支持。此外,還包括對 32 位寄存器中的字節或半字操作的 SIMD 操作的一些支持。ARM1136JF-S? 實現了這種架構。ARMv6架構還提供了一些可選的擴展,特別是Thumb-2和安全擴展(TrustZone?)。Thumb-2 將 Thumb 擴展為混合長度的 16 位和 32 位指令集。
ARMv7-A
ARMv7-A 體系結構強制使用 Thumb-2 擴展,并添加了高級 SIMD 擴展 (NEON)。在 ARMv7 之前,所有內核都遵循基本相同的架構或功能集。為了幫助解決越來越多的不同應用,ARM 引入了一組架構配置:
- ? ARMv7-A提供了支持Linux等平臺操作系統所需的所有功能
- ? ARMv7-R 提供可預測的實時高性能。
- ? ARMv7-M 面向深度嵌入式微控制器。ARMv6 體系結構中還添加了 M 配置,以啟用舊體系結構的功能。ARMv6M 配置由低功耗的低成本微處理器使用。
ARMv8-A
ARMv8 體系結構包括 32 位執行和 64 位執行。它引入了使用 64 位寬寄存器,同時保持了與現有 ARMv7 軟件的向后兼容性。
Development of the ARMv8 architecture
ARMv8-A 架構引入了許多更改,從而可以設計出性能更高的處理器實現:
較大的物理地址
這使處理器能夠訪問超過 4GB 的物理內存。
64 位虛擬尋址
這允許超過 4GB 限制的虛擬內存。這對于使用內存映射文件 I/O 或稀疏尋址的現代桌面和服務器軟件非常重要。
自動事件信號
這可實現高能效、高性能的自旋鎖。
更大的寄存器文件
31 個 64 位通用寄存器可提高性能并減少堆棧使用。
高效的 64 位立即數生成
對文本池的需求較少。
較大的 PC 相對尋址范圍
一個 +/-4GB 的尋址范圍,可在共享庫和位置獨立的可執行文件中實現高效的數據尋址。
額外的 16KB 和 64KB 轉換粒度
這降低了Translation Lookaside Buffer (TLB)的未命中率和頁面瀏覽深度。
新的異常模型
這降低了操作系統和虛擬機管理程序軟件的復雜性。
高效的緩存管理
用戶空間緩存操作可提高動態代碼生成效率。使用數據緩存零指令清除快速數據緩存(DC)。
硬件加速加密
提供 3× 到 10×的軟件加密性能提升。這對于小粒度解密和加密非常有用,這些小顆粒解密和加密太小而無法有效地裝載到硬件加速器,例如https。
Load-Acquire,Store-Release 指令
專為 C++11、C11、Java 內存模型而設計。它們通過消除顯式內存屏障指令來提高線程安全代碼的性能。
NEON 雙精度浮點高級 SIMD
這使得 SIMD 矢量化能夠應用于更廣泛的算法集,例如科學計算、高性能計算 (High Performance Computing,HPC) 和超級計算機。
ARMv8-A 處理器:A53,A57和A73
Comparison of A53 and A73
A73:
Cortex-A73 processor implementation options
A73所有內核共享一個公共 L2 緩存,并且每個內核對所有參數具有相同的配置。
Cortex-A53 處理器
Cortex-A53 處理器是一款中檔低功耗(mid-range, low-power)處理器,在單個cluster中具有1到4個內核,每個內核都有一個 L1 緩存子系統、一個可選的集成 GICv3/4 接口和一個可選的 L2 緩存控制器。Cortex-A53 處理器是一款高能效極高的處理器,能夠支持 32 位和 64 位代碼。它提供的性能明顯高于大獲成功的 Cortex-A7 處理器。它能夠部署為獨立的應用處理器,或與Cortex-A57處理器配對,使用big.LITTLE 配置即可實現最佳性能、可擴展性和能效。
Cortex-A53 processor
Cortex-A53 處理器具有以下特點:
- ? 按順序排列,八級流水線。
- ? 通過使用分層時鐘門控、電源域和高級保持模式,降低功耗。
- ? 通過重復執行資源和雙指令解碼器,增強了dual-issue capability 。
- ? 功耗優化的 L2 高速緩存設計可提供更低的延遲,并在性能與效率之間取得平衡。
Cortex-A57 處理器
Cortex-A57 處理器面向移動和企業計算應用,包括計算密集型 64 位應用,如高端計算機、平板電腦和服務器產品。它可以與Cortex-A53處理器一起使用ARM big.LITTLE 配置,即可實現可擴展的性能和更高效的能源使用。
Cortex-A57 處理器具有與其他處理器(包括用于 GPU 計算的 ARM Mali? 系列圖形處理單元 (GPU))的緩存一致互操作性,并為高性能企業應用提供可選的可靠性和可擴展性功能。它提供比 ARMv7 Cortex-A15 處理器更高的性能,具有更高的能效。與上一代處理器相比,包含加密擴展可將加密算法的性能提高 10 倍。
Cortex-A57 processor core
Cortex-A57 處理器完全實現了 ARMv8-A 架構。它支持多核操作,在單個集群中具有一到四個內核的多處理。通過 AMBA5 CHI 或 AMBA 4 ACE 技術,可以實現多個相干的 SMP 集群。調試和跟蹤可通過 CoreSight 技術獲得。
Cortex-A57 處理器具有以下特點:
- ? 無序的15 個以上的流水線。
- ? 節能功能包括way預測、tag減少和緩存查找抑制。
- ? 通過重復執行資源提高峰值指令吞吐量。功耗優化的指令解碼,具有本地化解碼,3-wide解碼帶寬。
- ? 性能優化的 L2 高速緩存設計使cluster中的多個內核能夠同時訪問 L2。
Cortex-A73 處理器
這是ARM 2016年發布的最新A系列處理器,Cortex-A73支持全尺寸ARMv8-A構架,包括128位 AMBR 4 ACE接口和ARM的big.LITTLE系統一體化接口,采用了目前最先進的10nm技術制造,可以提供比Cortex-A72高出30%的持續處理能力,非常適合移動設備和消費級設備使用。
Cortex-A73
Example Cortex-A73 processor configuration