AArch64

AArch64 또는 ARM64는 널리 사용되는 컴퓨터 프로세서 설계 세트인 ARM 아키텍처의 64비트 버전이다. 2011년 ARMv8 아키텍처와 함께 도입되었으며 나중에 ARMv9 시리즈의 일부가 되었다. AArch64를 사용하면 프로세서가 이전의 32비트 버전보다 더 많은 메모리를 처리하고 더 빠른 계산을 수행할 수 있다. 이는 AArch32로 알려진 이전 32비트 모드와 함께 작동하도록 설계되어 광범위한 소프트웨어와의 호환성을 허용한다. AArch64를 사용하는 장치에는 스마트폰, 태블릿, 개인용 컴퓨터 및 서버가 포함된다. AArch64 아키텍처는 성능, 보안 및 고급 컴퓨팅 작업에 대한 지원을 개선하는 업데이트를 통해 계속 진화하고 있다.

 AArch64 실행 상태 

ARMv8-A, ARMv8-R 및 ARMv9-A에서 "실행 상태"(Execution state)는 프로세서 환경의 주요 특성을 정의한다. 여기에는 기본 프로세서 레지스터에 사용되는 비트 수, 지원되는 명령어 집합 및 프로세서 실행 환경의 기타 측면이 포함된다. 이러한 버전의 ARM 아키텍처는 64비트 AArch64 상태와 32비트 AArch32 상태의 두 가지 실행 상태를 지원한다.

 명명 규칙 
 64비트:
 실행 상태: AArch64
 명령어 집합: A64
 32비트:
 실행 상태: AArch32
 명령어 집합: A32 + T32
 예: ARMv8-R, Cortex-A32

 AArch64 기능 
 새로운 명령어 집합, A64:
 31개의 범용 64비트 레지스터를 가짐
 전용 제로(zero) 또는 스택 포인터(SP) 레지스터를 가짐 (명령어에 따라 다름)
 프로그램 카운터(PC)는 더 이상 레지스터로 직접 접근할 수 없음
 명령어는 여전히 32비트 길이며 대부분 A32와 동일함 (LDM/STM 명령어 및 대부분의 조건부 실행은 제외됨)
 쌍을 이룬 로드/스토어(LDM/STM 대신)를 가짐
 대부분의 명령어(분기 제외)에 대해 프레디케이션이 없음
 대부분의 명령어는 32비트 또는 64비트 인수를 취할 수 있음
 주소는 64비트로 간주됨
 향상된 고급 SIMD (Neon):
 32 × 128비트 레지스터를 가짐 (16개에서 증가), VFPv4를 통해서도 접근 가능
 배정밀도 부동소수점수 지원
 IEEE 754 완벽 준수
 AES 암호화/복호화 및 SHA-1/SHA-2 해싱 명령어도 이 레지스터를 사용함
 새로운 예외 시스템:
 뱅크드(banked) 레지스터와 모드가 줄어듦
 64비트로 쉽게 확장되도록 설계된 기존의 대용량 물리 주소 확장(LPAE)을 기반으로 한 48비트 가상 주소로부터의 메모리 변환

확장: 데이터 수집 힌트 (ARMv8.0-DGH).

AArch64는 ARMv8-A에서 도입되었으며 이후 버전의 ARMv8-A 및 모든 버전의 ARMv9-A에 포함되어 있다. 또한 ARMv8-A 도입 이후 ARMv8-R에서도 옵션으로 도입되었으나, ARMv8-M에는 포함되지 않는다.

 A64 명령어 형식 
A64 명령어가 속한 그룹을 선택하기 위한 주요 연산 코드(opcode)는 25~28비트에 위치한다.
+  유형 비트 31  30  29  28  27  26  25  24  23  22  21  20  19  18  17  16  15  14  13  12  11  10  9  8  7  6  5  4  3  2  1  0 예약됨 0 op 0  0  0  0 op  1 op 0  0  0  0 가변적 미할당 0  0  0  1  0  0  1  0 가변적 미할당 0  0  1  1 데이터 처리 — 즉시 PC-상대op imm 1 0 0 0 0 imm Rd 데이터 처리 — 즉시 기타sf  1  0  0 01–11  Rd 분기 + 시스템 명령어op0 1 0 1 op1  op2 로드 및 스토어 명령어op0 1 op1 0 op2  op3  op4  데이터 처리 — 레지스터sf op0 op1 1 0 1 op2  op3  데이터 처리 — 부동소수점 및 SIMDop0111op1op2op3

 ARM-A (애플리케이션 아키텍처) 

