Arm, Arm ARM, Armv9, ARM9, ARM64, Aarch64, A64, A78,.. 구분하기
(nickdesaulniers.github.io)Arm 에코시스템 입문자를 위한 용어 정리
- Arm 아키텍처는 심플 어드레싱 모드를 가진 RISC 제품군
- Arm Limited는 Arm 아키텍처를 관리하는 영국 회사
- ARM 은 Acorn RISC Machine 에서 Advanced RISC Machines 가 된 것
- Arm ARM(Architecture Referecnce Manual) 은 Arm 에 대한 프로그래밍 매뉴얼
- Armv9 는 아키텍처 제품군중 최신(글쓴 현재). SIMD 벡터(SVE) 와 매트릭스 연산(SME/SME2) 등을 추가
- Armv9.4-A 는 Armv9 의 최신 확장 배치. 이 확장들은 Arm ARM에 문서화 되어있음. 일부 확장은 도입 당시에는 선택인데, 향후 버전에서는 필수 사항이 될 예정
- Armv9.4-A 의 A 는 "Application Profile"을 의미. MMU를 통해서 가상 메모리를 지원하며, 폰/노트북/서버등 모든 Arm 시스템에서 볼 수 있음.
실시간 시스템을 위한 "R" 이나, MMU가 없는 마이크로컨트롤러용 "M" 같은 것도 있음.
이 세개의 아키텍처 프로파일 역시 "A" "R" "M" - AArch64 는 ARMv8에서 도입된 "execution state". 64b 레지스터를 지원(31개의 일반용 레지스터, 전용 64b 스택 포인터, 64b 프로그램 카운터, zero-value pseudo 레지스터)
이와 함께 ARMv7 에서 사용되던 32b 기능을 AArch32라고 명명 - 흥미롭게도 Arm ARM에선 ARM64 용어를 언급하지 않음 (애플, 마이크로소프트, 리누스 토발즈는 이걸 선호)
이 이름은 궁극적으로는 의미가 있음; arm64 리눅스 커널은 AArch64 또는 AArch32 execution state에서 사용자 공간 코드를 실행가능하지만, 커널 자체는 AArch64 전용임 - A64는 AArch64에서 소개된 명령어 셋. 실제로는, AArch64가 지원하는 유일한 명령어 셋임. AArch64의 레지스터는 64b지만, 명령어 자체는 아직 32b(고정폭)
A32 는 예전 ISA를 의미. 이 역시 32b 고정폭. T32는 Armv8 이전에 사용하던 명령어 셋으로 32b 와 16b Thumb2 을 의미 - A64와 혼동하지 말아야할 것으로 "A78"로 코어를 지칭하는게 있는데 이것은 Cortex-A78.
Arm은 Arm 아키텍처 뿐만 아니라, 우리가 마이크로 아키텍처라 부르는 아키텍처 구현체도 설계함. 뒤에오는 숫자와 상관없이 Cortex 또는 Neoverse 라는 단어가 보이면 이것들은 Arm 이 설계한 마이크로 아키텍처임.
예를 들어서 Cortex-A78은 ArmV8.3 까지의 확장을 구현함. 위키피디아에는 이걸 정리한 템플릿이 있음 - DynamIQ(이전의 bit.LITTLE)은 멀티코어에서 동종(homogeneous)이 아닌 이기종(Heterogeneous) 코어를 사용한다는 아이디어를 기반으로 함
이 디자인의 장점은 서로 다른 때에 서로 다른 일을 잘할 수 있다는 것. 성능이 필요할 때는 큰전력을 소모하는 Out-of-order 프로세서를, 전력 소모를 줄이기 위해서는 느린 in-order 코어를 사용
인텔이 Alder Lake에 성능/효율 코어를 활용하는 비슷한 작업을 하는 것을 보는게 흥미로움 - 레퍼런스 매뉴얼을 뒤져보면 다양한 Execution State들이 흥미롭게 발전함 : A55, X1, X3 등
- 레거시 용어들
- ARM9 는 Armv9와 혼동하면 안됨. 코어 제품군으로 일부는 ARMv4t 를 구현하고, 일부는 ARMv5를 구현함
- StrongARM은 ARMv4 CPU 시리즈로 DEC가 만든 것. 인텔은 소송 합의 통해서 이 IP를 획득했고 결국 XScale 이라는 자신들만의 ARMv5 마이크로 아키텍처를 디자인
결국엔 인텔은 XScale을 사용하던 PXA SoC 제품군을 Marvell에 매각. 인텔이 Atom과 함께/또는 XScale을 고수했다면 세상이 어땠을지 궁금 - ARMv4는 Thumb라고 부르는 압축 명령어 세트를 도입. 명령어들은 16b 고정폭
- ARMv6t2 는 Thumb2 를 도입. 32b 명령어 및 UAL(Unified Assembly Language)등을 지원