Arm 아키텍처

덤프버전 :


명령어 집합
CISC
AMD64x86 · M68K · 68xx · Z80 · 8080 · MOS 65xx · VAX
RISC
AArch64 ARM · RISC-V · MIPS · DEC Alpha · POWER PowerPC · CELL-BE
LoongArch · OpenRISC · PA-RISC · SPARC · Blackfin · SuperH · AVR32 AVR
VLIW
EPIC
E2K · IA-64 · Crusoe


1. 개요
2. 실행 상태
2.1. AArch32
2.2. AArch64
3. 명령어 집합
3.1. NEON
3.2. VFP
3.3. A32
3.4. T32
3.5. A64
4. 아키텍처 목록
4.1. ARMv4
4.2. ARMv5
4.3. ARMv6
4.4. ARMv7
4.5. ARMv8-A
4.5.1. 버전
4.5.3. ARMv8-A 호환 마이크로 아키텍처 테이블
4.6. ARMv9-A
5. 참고



1. 개요[편집]


ARM의 아키텍처와, 명령어 집합 및 관련된 기능들을 기술하는 문서.[1]


2. 실행 상태[편집]


파일:ARMv8-A_14p.jpg
Execution state.
64비트를 지원하기 위해 추가된 구조로, ARMv8-A 아키텍처와 함께 도입되었다.

AArch64와 AArch32가 있으며, 64비트 명령어를 실행할 때는 AArch64 상태로, 32비트 명령어를 실행할 때는 AArch32 상태로 변경하여 실행한다.


2.1. AArch32[편집]


32비트 실행 상태. ARMv7-A에서 발전한 실행 상태로, A32(ARM)T32(Thumb) 명령어 집합을 지원한다. 가상 주소가 32비트 레지스터에 저장된다.


2.2. AArch64[편집]


64비트 실행 상태. ARMv8-A에서 추가된 64비트 실행 상태로, A64와 고정 길이 32비트 명령어 집합을 지원한다. 가상 주소가 64비트 레지스터에 저장되며, 새로운 예외 처리 모델이 도입되었다.

AMD64가 x86_64, Intel64 등 여러 이름으로 불리는것 처럼 AArch64 또한 비슷한 이유로 표현이 뒤섞여 있는데 아키텍처 개발사인 ARM Holdings의 공식 표현은 AArch64이다. ARM측이나 오픈소스 개발 커뮤니티와 같은 엔지니어 집단에서는 AArch64라고 부르지만 Apple이나 Microsoft와 같은 일부 기업들은 ARM64라는 표기를 쓰는 경향이 있다.


3. 명령어 집합[편집]



3.1. NEON[편집]


ARM Neon 공식문서

원래 명칭은 ARM Advanced SIMD로, 줄여서 ASIMD라고도 부른다. ARMv6 아키텍처와 함께 추가된 SIMD 명령어 집합이다. ARMv8의 Advanced SIMD가 이 NEON을 기반으로 한다.


3.2. VFP[편집]


Vector Floating Point. ARMv6 아키텍처에서 처음으로 추가된 추가된 부동소수점 명령어 집합이다.


3.3. A32[편집]


A32 Instruction Set Architecture

과거에는 ARM 명령어 집합이라 불렸으나, 64비트 명령어 집합이 추가됨에 따라 A32로 이름이 변경되었다.


3.4. T32[편집]


T32 Instruction Set Architecture
과거에 Thumb, Thumb-2 등으로 불리던 명령어 집합으로, ARMv4T 아키텍처에서 처음 추가된 명령어 집합이다. 이후 T32라는 이름으로 변경되었다.
16비트, 32비트 길이를 지원한다.


3.5. A64[편집]


A64 Instruction Set Architecture

ARMv8-A에서 AArch64와 함께 새롭게 도입된 64비트 명령어 집합. 기존의 NEONVFP 명령어 집합들은 Advanced SIMD[2]라는 이름으로 표준화되었으며, 여러가지 기능들이 추가되었다.[3]


4. 아키텍처 목록[편집]


아키텍처는 프로파일로 구분된다. 프로파일에는 A-Profile (Applications), R-Profile (Real-time), M-Profile (Microcontroller)이 존재하며, 아키텍처 명칭에 ARMv8-A, ARMv8-M과 같이 해당 프로파일에 해당되는 알파벳이 접두어로 붙는다.