섬네일|Cortex-A57/A53 MPCore Big.LITTLE CPU 칩을 장착한 Armv8-A 플랫폼
2011년 10월에 발표된 ARMv8-A는 ARM 아키텍처의 근본적인 변화를 나타낸다. 이는 "AArch64"라고 불리는 선택적 64비트 실행 상태와 관련 새로운 "A64" 명령어 집합을 추가하며, 기존의 32비트 "A32"(오리지널 32비트 ARM) 및 "T32"(Thumb/Thumb-2) 명령어 집합을 지원하는 32비트 실행 상태인 "AArch32"도 함께 지원한다. 후자의 명령어 집합은 기존의 32비트 ARMv7-A 아키텍처와 사용자 공간 호환성을 제공한다. ARMv8-A를 사용하면 64비트 OS에서 32비트 애플리케이션을 실행할 수 있으며, 32비트 OS를 64비트 하이퍼바이저의 제어 하에 둘 수 있다. ARM은 2012년 10월 30일에 Cortex-A53 및 Cortex-A57 코어를 발표했다. 애플은 소비자 제품(iPhone 5S)에 ARMv8-A 호환 코어(Cyclone)를 최초로 출시했다. AppliedMicro는 FPGA를 사용하여 ARMv8-A를 최초로 시연했다. 삼성전자의 첫 번째 ARMv8-A SoC는 갤럭시 노트4에 사용된 엑시노스 5433으로, Big.LITTLE 구성의 Cortex-A57 및 Cortex-A53 코어 4개씩 두 개의 클러스터를 특징으로 하지만 AArch32 모드에서만 실행된다.
ARMv8-A는 AArch32와 AArch64 모두에서 VFPv3/v4 및 고급 SIMD(Neon)를 표준 기능으로 포함한다. 또한 AES, SHA-1/SHA-256 및 유한체 산술을 지원하는 암호화 명령어를 추가한다.

ARMv8-A 프로세서는 AArch32와 AArch64 중 하나 또는 둘 다를 지원할 수 있다. 낮은 예외 레벨에서는 AArch32와 AArch64를 지원하고 높은 예외 레벨에서는 AArch64만 지원할 수도 있다. 예를 들어, ARM Cortex-A32는 AArch32만 지원하고, ARM Cortex-A34는 AArch64만 지원하며, ARM Cortex-A72는 AArch64와 AArch32를 모두 지원한다. ARMv9-A 프로세서는 모든 예외 레벨에서 AArch64를 지원해야 하며, EL0에서 AArch32를 지원할 수 있다.

 ARMv8.1-A 
2014년 12월, "v8.0에 비해 점진적인 이점"을 가진 업데이트인 ARMv8.1-A가 발표되었다. 향상된 기능은 명령어 집합의 변경과 예외 모델 및 메모리 변환의 변경이라는 두 가지 범주로 나뉜다.

명령어 집합의 향상된 기능은 다음과 같다.

 AArch64 원자적 읽기-쓰기 명령어 세트.
 일부 라이브러리 최적화를 가능하게 하기 위해 AArch32 및 AArch64 모두를 위한 고급 SIMD 명령어 집합 추가:
 Signed Saturating Rounding Doubling Multiply Accumulate, Returning High Half.
 Signed Saturating Rounding Doubling Multiply Subtract, Returning High Half.
 명령어가 벡터 및 스칼라 형식으로 추가됨.
 구성 가능한 주소 영역으로 제한된 메모리 접근 순서를 제공할 수 있는 AArch64 로드 및 스토어 명령어 세트.
 v8.0의 선택적 CRC 명령어가 ARMv8.1에서 필수 사항이 됨.

예외 모델 및 메모리 변환 시스템의 향상된 기능은 다음과 같다.

 새로운 PAN(Privileged Access Never) 상태 비트는 명시적으로 활성화되지 않는 한 사용자 데이터에 대한 특권 접근을 방지하는 제어 기능을 제공함.
 가상화를 위한 VMID 범위 증가; 더 많은 수의 가상 머신 지원.
 페이지 테이블 접근 플래그의 하드웨어 업데이트에 대한 선택적 지원 및 선택적인 하드웨어 업데이트 더티 비트 메커니즘의 표준화.
 가상화 호스트 확장(Virtualization Host Extensions, VHE). 이러한 향상된 기능은 호스트와 게스트 운영 체제 간의 전환 시 발생하는 소프트웨어 오버헤드를 줄여 유형 2 하이퍼바이저의 성능을 개선함. 이 확장을 통해 호스트 OS는 실질적인 수정 없이 EL1 대신 EL2에서 실행될 수 있음.
 OS에 하드웨어 지원이 필요하지 않은 경우 운영 체제 용도로 일부 변환 테이블 비트를 해제하는 메커니즘.
 메모리 태깅을 위한 Top byte ignore.

 ARMv8.2-A 
