최근에 소프트웨어를 깔면서, 그리고 docker image를 빌드하면서 자꾸 ARM과 AMD을 설정해줘야 하는 부분이 있었고, 가끔씩 뭐가 뭔지 까먹는다. 둘이 비슷하기도 하고, 실수해서 잘못 입력하기도 한다. 아무튼, 그러한 작업을 계속하다 보니까 자연스레 관심이 생겼고, 결론적으로는 마인크래프트를 설치하는 과정에서 컴파일러와 인터프리터의 궁극적인 의문점이 생겼다. ( 뭔지는 다음 포스팅에서 다룰 예정 )
그전에 앞서, ARM와 AMD 아키텍처를 먼저 짚고 넘어가야 할 것 같다. 우리가 흔히 아는 CPU는 아마 Intel일 것이다. 그리고 맥북을 좀 안다면 맥북에서 m1, m2와 같은 CPU를 내고 있다는 것도 알 것이다. CPU 회사들의 제품들 아키텍처는 다음과 같이 정리할 수 있다.
포인트는, intel과 amd는 AMD 계열이며, apple는 ARM 계열이라는 것이다. 따라서 intel과 amd의 CPU 언어 차이는 서울과 부산 방언 수준의 차이가 있지만, AMD와 ARM의 차이는 거의 외국어라서 아예 호환이 안된다.
CPU 마다 기계어가 다르다. 그래서 어떤 코드라도, 기계어로 변환할 때 아키텍처에 따라서 다르다. 같은 회사(intel, amd, apple)에서 나온 CPU는 모두 같은 기계어를 쓰겠지만, 다른 회사끼리의 기계어는 다르다. 그중에서 intel과 amd는 역사적으로도 같이 발전해 왔기 때문에 AMD 계열로 묶이며, x86_64/amd64 이렇게 한 번에 묶어서 표현하는 경우도 있다.
역사적 배경
AMD의 발자취
AMD(Advanced Micro Devices, AMD)는 1969년 설립된 회사이며, ARM과 비교하면 먼저 등장했다. 1970년대부터 Intel의 세컨드 소스 공급 업체였다. 따라서, AMD는 Intel의 CPU 개발을 도왔으며, 1990년대부터 독자적인 프로세서를 개발하고 2003년에 AMD64(x86-64) 아키텍처를 발표하고, Ryzen이라는 CPU 명으로 Intel과 경쟁을 하고 있다.
우리가 흔히 아는 CPU는 아마 Intel일 것이다. 그와 경쟁하고 있는 것은 Ryzen인데, 이 두 제품을 들어본 사람도 있고, 아닌 사람도 있을테다. 중요한 것은 이 두 CPU는 모두 x86-64 아키텍처를 사용한다. AMD가 이 아키텍처의 기반을 마련했다는 것에서 착안해 일반적으로 AMD 계열의 CPU라고 부르며, 이 포스팅에서도 AMD라고 다룬다.
AMD는 큰 특징으로는 CISC 방식을 사용한다는 점이다. CISC는 Complex Instruction Set Computer라는 뜻이다. 다음과 같은 특징이 있다.
- 복잡하고 다양한 명령어 집합
- 하나의 명령어로 여러 작업을 동시에 처리 가능
- 복잡한 연산에 유리하지만 전력 소모가 큼
다음으로는 애플 실리콘이 해당하는 ARM에 대해서 알아보자.
ARM의 여정
ARM은 1990년 영국에서 시작된 회사로, 처음에는 Acorn RISC Machine의 줄임말이었다. ARM의 독특한 점은 직접 칩을 제조하지 않고 설계만 라이선스 해주는 회사였다는 점이다. 임베디드 시스템 중심으로 모바일, 2010년대에는 스마트폰 시장을 장악하기 시작했고, 2020년대에는 데스크톱/노트북에 진출하여 큰 인기를 끌고 있다. 애플 실리콘이 이에 해당한다.
앞서 AMD와 비교하면 늦게 시작했다. 서서히 두각을 나타내고 있으며, 앞서 설명한 기존의 AMD는 CISC 방식을 사용하지만 ARM은 RISC 방식을 사용한다, RISC는 Reduced Instruction Set Computer라는 뜻이다. 다음과 같은 특징이 있다.
- 단순하고 효율적인 명령어 집합
- 각 명령어가 한 번에 하나의 작업만 수행
- 하드웨어가 단순해 전력 효율성이 높음
여기까지 설명을 들으면, 그리고 RISC의 R은 Reduced, CISC의 C는 Complex니까, 딱 보면 RISC가 좋아 보인다. 맞을까? 맞다. 기술이라는 것이 상황에 따라 다르지만 최근에는 RISC 방식을 많이 선호하는 편이며, 그 이유는 여러 가지가 있다. 먼저 레지스터 구조에 대해서 알아보자.
레지스터 구조
x86-64
- 16개의 범용 레지스터 (RAX, RBX, RCX 등)
- 상대적으로 적지만 복잡한 명령어로 보완
ARM64
- 31개의 범용 레지스터 (X0-X30)
- 더 많은 레지스터로 메모리 접근 횟수 감소
- 효율적인 데이터 처리 가능
이렇게 보면, ARM이 좋아보인다. 일반적으로 ARM이 전력 효율성 측면에서 승리했으며, 당연히 전력 효율성이 중요한 모바일 시장에서부터 점점 점유율을 넓혀가고 있다. 맥북 m1의 등장, 그리고 계속해서 나오는 m2, m3 그리고 m4까지 맥미니와 함께 데스크톱과 노트북 시장을 장악해가고 있다.
하지만, 모든 기술은 일장일단이다. x86이 유리한 영역도 당연히 존재한다. 전력을 많이 사용하기는 하지만 고성능이 필요한 분야(게이밍, 고성능 컴퓨팅 등)에서는 여전히 x86 아키텍처가 유리하긴 하다.
개인적으로는 ARM 아키텍처의 전망이 더 좋아보인다. 대부분 사용자들의 실제 작업은 웹 브라우징이나 문서 작업 등의 가벼운 작업이며, 이런 경우에는 ARM64가 더 적합하다. 조용하고, 긴 배터리 수명, 빠른 부팅과 앱 실행 등등 좋은 장점들이 많다. 그리고 하드웨어 관련한 인프라가 많이 발전해서 성능보다는 사람들이 유틸리티를 보다 신경 쓰게 되었다.
그리고 사실 현실적인 이유는, 1970년대부터 먼저 CPU 시장에 진출한 AMD가 온갖 역풍을 다 맞았을테다, 16비트 -> 32비트 -> 64비트 확장되면서 기술적인 복잡성이 누적되었을 테고, 1978년의 8086부터 시작해서 하위 호환성을 계속 유지하고 있기 때문에, 40년 전 설계 결정들이 아직까지 발목을 잡고 있을 테다. 그에 비해 ARM은 초신성이며, 깨끗한 설계로 시작했고 모바일 시대의 요구사항에 부합하며, 전력 효율성이 점점 중요해지는 시대가 왔기 때문이다.
실제 사용에서의 차이점
인스톨러 플랫폼
맥 사용을 하다보면 프로그램을 다운로드할 때 다양한 선택지를 볼 수 있다. Intel Mac(x86 or AMD), Apple Silicon(M chip or ARM64) 이 중 어떤 것을 설치할 것이냐는 선택지이다.
위와 같이 다양한 버전으로 크롬드라이버 인스톨러가 나뉜다. 이는 당연하게도, CPU에 따라서 완전히 다른 기계어를 사용하기 때문이다. 따라서 항상 자신의 플랫폼에 맞는 인스톨러를 선택해야 한다.
로제타(Rosetta)
docker의 유구한 역사를 돌이켜보면, 하이퍼바이저를 개선하기 위해서 호스트 OS 위에 가상 OS를 다운로드하곤 했다. 하지만 docker가 나오면서 docker engine 위에서는 어떤 도커 이미지도 잘 돌아가도록 운영체제에 종속적인 문제가 사라졌지만, CPU에 종속적인 것은 피할 수 없었다. 따라서 docker를 빌드할 때 --platform 파라미터를 통해서 AMD나 ARM 아키텍처로 사용할 수 있다.
특히, ARM을 사용하는 경우에는 로제타라는 에뮬레이터를 통해서 x86_64/amd64 아키텍처를 사용할 수 있도록 할 수 있다. 물론 에뮬레이팅의 오버헤드로 인해 성능은 떨어지겠지만, 나쁘지 않다. 로제타가 맥에 설치되어있지 않는 경우에는 이 버튼 활성화가 안되며 로제타를 설치하는 이야기를 한다.
마치며
맥북 m chip 시리즈의 흥행 중 하나가 ARM이라는 아키텍처에 대한 것이라는 소식은 대충 알고 있었는데, 실제로 조사해 보니까 확실히 다르긴 다르다.. 또 예전에 전공 수업에서 C 언어 프로그래밍 수업에서 little & big endian에 대한 설명과 과제를 매우 힘들게 내주셨는데, 그 당시는 이해를 못 했지만, 마이크로프로세서 수업과 더불어 지금 와서 생각해 보니 참, 배울 내용이 많은 수업이었다는 생각이 든다...
사실 이 포스팅은 원래 하려고 하기도 했고, 마인크래프트를 설치하다가 느낀 인터프리터 언어와 컴파일러 언어의 차이에 대해서 개인적인 견해를 녹여서 포스팅을 하려고 한다. 좀 더 다양한 이야기가 듣고 싶다면 다음 포스팅도 봐주시길...
'CS > Computer Architecture' 카테고리의 다른 글
컴파일러와 인터프리터의 차이 ( 고급편 ) (3) | 2025.06.07 |
---|---|
유니코드(Unicode) 이야기와 UTF-8 (0) | 2025.05.07 |
빌드(build) 그리고 컴파일러와 인터프리터 (1) | 2023.10.15 |