참고로 ARM에서는 ARM를 AArch라고 부르기도 한다. 즉 ARMv8-A의 구현체는 AArchv8-A이라고 부를 수 있고, Armv9-A 구현체는 AArchv9-A 구현체라고 부를 수 있다. 일부 프로그램에서는 armv8-a라는 표현 대신 aarchv8-a라고 표현하는 것을 볼 수 있다.


4.1. ARMv4[편집]


  • Thumb 명령어 집합 지원


4.2. ARMv5[편집]


  • Jazelle 및 VFPv2 명령어 집합 지원 추가


4.3. ARMv6[편집]


  • TrustZone 지원 추가
  • Thumb-2, SIMD 명령어 집합 지원 추가


4.4. ARMv7[편집]


  • Advanced SIMD(NEON), VFPv3/v4 명령어 집합 지원 추가
  • 가상화 지원
  • LPAE(Large Physical Address Extension) 지원(선택적)


4.5. ARMv8-A[편집]


ARMv8-A는 ARM최초로 64비트를 지원하는 아키텍처로, 2011년 10월에 발표되었다.

64비트 명령어 집합(A64) 지원이 추가되었으며, 기존 32비트 명령어 집합(A32/T32)과의 호환성을 제공한다.

  • 새로운 실행 모드인 AArch64 지원
    • 31개의 범용 64bit 레지스터
    • 전용 스택 포인터 레지스터
    • PC(Program Counter)는 더이상 레지스터로 직접 접근 불가능
    • 대부분 명령어는 A32와 같고 32bit 길이
    • 대부분 명령어는 32bit와 64bit 변수를 사용 가능
    • 주소는 64bit으로 사용
  • SIMD (NEON) 향상
    • 32개의 128bit 레지스터로 증가(기존에는 16개)
    • 배정밀도 포맷 지원
    • AES 암/복호화 및 SHA-1,SHA-2 해쉬 명령어도 위 레지스터를 사용
  • 새로운 예외처리 시스템


4.5.1. 버전[편집]


버전
발표 시기
비고
ARMv8.0-A
2011년 10월

ARMv8.1-A
2014년 12월

ARMv8.2-A
2016년 1월

ARMv8.3-A
2016년 10월

ARMv8.4-A
2017년 11월

ARMv8.5-A
2018년 9월

ARMv8.6-A
2019년 9월

ARMv8.7-A


ARMv8.8-A


ARMv8.9-A


ARMv9.0-A
2021년 3월
ARMv8.5-A 기반
ARMv9.1-A
2021년

ARMv9.2-A
2021년

ARMv9.3-A
2021년


  • ARMv8.0-A
    • ARMv8-A의 최초 버전을 이후 버전과 구분할 때 사용한다.
  • ARMv8.1-A
    • Atomic memory access 명령어 추가
  • ARMv8.2-A
    • 52-bit 주소 지원
    • FP16 데이터 처리 명령어 추가
  • ARMv8.3-A
    • Advanced SIMD 복소수 지원
  • ARMv8.4-A
    • 추가적인 crypto 명령어 추가
    • SHA512, SHA3 명령어 추가
  • ARMv8.5-A
  • ARMv8.6-A
  • ARMv8.7-A
  • ARMv8.8-A
  • ARMv8.9-A
  • ARMv9.0-A
    • ARMv9-A의 최초 버전을 이후 버전과 구분할 때 사용된다.
    • ARMv8.5-A 기반


4.5.2. 명령어 목록[편집]


파일:나무위키상세내용.png   자세한 내용은 ARMv8-A/명령어 목록 문서를 참고하십시오.



4.5.3. ARMv8-A 호환 마이크로 아키텍처 테이블[편집]


AArch64-ARMv8-A ISA와 호환되는 물리적 구현인 마이크로 아키텍처의 테이블이다

타깃 연도[4]
적용 칩셋 [5]
µarch[6]
ISA[7]
디코더
비순차 실행
버퍼[8]

ALU/FPU/LSU
[9][10]
L1 캐시(KB)
명령어+데이터

클럭당
성능 [11][12]

