벤치리뷰·뉴스·정보/아키텍처·정보분석

[분석정보] ARM버전 Windows로 시작된 x86 대 ARM의 CPU전쟁

tware 2011. 1. 24. 21:30

 

x86 대 RISC 전쟁의 재현과 같은 x86 대 ARM


 x86 CPU는 PC & 서버에서 모바일로. ARM 등 임베디드 CPU는 모바일 및 임베디드에서 컴퓨팅으로. 그 틈인 태블릿이 주 전장으로. 그리고 PC OS를 쥐고 있는 Microsoft는 차기 Windows를 ARM에 싣는다. 양상은 x86 대 ARM의 CPU 전쟁으로 이동하기 시작했다.

 이것은 예전의 x86 대 RISC (Reduced Instruction Set Computer) 군의 CPU 전쟁을 연상시키는 전개이다. 10여년 전에도 Alpha, PowerPC, MIPS, PA-RISC 같은 고성능 RISC CPU 군이 일어나. Microsoft도 Windows NT에서 x86뿐 아니라 Alpha, MIPS, 또한 PowerPC를 지원했다 (IA-64도 지원 가능) x86의 패권을 위협하는 구도라는 의미에서 당시의 재현처럼 보인다.


 그러나 이번은 조금 이야기가 다를지도 모른다. 그것은 이번에는 "어느 명령어 세트 아키텍처 (ISA)가 좋은가?"의 싸움이 아니라 최종적으로 "명령어 세트 아키텍처는 중요한가"라는 물음으로 진행될 가능성이 있기 때문이다.


 즉, ISA로 ARM이 x86을 잡고 대체한다 말하는 전개가 아닌, ISA의 중요성이 저하되고 이에 따라 명령 세트에 의존하는 바이너리 코드 자산의 중요성도 떨어진다는 흐름이 될 가능성이 있다. 더 컴퓨터 기술적으로 말하면, 하드웨어 가상화가 진행하는 방향으로 진행된다. 물론, 완전히 머신의 가상화로 진행하는 것은 아니고, 어디 까지나 중요성이 떨어진다는 수준이지만.

 다만, 이런 이야기는 소프트웨어 업계에서는 이미 듣고 질린 스토리다. Java가 등장했을 때도, Microsoft가 .NET으로 대항했을 때도 같은 이야기가 나왔다. 그러나 개인 컴퓨팅 시장만은 여전히​​ x86 바이너리 코드에 묶인 채, 거기에서 그다지 진행되지 않았다. 그리고 x86 CPU 메이커는 x86 바이너리 자산 위에서 번영을 누려 왔다. 하지만 스마트 폰과 태블릿에 따라 x86 PC의 미래가 흔들려 오는 지금, 풍향이 바뀌고 있다.

 


ARM과 x86의 두개의 바이너리 코드


 Microsoft는 ARM 아키텍처 기반의 SoC (System on a Chip)을 차기 Windows (Windows 8 세대?)에서 지원하는 것을 표명했다. 이것으로 Microsoft가 ARM을 라이센스 한 이유가 해명되었다. Microsoft에 따르면, NVIDIA와 Qualcomm, Texas Instruments (TI) 등이 제공하는 ARM SoC를 지원한다고 한다. ARM 버전의 Windows에서는 PC 용 Windows와 같은 사용자 인터페이스를 실현한 "ARM 네이티브"의 Microsoft Office도 제공한다 (그런데 ARM 윈도우인 윈도우RT는 망했죠. 마소가 직접 런칭한 서피스 RT도 망했고.....).

 그러나 현재의 계획에서는 ARM 버전의 Windows에서 네이티브 x86 바이너리 Windows 소프트웨어는 지원하지 않는다. 즉, x86으로 부터 동적 바이너리 변환은 하지 않는다. Microsoft가 만들려고 하는 것은 x86 에서의 Windows 응용 프로그램 자산을 계승하는 ARM 버전의 Windows가 아니라, Windows의 외형 (Look & Feel)과 소프트웨어 개발의 유사성을 갖춘 OS이다.

 그러면 Microsoft는 앞으로 어떻게 나아갈 것인가? 단순히 ARM 바이너리와 x86 바이너리가 별도인 파일이 될지, 아니면 x86과 ARM의 팻 바이너리 (FAT Binary) 화에 도전 하는가? (많은 과제가 있다) 최종적으로 x86 → ARM 바이너리 변환에도 대응 가능성은 있는 것인가?

 다른 바이너리 코드를 변환하는 것은 성능 트레이드 오프가 있고(모순된, 상반된,대립적인 관계,양립할 수 없는, 하나를 얻으려면 하나를 잃어야 하는) 있고, 골치 아프다. 그것도 RISC → x86이 (RISC 프로그램을 X86 CPU로 돌리는)아닌, 그 반대인 x86 → RISC 되면 장벽이 높다. 명령 포맷과 명령 길이가 간단한 RISC로 부터의 변환보다 복잡한 x86 으로 부터의 변환이 처리가 복잡하게 되기 때문이다. 게다가 통상 싱글 스레드 스칼라 처리 성능이 필요하므로 현재의 ARM 계열 코어로는 짐이 무겁다.

 그러나 ARM은 급속하게 변하고 있다. ARM은 현재 싱글 스레드 스칼라 성능을 높이는 방향으로 향한다 설명을 하면, 다음 Cortex-A15는 3-way 수퍼 스칼라 Out-of-Order 실행 엔진이 된다. NVIDIA가 개발하는 ARM 코어도 그러한 높은 스칼라 성능 노선에 따르고 있다. 게다가 ARM 계열 SoC는 멀티 코어로 향하기 때문에, 이진 변환의 무게도 미래에는 어느 정도 줄일 수 있다. 또한 ARM은 ARMv7-A 가상화 지원도 추가한다.

 이러한 ARM 하드웨어의 흐름을 생각하면, 바이너리 변환도 가능하게 되어 간다. 그러나 문제는 그 의미가 있는가? 하드웨어 폼팩터도 바뀌는 (데스크탑 / 노트북에서 스마트 폰 / 태블릿) 때에, x86 바이너리 자산 계승에 성능상의 희생을 치르는 것이 의미가 있는 것인가?

 

 