ARMv8.2-A는 2016년 1월에 발표되었다. 향상된 기능은 네 가지 범주로 나뉜다.

 선택적 반정밀도 부동소수점 데이터 처리 (반정밀도는 이미 지원되었지만 처리가 아닌 저장 형식으로만 지원되었음.)
 메모리 모델 향상.
 RAS 확장(RAS Extension) 도입.
 통계적 프로파일링 도입.

 확장형 벡터 확장 (SVE)  
확장형 벡터 확장(Scalable Vector Extension, SVE)은 고능성 컴퓨팅 과학 워크로드의 벡터화를 위해 특별히 개발된 "ARMv8.2-A 아키텍처 이상에 대한 선택적 확장"으로 라이선스가 부여된다. 사양에 따라 ARM 라이선스 사용자는 128비트 배수로 128에서 2048비트 사이의 하드코딩된 아키텍처 레지스터 너비를 선택할 수 있다. 이 확장은 NEON 확장을 보완하며 이를 대체하지 않는다.

512비트 SVE 변체는 후지쯔 A64FX ARM 프로세서를 사용하는 후가쿠 슈퍼컴퓨터에서 이미 구현되었다. 이 컴퓨터는 2020년 6월부터 2022년 5월까지 2년 동안 세계에서 가장 빠른 슈퍼컴퓨터였다. 더 유연한 버전인 2x256 SVE는 AWS Graviton3 ARM 프로세서에 의해 구현되었다.

SVE는 GCC에서 지원되며, GCC 8은 자동 벡터화를 지원하고 GCC 10은 C 인트린직(intrinsics)을 지원한다. 2020년 7월 현재 LLVM과 클랭은 C 및 IR 인트린직을 지원한다. ARM 자체 LLVM 포크는 자동 벡터화를 지원한다.

 ARMv8.3-A 
2016년 10월, ARMv8.3-A가 발표되었다. 향상된 기능은 여섯 가지 범주로 나뉜다.

 포인터 인증 (PAC) (AArch64 전용); 새로운 블록 암호인 QARMA를 기반으로 하는 아키텍처의 필수 확장(컴파일러는 보안 기능을 활용해야 하지만, 명령어가 NOP 공간에 있으므로 이전 칩에서 추가 보안을 제공하지는 않지만 하위 호환성을 유지함).
 중첩 가상화 (AArch64 전용).
 고급 SIMD 복소수 지원 (AArch64 및 AArch32); 예: 90도 배수 회전.
 새로운 FJCVTZS (Floating-point 자바스크립트 Convert to Signed fixed-point, rounding toward Zero) 명령어.
 C++11/C11의 (비기본) 약한 RCpc(Release Consistent processor consistent) 모델을 지원하기 위한 메모리 일관성 모델의 변경 (AArch64 전용) (기본 C++11/C11 일관성 모델은 이전 ARMv8에서 이미 지원되었음).
 대규모 시스템 가시성 캐시를 위한 ID 메커니즘 지원 (AArch64 및 AArch32).

ARMv8.3-A 아키텍처는 이제 최소 GCC 7.0에서 지원된다.

 ARMv8.4-A 
2017년 11월, ARMv8.4-A가 발표되었다. 향상된 기능은 다음 범주로 나뉜다.

 "SHA3 / SHA512 / SM3 / SM4 암호화 확장", 즉 선택적 명령어.
 가상화 지원 개선.
 메모리 파티셔닝 및 모니터링 (MPAM) 기능.
 새로운 Secure EL2 상태 및 활동 모니터.
 부호 있는 및 부호 없는 정수 스칼라곱(SDOT 및 UDOT) 명령어.

 ARMv8.5-A 및 ARMv9.0-A 