ARM Cortex 계열
2014
Exynos 5433
Snapdragon 810
Snapdragon808
Tegra X1
Opeteron A1100[13]
Cortex-A57
ARMv8.0-A
3-wide
128
2/2/2
48+32
127
2014
Snapdragon 410
Snapdragon 615
BCM2837
MT6795
Exynos 7580
Exynos 7270
Exynos 9110
Cortex-A53
ARMv8.0-A
2-wide
미지원
2/1/1
8-64+8-64
82
2015
BCM2711
Snapdragon
650, 652, 653
Cortex-A72
ARMv8.0-A
3-wide
128
2/2/2
48+32
147
2016
Kirin 960
Helio x30
Cortex-A73
ARMv8.0-A
2-wide
128
2/2/2
64+32
157
2017
Exynos 850
Cortex-A55
ARMv8.2-A
2-wide
미지원
2/2/2
16-64+16-64
89
2017
Snapdragon
670, 710, 712
Cortex-A75
ARMv8.2-A
3-wide
128
2/3/2
64+64
177
2018
Kirin 980
Cortex-A76
ARMv8.2-A
4-wide
128
3/2/2
64+64
265
2019
Kirin 990
Kirin 9000
Cortex-A77
ARMv8.2-A
4-wide
160
4/2/2
32/64+32/64
306
2020
Snapdragon 888
Exynos 2100,1080
Cortex-A78
ARMv8.2-A
4-wide
160
4/2/3
64+64
325
2020
Snapdragon 888
Exynos 2100
Cortex-X1
ARMv8.2-A
5-wide
224
4/4/3
64+64
380
2021
스냅드래곤 8 Gen1스냅드래곤 8+ Gen1
Exynos 2200
Cortex-X2
ARMv9-A
5-wide
288
--
64+64
413
Apple Silicon 계열
2013
A7
Cyclone
ARMv8.0-A
6-wide
192
4/3/2
64+64
200
2014
A8 / A8X
Typhoon
ARMv8.0-A
6-wide
192
4/3/2
64+64
237
2015
A9 / A9X
Twister
ARMv8.0-A
6-wide
192
4/3/2
64+64
305
2016
A10 / A10X
Hurricane
ARMv8.1-A
6-wide
4/3/2
64+64
325
Zephyr
[14]
32+32
[15]
2017
A11
Monsoon
ARMv8.2-A
7-wide
6/3/
64+64
382
Mistral
3-wide
2/2/1
32+32
168
2018
A12 / A12X / A12Z,
(S4, S5)[16]
Vortex
ARMv8.3-A
7-wide
6/3/
128+128
447
Tempest
3-wide
2/2/1
32+32
196
2019
A13
(S6,S7,S8)[17]
Lightning
ARMv8.4-A
7-wide
530
6/3/
128+128
498
Thunder
3-wide
2/2/1
96+48
202
2020
A14, M1, M1 Pro, M1 Max
Firestorm
ARMv8.5-A
8-wide
630
7/4/4
192+128
535
Icestorm
4-wide
111
3/2/2
128+64
261
2021
A15, M2
Avalanche
ARMv8.6-A
8-wide
xx+xx

Blizzard
4-wide
xx+xx
삼성 몽구스 계열
2016
Exynos 8890
M1
ARMv8.0-A
4-wide
96
3/2/2
64+32
152
2017
Exynos 8895
M2
ARMv8.0-A
4-wide
100
3/2/2
64+32
159
2018
Exynos 9810
M3
ARMv8.2-A
6-wide
228
4/3/3
64+64
220
2019
Exynos 9820
Exynos 9825
M4
ARMv8.2-A
6-wide
228
4/3/3
64+64
277
2020
Exynos 990
M5
ARMv8.2-A
6-wide
228
6/3/3
64+64
330
NVIDIA Tegra 계열
2014
Tegra K1(T132)[18]
Denver
ARMv8-A
2-wide[19]
128+64
144
2016
TegraX2
Denver2
ARMv8-A
128+64
186
2018
Xavier
Carmel
ARMv8.2-A
128+64
232
후지츠
2019
A64FX
A64FX
ARMv8.2-A + SVE[20]
4/2-wide
64+64


4.6. ARMv9-A[편집]


2021년 4월 공식 발표되었으며, ARMv8.5까지의 모든 기능을 포함한다. ARMv8-A와 별개의 아키텍처가 아니라 ARMv8.5-A의 연장선이기 때문에, ARMv8.6 이후의 기능들은 예전과 마찬가지로 ARMv9-A의 하부 스펙으로 존재한다.