ARM 코어의 개요

 

 

ARMv7-A 가상화 및 40bit 어드레싱

 

 

ARM Cortex A-15의 파이프 라인 (ISA 로는 ARMv7-A)

 


.NET에 의한 하드웨어 의존의 해소가 당초 계획


 그보다는 오히려 Microsoft가 향후 응용 프로그램의 .NET 관리 코드로의 이행을 추진 할 가능성이 높은 것이다. 애초에 .NET에 의한 하드웨어 기반의 해소는 10년 전에 Microsoft가 목표로 한 골이었다.

 거슬러 올라가면 Microsoft는 Windows에서 x86 이외의 ISA 지원에 나름대로 적극적이었다. DEC에서 끌어들인 팀이 개발한 Windows NT에서는 지금까지의 Windows 계 OS에서 일신, 마이크로 커널화와 Hardware Abstract Layer (HAL)로 하드웨어를 추상화 하는 방식을 취했다. HAL이 하드웨어의 차이를 은폐하기 때문에 이식성이 높은 OS 구조가 되어 RISC 계열 CPU들을 지원할 수 있었다. 이 시점에서는 Microsoft 자신이 RISC에 미래가 있다고 믿고 있었기 때문이다.

그 한편으로, 이쪽도 Windows 계 OS와 다른 임베디드 OS로서 Windows CE가 탄생했다. Microsoft는 Windows CE를 리얼타임 OS로 분류하고, 이쪽도 ARM을 비롯한 여러 ISA에 대응했다. Windows CE의 전략은 PC용 Windows와 API 유사성을 갖게 하는 것으로 개발을 용이하게 한다는 것이었다.

 그렇지만 이러한 비 x86 ISA에 대한 Microsoft의 대응도 PC에서의 x86의 패권을 위협에 까지 이르지 못했다. 이르기는 커녕 서버에도 x86이 침투하게 됐다. Microsoft 자신도 x86 바이너리 자산 위에서, 안녕을 탐하게 되었다.

 


하드웨어를 가상화하는 .NET 프로그래밍 모델

 

 

 

.NET Framework 환경


 프로그래밍 모델에서 큰 전환점이 된 것은, Java의 등장이었다. 가상 컴퓨터에서 중간 코드를 실행시키는 모델은 ISA의 속박을 해방. 그에 따라 Microsoft도 대항해 "NGWS (Next Generation Windows Service)"라고 불려진 Windows .NET 전략을 내놓았다. 당초 Windows .NET은 사실상 Windows를 재구축하는 계으로획 하드웨어 추상화를 훨씬 추진한 것이었다.