2018년 9월, ARMv8.5-A가 발표되었다. 향상된 기능은 다음 범주로 나뉜다.
 메모리 태깅 확장 (MTE) (AArch64).
 "공격자가 임의의 코드를 실행할 수 있는 능력"을 줄이기 위한 분기 타겟 표시기 (BTI) (AArch64). 포인터 인증과 마찬가지로 관련 명령어는 이전 버전의 ARMv8-A에서 무연산(no-ops)이다.
 난수 생성기 명령어 – "다양한 국내 및 국제 표준을 준수하는 결정론적 및 진정 난수 제공".

2019년 8월 2일, 구글은 안드로이드가 메모리 태깅 확장(MTE)을 채택할 것이라고 발표했다.

2021년 3월, ARMv9-A가 발표되었다. ARMv9-A의 기준선은 ARMv8.5의 모든 기능이다. ARMv9-A는 또한 다음을 추가한다.

 확장형 벡터 확장 2 (SVE2). SVE2는 명령어당 더 많은 작업을 수행할 수 있도록 미세한 데이터 레벨 병렬성(DLP)을 높이기 위해 SVE의 확장 가능한 벡터화를 기반으로 구축되었다. SVE2의 목표는 현재 NEON을 사용하는 DSP 및 멀티미디어 SIMD 코드를 포함한 더 광범위한 소프트웨어에 이러한 이점을 제공하는 것이다. LLVM/클랭 9.0 및 GCC 10.0은 SVE2를 지원하도록 업데이트되었다.
 트랜잭셔널 메모리 확장 (TME). x86 확장을 따라 TME는 하드웨어 트랜잭셔널 메모리 (HTM) 및 트랜잭셔널 락 엘리전(TLE) 지원을 제공한다. TME는 스레드당 더 많은 작업을 수행할 수 있도록 거친 스레드 레벨 병렬성(TLP)을 높이기 위해 확장 가능한 동시성을 제공하는 것을 목표로 한다. LLVM/클랭 9.0 및 GCC 10.0은 TME를 지원하도록 업데이트되었다.
 기밀 컴퓨팅 아키텍처 (CCA).

 ARMv8.6-A 및 ARMv9.1-A 

2019년 9월, ARMv8.6-A가 발표되었다. 향상된 기능은 다음 범주로 나뉜다.
 일반 행렬 곱셈 (GEMM).
 Bfloat16 형식 지원.
 SIMD 행렬 조작 명령어 (NEON에 추가됨):
 BFDOT* (BFloat16 스칼라곱)
 BFMMLA (BFloat16 행렬 곱셈 및 누산)
 BFMLAL* (BFloat16 곱셈 및 누산, long으로 확장)
 BFCVT* (BFloat16 변환)
 가상화, 시스템 관리 및 보안을 위한 향상된 기능.
 그리고 다음 확장 기능 (LLVM 11에서 이미 지원 추가됨):
 향상된 카운터 가상화 (ARMv8.6-ECV).
 미세 트랩 (ARMv8.6-FGT).
 활동 모니터 가상화 (ARMv8.6-AMU).

예를 들어, 미세 트랩, WFE(Wait-for-Event) 명령어, EnhancedPAC2 및 FPAC가 있다. SVE 및 Neon을 위한 bfloat16 확장은 주로 딥 러닝 용도이다.

 ARMv8.7-A 및 ARMv9.2-A 

2020년 9월, ARMv8.7-A가 발표되었다. 향상된 기능은 다음 범주로 나뉜다.
 확장형 행렬 확장 (SME) (ARMv9.2 전용). SME는 다음과 같이 행렬을 효율적으로 처리하기 위한 새로운 기능을 추가한다.
 행렬 타일 저장소.
 즉석(On-the-fly) 행렬 전치.
 타일 벡터 로드/스토어/삽입/추출.
 SVE 벡터의 행렬 외적.
 "스트리밍 모드" SVE.
 PCIe 핫 플러그에 대한 향상된 지원 (AArch64).
 가속기에 대한 원자적 64바이트 로드 및 스토어 (AArch64).
 타임아웃이 있는 WFI(Wait For Interrupt) 및 WFE(Wait For Event) (AArch64).
 분기 기록 기록 (ARMv9.2 전용).
 콜 스택 레코더.

 ARMv8.8-A 및 ARMv9.3-A 

2021년 9월, ARMv8.8-A 및 ARMv9.3-A가 발표되었다. 향상된 기능은 다음 범주로 나뉜다.
 마스크 불가능 인터럽트 (AArch64).
 memcpy() 및 memset() 스타일 작업을 최적화하기 위한 명령어 (AArch64).
 PAC의 향상된 기능 (AArch64).
 힌트가 포함된 조건부 분기 (AArch64).