ARMv9.1은 ARMv8.6 까지의 모든 기능을 포함한다.
ARMv9.2은 ARMv8.7 까지의 모든 기능을 포함한다.

보안 관련 기능과 머신 러닝 관련 기능, 벡터연산이 강화되었다.

특히 Memory Tagging Extension (MTE), Branch Target Identification (BTI) 그리고 Pointer Authentication Code (PAC)의 추가가 눈에 띈다. 이들은 해커들이 주로 사용하는 해킹기법이나 취약점을 프로세서 단계에서 차단 할 수 있도록 돕는 기능이다. MTE는 큰 성능 오버헤드 없이 흔한 메모리 버그인 Buffer Overflow나 Use-After-Free 로부터 메모리를 보호한다. BTI는 동적 분기가 임의 명령어의 경계 위치가 아닌 올바른 위치인지 확인하여 제어 흐름을 보호한다. PAC는 포인터를 서명하여 포인터가 올바른 메모리 주소라는 무결성을 보장한다.

NEON의 뒤를 잇는 SVE(Scalable Vector Extension)의 등장으로 벡터연산과 머신러닝 관련 기능이 크게 강화되었다. NEON은 128-bit으로 고정된 SIMD 연산을 지원하는데 비해, SVE는 최대 2048-bit 가변 길이 벡터 연산을 지원한다. 벡터 하나의 크기는 설계 할 때 128-bit부터 2048-bit까지 크기 중 하나를 선택하여 탑재한다. SSE, AVX, AVX512처럼 소프트웨어에서 개별적인 벡터 크기를 일일이 고려할 필요 없이 하나의 명령으로 처리 가능하다.


5. 참고[편집]


[1] 여기서 아키텍처란 Arm 아키텍처를 의미한다. 마이크로아키텍처는 포함하지 않는다. 자세한 내용은 Learn the architecture - Introducing the Arm architecture 문서를 참고할 것.[2] ASIMD2라고 부르기도 한다.[3] 다만 A64에 도입된 SIMD 기능에 대해서 NEON보다 너프되었다는 비판이 있다. How ARM Nerfed NEON Permute Instructions in ARMv8[4] 실 제품에 적용되어 출시된 연도 기준[5] 가짓수가 많을 경우 메인 코어로 사용된 경우만 기재[6] 마이크로아키텍처[7] 명령어셋 아키텍처[8] ROB 엔트리 개수[9] 산술 논리 연산 / 부동 소수점 연산 / 로드 스토어 유닛[10] 유닛 수가 같더라도 유닛의 성능에 따라 전체 성능이 달라지므로 참고만 할 것[11] IPC 긱벤치5 ST@1Ghz[12] 숫자가 클수록 규모가 큰 아키텍처라고 볼 수 있다.[13] 발표는 2014년 1월에 하였으나 실제품은 2016년 출시[14] 영문 위키백과에서는 3-wide로 기재하고 있지만 차세대인 Mistral 코어와 구조가 많이 달라 섣불리 단언하기 어렵다.[15] HMP 미지원이라 Hurricane과 동시에 동작하지 못하는 구조이다. 후속 아키텍처들과 구조가 많이 달라 성능을 알아내기 어렵다. Apple 발표에 근거하면 후속작인 Mistral보다 클럭당 성능이 높은 것으로 보인다.[16] Tempest만 사용[17] Thunder만 사용[18] K1은 T132, T124두가지 버전이 있었으며 T124버전엔 Cortex-A15 4코어가 들어갔고 대부분 기기는 T124버전을 사용했다. T132버전이 채용된 건 넥서스9 하나뿐이다.[19] VLIW uOPs는 7-wide[20] ARM SVE 512bit 벡터연산 지원

파일:CC-white.svg 이 문서의 내용 중 전체 또는 일부는
문서의 r85 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}}에서 가져왔습니다. 이전 역사 보러 가기
파일:CC-white.svg 이 문서의 내용 중 전체 또는 일부는 다른 문서에서 가져왔습니다.
[ 펼치기 · 접기 ]
문서의 r85 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)
문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)

문서의 r 판{{{#!wiki style="display: inline; display: none;"
, 번 문단}}} (이전 역사)



파일:크리에이티브 커먼즈 라이선스__CC.png 이 문서의 내용 중 전체 또는 일부는 2023-10-20 18:31:26에 나무위키 Arm 아키텍처 문서에서 가져왔습니다.