알려진 것 처럼 .NET에서는 런타임 "CLR (Common Language Runtime) '이 중간 언어를 네이브로 JIT 컴파일 한다. Microsoft는 CLR의 위에 C# 클래스 라이브러리를 올려 .NET Framework를 제공하고 있다. 본래의 예정으로는 Windows Vista 세대는 새로운 응용 프로그램은 Win32 API를 두드리지 않고 .NET Framework에 실리게 되는 것이었다.

 그 당시의 구상은 새로운 앱이 모두 .NET으로 이주해 Windows PC뿐만 아니라 휴대 전화를 포함한 다양한 디바이스에서 동일한 앱이 달리게 된다고 했었다. .NET Framework는, OS도 CPU도 감싸기 때문에 OS와 CPU는 일정하지 않아도 좋았다. Windows CE 일 필요도 없었다. 또 부족한 컴포넌트는 네트워크에서 동적으로 다운로드 하고, 로컬 컴포넌트를 요소를 줄여 휴대 기기에 올리는 것도 쉬어진다.

 이 흐름에서는 최종적으로 런타임의 아래에 있는 것이 Windows가 아닌 런타임의 위에 구축되는 Windows가 된다. 레거시 API를 두드리는 응용 프로그램은 점차 사라져 간다. 소프트웨어 층을 두껍게하는 것으로, 하드웨어를 완전히 추상화 한다는 것이 골(Goal) 이었다 (이렇게 만들수록 매우 가볍게 돌아갈 수 있는 소프트도 조금더 무겁게 돌아가죠. 물론 하드웨어 성능이 그걸 커버해 준다고 하지만...  DX쪽도 추상화 되어서 돌리는데, 결국 최대한 없애는 쪽으로 진화되고 있죠 (맨틀이나 Vulacn 같은게 촉매 역할을 했구요). PC만 생각하면 이래도 될지도 모르지만, 모바일 화에는 별로 좋지가 않죠. 중간에 뭐가 자꾸 끼면 무겁게 되죠. 그런 처리도 전부 CPU가 다 해야 하니까 말이죠. 네이티브 처리보다 가벼울 수가 없죠. 소프트웨어쪽은 뭐 그쪽도 분야에 따라서는 더 빠르게 처리하기 위해서 알고리즘을 짜고 SIMD화 할수 있는건 한다던가 하는 쪽도 있지만, 그냥 대충 하드웨어 성능이 올라가는 것에 올라타서 편하게 개발하려고만 하는 형태가 매우 많았죠. 그걸 공짜 점심 이라고 했구요..).

 그런데 Windows Vista에서 도중의 구상이 크게 후퇴. 결국 지금까지 방법인 Win32 API 기반 응용 프로그램이 주류인 채로 남아 버렸다. .NET에 의한 추상화는 어중간한 상태로 남겨졌다. 레거시의 압력이 거센것과 Java 위협이 클라이언트 PC에서 멀어진 것이 큰 원인이다.

 

바이너리로 부터 가상 머신의 구상 (中間 コード = 중간 코드).

 


소프트웨어 측은 가상화로 서서히 다가간다.


 그러나, 흐름은 급변하고, 이제 스마트폰과 태블릿의 파도가 노도와 같이 컴퓨팅 장치의 세계로 몰려든다. 여기에서 존재감을 가지는 것은 x86/64 ISA와 Windows 및 x86/64 바이너리 자산이 아닌 ARM ISA에 있는 iOS와 Android이며, 프로그래밍 모델도 부분적으로 변화되고 있다.

 예를 들면 Android에서는 "Dalvik VM (Virtual Machine)" (Java에서 변환했던 dex 바이너리 실행)에 의한 하드웨어 가상화로 이식성을 확보. 그것 평행하게 네이티브 성능을 원하는 소프트에 대해서는 NDK (Native Development Kit)도 제공하는 노선을 취했다. 완전히 가상화로 제한하지 않는 것이 현실 솔루션일지도 모른다. Android에서는 하드웨어를 가상화한 모델쪽이 주이며, 네이티브 프로그래밍 모델은 서브가 되고 있다.

 덧붙여, GPU의 병렬 컴퓨팅 파도가 있어, 이쪽도 런타임이 중간 코드를 GPU 네이티브로 변환하는 모델을 취하고 있다. 또 큰 틀을 보면 Low Level Virtual Machine (LLVM)과 같은 플랫폼도 등장했다. 즉, 흐름을 보면, 프로그래밍 모델은 단계적으로 추상화를 높이는 방향으로 진행되고 있다.

 이 상황에서 "Windows"의 ARM 대응. 여기에서 Microsoft가 ARM 버전의 Windows에서 ARM 바이너리 네이티브 보다도 .NET 기반으로 이주를 추진하면 Microsoft의 세계에서도 하드웨어 추상화의 정도가 높아진다. 그러한 흐름이 되면 소프트웨어 측면뿐 아니라 하드웨어 측면에도 큰 영향을 미칠 것이다.

 

 

2011년 1월 24일 기사 입니다.

 

 

[정보분석] IDF에서 보다. Google, Microsoft, Intel의 줄다리기

 

 

[분석정보] 5W 이하의 저전력 프로세서의 개발로 향하는 Intel

 

 

[분석정보] 명확해진 Core Microarchitecture

 

 

[아키텍처] Core Microarchitecture 속도의 비밀은 CISC의 아름다움

 

 

[아키텍처] 인텔(Intel) 모바일 반격의 열쇠가 되는 ​​저전력 CPU 실버몬트(Silvermont)

 

 

[분석정보] Bay Trail이 실현하는 윈도우 안드로이드가 공존하는 태블릿

 

 

[분석정보] Apple iPhone 5s의 A7로 모바일 ARM 64bit 일번탑승

 

 

[분석정보] 컴퓨텍스 2013 태블릿 윈도우 라이센스 재검토 시작 윈텔(Wintel) 제국의 역습