애플이 맥에서 세번째 CPU 명령어 세트 변경을 발표
x86 코어의 성능과 전력 문제를 자체 설계 코어로 해결
애플은 앞으로 맥에 자체 개발한 CPU를 사용한다고 발표했습니다. 지금까지는 인텔 x86/x64 명령어 세트의 CPU를 쓰지만, 애플의 칩은 Arm 계열 명령어 세트 CPU입니다. x86/x64에서 Arm v8로 명령어 세트 전환은 소프트웨어에 큰 영향을 줍니다. 애플은 예전에도 모토로라 68000 계열에서 PowerPC로, PowerPC에서 인텔 x86으로 명령어 세트를 바꿨으며 ,이번이 세번째 전환입니다.
68000 계열에서 PowerPC로 전환한 이유는 성능을 끌어올리기 어려운 CISC(Complex Instruction Set Computer) 명령에서 성능을 끌어올리기 쉽다고 여겨진 RISC(Reduced Instruction Set Computer)로 바꾸기 위해서입니다. PowerPC에서 인텔 x86으로 전환은 PowerPC의 쇠퇴와 맞물려, 계속해서 확장하는 x86을 도입하기 위함입니다. 이번에는 성능/전력 효율이 나쁜 x86을 버리고 최적의 효율을 이끌어내는 Arm으로 건너갑니다. 애플이 지금까지 CPU를 바꾼 역사를 돌이켜 보면 이런 전환이 놀라운 일은 아닙니다.
현재 애플의 빅 CPU 코어는 마이크로 아키텍처를 봤을 때 하이엔드 수준의 CPU 코어입니다. 클럭 당 성능은 PC용 CPU와 비교해도 될 정도입니다. 이건 지극히 당연합니다. 왜냐면 7nm 공정의 애플 Arm CPU 코어 다이는 똑같이 7nm 공정으로 만든 AMD 젠 2와 비슷하기 때문입니다. 즉 애플의 CPU 코어는 계속해서 확장한 결과 x86/x64 CPU 코어와 비슷한 수준까지 확대됐다고 할 수 있겠습니다.
그리고 애플이 사용하는 Arm v8.x 명령어 세트도 계속해서 확장돼 고성능 CPU에서 부족했던 기능이나 보안 대책 등을 강화했습니다. 또 애플은 맥에 탑재하는 SoC에 아이폰/아이패드용 A 시리즈 SoC와 똑같이 자신들이 필요로 하는 기능을 넣습니다. GPU 코어와 신경망 코어 등의 핵심 기술은 이미 애플 A 시리즈에서부터 축적돼 왔습니다.
4~5년 전만 해도 컨슈머용 Arm CPU 코어의 성능은 x86/x64 시스템에 비해 많이 부족했고 기능도 떨어졌습니다. 하지만 지금은 그런 점들이 많이 해결돼 애플의 아키텍처로 바꿀 수 있게 됐습니다. Arm 코어로 전환하면서 애플 스스로가 원하는 성능 범위에 최적화된, 높은 효율의 코어를 만드는 게 가능합니다. 또 독자적인 CPU 명령 확장도 노리고 있씁니다. x86/x64 계열 CPU는 성능/전력에 한계가 있으며 코어 SoC를 자유롭게 설계하거나 CPU 명령을 확장하기도 어렵습니다.
젠2와 비슷한 크기의 A13 CPU 코어
테크인사이트는 작년에 애플의 최신 SoC인 A13의 다이 사진을 공개했습니다. https://gigglehd.com/gg/7636880 여기서 CPU 코어와 GPU 코어는 구분하기 쉽습니다. 여러 코어가 모여서 같은 레이아웃 패턴이 중복되서 나타나거든요. A13의 빅 코어는 2개니까 2개의 똑같은 레이아웃이 대칭된 부분이 빅 코어입니다. 7nm 공정의 빅 코어 2개 크기는 L2 캐시를 제외하고 5.1제곱mm가 됩니다. 1개의 7nm CPU 코어는 2.5제곱mm가 됩니다.
2.5제곱mm의 CPU 코어면 매우 작아 보이지만, 7nm라는 공정에서는 상당히 큽니다. Arm CPU는 빅 코어도 7nm 공정에서 1제곱mm가 일반적입니다. 그리고 x86/x64와 비교하면 A13 빅 코어는 똑같은 TSMC 7nm 공정으로 만든 AMD 젠 2 코어보다 조금 작은 수준입니다. 즉 애플의 빅 코어는 다이 영역으로 따지면 x86/x64와 거의 같다고 보면 됩니다. x86/x64 CPU의 명령 디코더 오버헤드를 고려하면 큰 차이가 없다고 봐도 됩니다.
모바일 CPU 코어 마이크로 아키텍처는 두 방향으로 나뉩니다. 하나는 저전력으로, 가능한 아키텍처를 적게 억제합니다. 다른 하나는 고성능으로 PC용 CPU 수준으로 아키텍처를 확장하려는 방향입니다. 애플은 아키텍처를 확장해 나가면서 IPC(Instruction-per-Clock)을 높이는 방향으로 발전해 왔습니다.
애플은 고성능 저전력 CPU 벤처 기업인 PA Semi를 인수해 CPU 코어를 개발하기 시작했습니다. 다른 모바일 SoC 제조사가 쿼드코어로 늘렸을 때도 2코어를 유지하고, 대신 CPU 코어 마이크로 아키텍처를 확장했습니다. A10에서는 빅 코어와 스몰 코어의 조합으로 바꾸고, 빅 코어는 아키테척처를 더욱 확장했습니다. 지금은 7명령 디코드/사이클의 프론트 엔드를 갖췄습니다. Arm 자체 CPU 코어는 4명령 디코드/사이클(Cortex-A77)이니 애플이 Arm 설계를 크게 넘어선 것입니다. 실행 유닛, 스케줄러도 프론트 엔드에 맞춰 확장됐습니다.
애플은 이렇게 CPU 코어 수를 늘리는 것보다 CPU 코어를 강화하는 방향으로 모바일 CPU을 발전시켰습니다. 애플 CPU 마이크로 아키텍처 확장은 모바일에만 쓰기에는 뭔가 부자연스러운 방향이었지요. 그래서 애플 CPU를 맥에 도입할 거라는 추측이 전부터 나왔습니다. CPU 코어 마이크로 아키텍처의 발전을 돌이켜보면, 맥에 애플 CPU 코어의 도입은 언젠가는 일어났을 일이라고 할 수 있습니다.
빠르게 아키텍처를 확장하는 Arm CPU 코어
이 점은 칩의 다이 크기만 봐도 분명하게 드러납니다. 애플 A 시리즈 SoC의 경우, 초기의 A4는 53제곱mm였으니 임베디드 칩 수준의 크기였습니다. 그러나 아이패드용 X나 Z 버전이 되면 120제곱mm를 넘어섭니다. 메인스트림 PC용 칩과 비슷한 크기의 다이가 됩니다.
애플은 PC 수준의 CPU 코어 성능을 추구하고 있습니다. 이런 쪽으로 향한 Arm CPU 제조사는 애플 혼자만이 아닙니다. 삼성 엑시노스도 자체 코어를 개발하며 아키텍처를 확장해 왔습니다. 엑시노스는 14nm 공정으로 제조된 첫 모델 엑시노스 M1에서 4명령 디코드/사이클이었으나, 10nm의 M3에서는 6명령 디코드로, 7nm의 M5에서는 6명령, 5nm의 M6는 8명령 디코드까지 확장됩니다.
엑시노스의 명령 디코드 확장은 애플 CPU 코어를 쫓아가는 식입니다. 16nm의 애플 A10은 6명령 디코드, 10nm에선 6명령 디코드, 5nm에서는 애플을 앞선 8명령 디코드를 목표로 합니다. Arm도 최신 Cortex-A1에서 명령 디코드를 확장할 계획입니다. Arm은 신중하게 아키텍처를 확장해 왔으나 그 흐름도 바뀌어 나가고 있습니다.
이렇게 보면 Arm 계열 CPU 코어 트렌드는 x86/x64 CPU 수준으로 확장해 나가는 것임을 알 수 있습니다. X86/x64 계열 하이엔드 CPU는 4~5명령 디코드/사이클이니 Arm CPU가 더 크게 확장한 것처럼 보입니다. 하지만 CISC 계열 x86/x64 명령어 세트와 RISC 계열 Arm v8-A는 명령어의 크기가 다르기에 단순히 디코딩/사이클을 비교해선 안 됩니다.
예를 들어 젠 2는 4명령 디코드지만 실행 파이프는 11 파이프입니다. Arm 계열의 6~7명령 디코드 CPU는 실행 파이프만 비교한다면 x86/x64 계열 CPU의 4~5명령 디코드 수준이라 할 수 있습니다. 하여간 상용 Arm 계열 CPU 코어가 고성능 마이크로 아키텍처로 성장하고 있음은 분명합니다. 그런 의미에서 Arm 맥은 고성능 CPU 영역에 Arm 코어가 투입되는 첫 단계이며, 앞으로도 이 흐름은 계속될 듯 합니다.
Arm v8 명령 세트 아키텍처의 진화
애플에게 있어 Arm 아키텍처의 명령은 자신들에게 알맞는 마이크로 아키텍처를 쉽게 쓸 수 있다는 게 전부가 아닙니다. 명령어 세트 아키텍처에도 자신들의 수요를 반영하기 쉽다는 점이 있습니다. Arm의 기본 명령어 세트 아키텍처는 Arm이 직접 개발하며, 얼마 전까지만 해도 커스텀 명령을 인정하지 않았습니다.
하지만 애플은 Arm과 명령어 세트의 커스텀에 대해 협상이 가능한 큰 고객이며, 자신들이 원하는 걸 Arm 명령어 세트에 넣어 왔습니다. Arm은 64비트 버전의 Arm v8-A 명령어 세트를 도입하며 명령어 세트를 확장해 왔습니다. 2014년의 Arm v8.1-A부터 시작해 매년 소수점 한자리의 버전을 올려 왔습니다. 그리고 애플은 Arm 명령어 세트 확장을 가장 먼저 도입하는 라이센스 업체입니다.
실제 Arm CPU 코어는 아직도 Arm v8.2-A에 머물러 있으나 애플의 코어는 Arm v8.3-A 이후까지도 지원하고 있습니다. 구체적으로는 애플 A12 CPU 코어가 Arm v8.3-A 수준의 명령을 지원합니다. 애플 개발 문서를 보면 애플 A12 이후의 CPU에서 Arm v8.3-A의 주요 기능인 Pointer Authentication를 지원한다고 나와 있습니다. 또 애플 A13에서는 Arm v8.4 수준의 명령어를 지원합니다. LLVM(Low Level Virtual Machine)의 CPU 지원 목록을 보면 애플 A13 CPU 커스텀인 ProcAppleA13이 있으며, 여기서 Arm v8.4의 새 기능인 SHA-3(Secure Hash Algorithm-3)가 있습니다.
이렇게 보면 Arm v8.x의 새로운 명령/새로운 기능을 Arm보다도 애플이 먼저 사용하고 있음을 알 수 있습니다. 이는 새로운 명령/기능이 애플의 요청을 받아 추가됐을 가능성이 높음을 시사합니다. 맥에서 Arm v8 코어 SoC를 사용한 배경에는 애플이 Arm CPU 코어 마이크로 아키텍처와 명령어 세트의 확장에 앞장서왔다는 점도 있습니다. 오랜 시간에 걸쳐 확장해온 결과 마침내 맥의 명령 세트 아키텍처로 사용할 수준까지 올라왔습니다.