LLVM 15는 ARMv8.8-A 및 ARMv9.3-A를 지원한다.

 ARMv8.9-A 및 ARMv9.4-A 

2022년 9월, ARMv8.9-A 및 ARMv9.4-A가 발표되었으며 다음을 포함한다.

 가상 메모리 시스템 아키텍처 (VMSA) 향상.
 권한 간접 참조 및 오버레이.
 변환 강화(Translation hardening).
 128비트 변환 테이블 (ARMv9 전용).
 확장형 행렬 확장 2 (SME2) (ARMv9 전용).
 다중 벡터 명령어.
 다중 벡터 프레디케이트(predicates).
 2b/4b 가중치 압축.
 1b 이진 네트워크.
 범위 프리페치(Range Prefetch).
 가드 제어 스택 (GCS) (ARMv9 전용).
 기밀 컴퓨팅.
 메모리 암호화 컨텍스트.
 장치 할당.

 ARMv9.5-A 

2023년 10월, ARMv9.5-A가 발표되었으며 다음을 포함한다.

 다음에 추가된 FP8 지원 (E5M2 및 E4M3 형식):
 SME2
 SVE2
 고급 SIMD (Neon)
 하드웨어 더티 상태 추적 구조(FEAT_HDBSS)를 이용한 가상 머신의 라이브 마이그레이션
 체크 포인트 산술
 포인터 인증 코드를 생성하거나 확인할 때 PC와 SP의 조합을 수정자로 사용하는 기능 지원.
 영역 관리 확장(RME) 활성화 설계 지원, 과립 보호 테이블(Granule Protection Tables)에서 비보안 전용 지원 및 특정 물리 주소 공간(PAS)을 비활성화하는 기능.
 EL3 구성 쓰기 트랩.
 링크 연결 없이 주소 범위 및 불일치 트리거에 대한 중단점 지원.
 EL3에서 EL2 또는 EL1로 SError를 효율적으로 위임하는 기능 지원.

 ARMv9.6-A 

2024년 10월, ARMv9.6-A가 발표되었으며 다음을 포함한다.

 구조적 희소성 및 쿼터 타일(quarter tile) 연산을 통한 SME 효율성 개선
 멀티 칩렛 및 멀티 칩 시스템에서 공유 메모리 컴퓨터 시스템을 더 잘 지원하기 위한 MPAM 도메인
 가상 머신에서의 추적 및 통계적 프로파일링을 위한 하이퍼바이저 메모리 제어
 캐싱 및 데이터 배치 개선
 기밀 컴퓨팅을 위한 세밀한 데이터 격리
 EL1 시스템 레지스터의 비트 단위 잠금
 대규모 메모리 시스템을 위한 과립 보호 테이블(GPT)의 확장성 개선
 확장/축소 및 첫 번째/마지막 활성 요소를 찾기 위한 새로운 SVE 명령어
 OS가 애플리케이션 메모리와 상호작용할 수 있도록 하는 추가적인 비특권 로드 및 스토어 명령어 (LDL(U)R* 및 STL(U)R*)
 EL3에서 정의되지 않은 명령어 예외 주입

 ARMv9.7-A 

2025년 10월, ARMv9.7-A가 발표되었으며 다음을 포함한다.

 타겟 메모리 무효화 브로드캐스트
 유연한 리소스 관리 (MPAMv2)
 인공지능을 위한 6비트 데이터 유형
 비디오 코덱
 GICv5

 ARM-R (실시간 아키텍처) 
ARM-R 아키텍처, 특히 Armv8-R 프로파일은 예측 가능하고 결정론적인 동작이 필수적인 실시간 애플리케이션의 요구 사항을 해결하도록 설계되었다. 이 프로파일은 실시간 제약이 중요한 임베디드 시스템에서 고성능, 신뢰성 및 효율성을 제공하는 데 중점을 둔다.

Armv8-R 프로파일에 선택적인 AArch64 지원이 도입되면서 실시간 기능이 더욱 향상되었다. Cortex-R82는 이 확장된 지원을 구현한 최초의 프로세서로, 실시간 영역에 여러 가지 새로운 기능과 개선 사항을 가져왔다.

 각주 

 외부 링크 
 Arm Developer

분류:ARM 아키텍처
분류:64비트 컴퓨터