2개가 짝을 이룬 ARM의 CPU 아키텍처

 

ARM은 차세대 64-bit 마이크로 아키텍처 Cortex-A57(Atlas)와 Cortex-A53(Apollo)를 발표했습니다. 왜 ARM이 2종류의 마이크로 아키텍처 CPU코어를 동시에 발표했을까요? 그것은 ARM이 다른 특성의 코어를 조합해서 시스템의 소비 전력을 줄이려 하기 때문입니다.

 

Cortex-A57은 고성능 대형 코어, Cortex-A53은 저전력 소형 코어로, ARM은 이 두 종류의 CPU 코어를 부하에 따라 바꿔 전력 증가를 막으려 합니다.  ARM은 이 아키텍쳐에 big.LITTLE Processing이라는 이름을 붙였습니다. 부하가 높은 태스크를 실행할 때 대형 big 코어로 바꿔 빠르게 처리를 끝내고, 부하가 낮은 태스크에선 되면 소형 LITTLE코어로 돌려 전력 사용량을 줄입니다.

 

01.png

 

02.png

 

03.png

 

Cortex-A50 시리즈

 

ARM은 현재 big.LITTLE이 자사 저전력 기술의 핵심이라 밝혔습니다. 그 때문에 앞으로도 ARM의 플래그쉽 CPU 코어는 대형 코어와 소형 코어를 짝을 지어 등장하게 될 것입니다. 실제로는 Cortex-A57과 Cortex-A53이 big.LITTLE의 2세대째가 됩니다. 1세대에서는 big이 Cortex-A15였고 LITTLE이 Cortex-A7이었습니다. big.LITTLE의 1세대는 모바일 전용 SoC(System on a Chip)에 들어간 제품이 벌써 개발되어 소프트웨어의 준비가 완료된 2013년 전반기부터 big.LITTLE이 현실에 제공되기 시작합니다. big.LITTLE은 시작 직전의 단계에 도달해 있습니다.

 

04.png

 

ARM big.LITTLE의 성능과 전력 관계

 

05.png

 

성능과 에너지 효율의 관계

 

ARM이 big.LITTLE 아키텍처를 도입하는 이유는 모바일 CPU가 필요로 하는 성능 범위가 넓어졌기 때문입니다. 사용자는 보다 쾌적한 반응 속도나 고사양의 애플리케이션을 요구합니다. 하지만 배터리 사용 시간이 줄어 드는 것은 싫어합니다. 그 때문에 스마트폰이나 태블릿의 SoC는 고성능과 초저전력 양쪽 모두로 성능 범위를 늘릴 필요가 있습니다.

 

단일 CPU 아키텍처로 고성능과 초저전력 양쪽 모두의 요구를 충족하긴 어렵습니다. 그러나 고성능 CPU와 초저전력 CPU를 따로 넣고 태스크에 따라 바꾸면 양쪽 모두의 요구를 만족하는 것이 가능해집니다. big.LITTLE은 그런 구상에서 시작됐습니다.

 

07.png

 

big.LITTLE과 기존 아키텍처의 비교

 

 

최초의 big.LITTLE은 Cortex-A15와 Cortex-A7

 

08.png

 

1세대 big.LITTLE은 big의 Cortex-A15와 LITTLE의 Cortex-A7, 이렇게 두 종류의 CPU코어를 씁니다. 명령 세트는 완전 호환되지만 내장된 마이크로 아키텍처가 다른, 두 종류의 코어를 조합한 헤테로지니어스(Heterogeneous:이종 혼합)입니다. 다른 식으로 표현하면 비대칭 멀티 코어 구성이 됩니다. ARM은 헤테로지니어스 컴퓨팅에 적극적으로 나서고 있지만 이것은 big과 LITTLE의 동일 아키텍쳐 코어 2종류와 GPU 형태의 throughput 코어, 그리고 특정 용도 전용 가속기의 4가지 종류의 코어 편성을 상정하고 있습니다. 그리고 CPU와 GPU 사이는 LLVM (Low Level Virtual Machine)을 써서 추상화하는 방식을 취하려 합니다.

 

ARM은 big.LITTLE의 장점을 입증하기 위해 사내 테스트 칩을 개발해 big.LITTLE의 실증 실험을 실시했습니다. 이것은 Cortex-A15가 2코어, Cortex-A7이 3코어인 구성으로,성능과 전력의 실증 테스트를 거쳤습니다. 작년 단계에서는 구상에 머물렀지만 지금은 실증도 끝나 제품화를 눈 앞에 두고 있습니다.

 

09.jpg

 

10.jpg

 

big.LITTLE 하드웨어의 작동 테스트 종료

 

11.png

 

ARM의 구상에서는 big.LITTLE을 쓰는 모바일 컴퓨팅 디바이스 SoC는 Cortex-A15/57를2~4코어, Cortex-A7/53을 2~4코어 구성하게 됩니다. 모두 합해 최대 8개의 코어가  스마트폰이나 태블릿에 들어갑니다. 실제로 삼성의 SoC인 엑시노스의 차세대 버전은 4개의 Cortex-A15와 4개의 Cortex-A7을 넣은 옥타코어 구성이 됩니다.

 

big.LITTLE의 첫번째 단계에서는 big 코어와 LITTLE 코어를 같은 수로 구성하는 것이 바람직합니다. 같은 수의 CPU 코어를 써야 빠르고 간단하고 쉽게 태스크를 옮길 수 있기 때문입니다. 또 하드웨어적으로 인터럽트 컨트롤러를 공유해 인터럽트를 옮길 필요가 있습니다. 또 big과LITTLE의 두 CPU 클러스터 사이를 일관성 버스로 묶어 CPU 코어의 아키텍처 스테이트를 캐시를 통해 전달이 가능해야 합니다.

 

12.png

 

big.LITTLE의 시스템 아키텍처

 

13.jpg

 

big.LITTLE의 컨셉

 

그런 구조를 쓰면 CPU 코어 사이에 태스크를 전달할 때 현 상황을 외부 메모리에 저장할 필요가 없습니다.그 때문에 스위칭에 걸리는 시간은 최소한으로 줄어듭니다. 실제로는 CPU 코어를 작동시키는 데 시간이 걸리지만, 그 동안은 현재 태스크를 실행중인 코어를 작동시키는 것으로 딜레이를 최소화합니다.

 

CPU 코어 사이에 태스크를 전환할 때 작업 처리가 멈추는 블랙 아웃 시간은, 꺼져있던 CPU 코어의 아키텍처 스테이트를 캐시에 기록해, 켜져있는 CPU 코어에 복원할 때까지의 시간 뿐입니다. 스테이트의 저장에 걸리는 시간은 CPU 코어의 클럭에 따라서 다르지만 600MHz를 바꾼다고 가정했을 경우 8.3us입니다. 스테이트의 복원은 같은 클럭일 경우 같지만, 변환 클럭을 느리게 하면 할수록 저장과 복원에 걸리는 시간은 길어집니다. ARM의 설명에 의하면 최소 블랙 아웃이 20us정도까지 억제된다고 합니다.

 

14.jpg

 

big.LITTLE의 내부 접속 IP

 

15.jpg

 

처리 간격이 없는 big.LITTLE의 변환

 

16.png

 

big.LITTLE의 GIC

 

17.png

 

big.LITTLE의 태스크 이동

 

덧붙여서 ARM의 big.LITTLE 구성에서는 L2 까지의 캐시가 클러스터에 부속되며 big과 LITTLE이 서로 공유하지 않습니다. 이것은 LITTLE 코어의 캐시 용량을 줄이고 저전력으로 작동할 수 있도록 했기 때문입니다. 그 때문에 태스크를 이동시켰을 경우 캐시의 새로고침과 warmup의 타임 랙도 발생합니다. 그래서 big.LITTLE은 이런 시간을 숨기는 구조도 넣었습니다.

 

꺼져 있던 CPU 코어 캐시가 DRAM에 있던 내용을 가져올 때까지는 켜져 있던 CPU 코어를 쓸 수 있도록 합니다. 이런 방법으로 태스크 전환 시간을 짧게 줄였습니다.

 

 

클러스터 베이스에서 CPU 코어 베이스로 발전

 

작년 가을에 big.LITTLE을 ARM이 발표했을 때는, big과 LITTLE의 전환을 클러스터 단위로 밖에 할 수 없었습니다. 예를 들어 4 CPU 코어의Cortex-A15 클러스터와 4 CPU 코어의 Cortex-A7 클러스터로 전환하는 식입니다. 클러스터 마이그레이션 모델에서는 부하의 높은 태스크 때문에 모든 코어가 고성능 코어로 바뀌면서 효율이 나빴습니다.

 

그래서 이번에는 CPU 코어 단위로 전환하는 CPU 마이그레이션 모델이 들어갔습니다. 실제로는 이 CPU 마이그레이션 모델에서 big.LITTLE을 시작하게 됩니다. 첫번째 컨셉인 클러스터 마이그레이션 모델은 2011년에 프로토 타입 소프트웨어가 제공되었지만, 아직까진 정식 모델로 제공되진 않습니다.

 

CPU 마이그레이션 모델에서 big 클러스터의 CPU 코어는 LITTLE 클러스터의 CPU 코어와 1대1로 조합되어 전환됩니다. 그 덕분에 부하가 높은 태스크를 실행하는 경우에는 필요한 수의 CPU 코어만 big 코어로 전환하고, 그 이외의 코어는 LITTLE 코어만 작동시킬 수 있습니다. 이걸로 보다 효율적으로 전력을 효과적으로 줄일 수 있습니다.

 

18.jpg

 

big.LITTLE의 이용 모델

 

19.jpg

 

20.jpg

 

21.jpg

 

22.jpg

 

23.png

 

클러스터 마이그레이션이나 CPU 마이그레이션 모두 소프트웨어의 변화는 작습니다. 애플리케이션과 시스템 아키텍쳐에는 변경이 전혀 필요하지 않습니다. 태스크 마이그레이션의 트리거도 가상화를 사용하는 경우는 하이퍼바이저가 발행해 OS 측에서 추상화 됩니다.


태스크를 전환하는 포인트 자체는 CPU의 전압과 동작 클럭을 바꾸는 DVFS(Dynamic Voltage and Frequency Scaling) 단계에 들어갑니다. big 코어가 일정 클럭까지 떨어지면 LITTLE 코어로 바꾸는 트리거가 발행됩니다. LITTLE에서 big으로 가는 경우는 반대로 일정 클럭까지 올라가면 바뀝니다. OS에 들어가 있는 DVFS의 구조를 사용하기 때문에 내장이 쉽습니다.


또,ARM은 완전하게 헤테로지니어스 동작하는 멀티 프로세싱 모델 big.LITTLE MP도 제공합니다. 이 경우는 OS가 태스크의 스케줄을 관리해서 부하가 높은 태스크를 big코어에, 부하의 낮은 태스크를 LITTLE 코어에 할당할 필요가 있습니다. 이 역시 하드웨어 변경은 필요없고 소프트웨어만으로 지원 가능하지만, OS 지원이 필요하기 때문에 시간이 걸립니다. 아직까진 개발 중입니다.

 

24.png

 

big.LITTLE의 소프트웨어 아키텍처

 

25.jpg

 

26.jpg

 

27.jpg

 

28.jpg

 

 

big.LITTLE에 관심을 보이는 삼성

 

10월에 미국에서 열린 ARM의 기술 컨퍼런스 ARM Techcon 2012에서는 삼성이 big.LITTLE에 대한 자세한 설명을 했습니다. 삼성은 Cortex-A15 기반 엑시노스에 Cortex-A7을 넣어 big.LITTLE의 실증을 하고 있습니다. 실제 칩을 기반으로 한 것이라 삼성의 발표는 구체적입니다.


삼성의 검증 시스템에서는 big의 Cortex-A15가 800MHz부터 1.7GHz로 동작, LITTLE의 Cortex-A7이 200MHz부터 1GHz로 동작했고, 전압은 0.9에서 1.2V 사이에서 움직였습니다. Cortex-A15부터 Cortex-A7로 스위치하는 경우는 Cortex-A15가 800MHz로 떨어졌을 때입니다. 반대로 Cortex-A7에서 Cortex-A15로 바뀌는 건 Cortex-A7이 1GHz로 작동할 때입니다.

 

29.jpg

 

30.jpg

 

엑시노스의 검증 결과

 

이 시스템에서 검증한 결과 성능은Cortex-A15 시스템과 거의 같지만 전력은 최대 68%까지 줄일 수 있었다고 합니다. 전력 절감 효과가 극적인 이유는 실제로 태스크의 대부분을 LITTLE 코어로 처리할 수 있는 정도이기 때문이라는군요. 아래 그래프는 Cortex-A9의 부하를 나타낸 것인데 big 코어가 필요한 붉은 부분은 지극히 한정되어 있음을 알 수 있습니다.

 

big.LITTLE 아키텍쳐는 2011년 가을에 발표되었을 당시, 라이센스를 맺은 SoC 제조사가 얼마나 있을지 미지수였습니다. ARM은 OEM 쪽의 반응은 좋다고 했으나 실제 제품에선 증명되지 않았습니다. 그러나 지금 삼성이 적극적으로 대응하면서 미래가 트이기 시작했습니다.


 

x86에서 big.LITTLE을 목표로 하는 Montalvo

 

이대로 ARM의 예측대로 가면 ARM 기반 모바일 기기에서는 big.LITTLE로 크고 작은 코어를 갖추는 것이 당연한 것처럼 보입니다. ARM Cortex-A7/53의 코어는 매우 작기 때문에 실장이 진행 중입니다.


그럼 이것은 big.LITTLE을 쓰는 ARM만의 특권일까요? 이 방법은 PC에선 쓰지 못하는 것일까요? 물론 PC도 할 수 있습니다.


원래 big.LITTLE 같은 아이디어는 이전부터 몇 번이나 제기됐던 적이 있습니다. 그리고 x86 호환 CPU에서도 big.LITTLE과 비슷한 아이디어를 실현하려는 움직임이 있었습니다. 가장 좋은 예가 실리콘 밸리의 CPU 벤처기업인 Montalvo Systems입니다.


Montalvo는 원래 NexGen에 있던 Vinod Dham씨나 Transmeta의 CEO였던 Matt Perry씨, Microprocessor Report의 애널리스트를 비롯한 다채로운 멤버가 모인 기업입니다. 이 회사는 x86 호환 대형 CPU 코어와 소형 CPU 코어를 조합한 비대칭 멀티 코어 구성 CPU를 개발하려고 했습니다. 부하가 높은 애플리케이션은 대형 코어로 부하가 낮은 애플리케이션은 소형 코어로 실행하는 구조입니다. 


Montalvo의 원래 계획은 자세히 알려지지 않았지만 기본 아이디어는 big.LITTLE과 비슷해 보입니다. 당시 Montalvo의 관계자는 2009년에 제품 설명을 공개할 수 있을 것이라 말했지만, Montalvo가 Sun Microsystems에 인수되고, Sun도 Oracle에 인수되면서 결국 Montalvo의 x86도 사라져 버렸습니다. Montalvo의 개발팀은 뿔뿔이 흩어졌지만 일부는 NVIDIA로 갔다고 하네요. ARM이 big.LITTLE을 발표하기 전에 NVIDIA가 테그라 3에서 Cortex-A9를 성능 최적화 쿼드코어와 전력 최적콰 싱글 코어로 구성해 서로 스위치하는 아키텍처를 도입했음을 잊지 맙시다. 


Montalvo는 사라졌지만 이 시도는 x86에서도 같은 아이디어가 가능함을 나타내고 있습니다. 인텔과 AMD 모두 고성능 x86 CPU 코어와 저전력 x86 CPU 코어를 가지고 있습니다. 인텔은 22나노 하즈웰과 22나노 아톰 코어 실버몬트 편성이 가능합니다. AMD는 28나노 불도저 계열인 스팀롤러와 밥캣 계열 재규어로 비슷한 접근이 가능합니다.


인텔은 다른 연구도 하고 있습니다. International Symposium on Computer Architecture (ISCA' 12)에 Scheduling Heterogeneous Multi-Cores through Performance Impact Estimation (PIE)라고 제목을 붙인 공동 연구 논문에서 big.LITTLE 형태의 CPU 구성 시 성능 예측 연구를 발표했습니다. 인텔은 예전부터 HPC(High Performance Computing) 분야에서 똑같은 명령 세트 아키텍쳐를 써서 big과 LITTLE을 편성하는 연구를 하고 있어, 이 방법의 가능성도 눈여겨 볼 필요가 있습니다.

기글하드웨어(http://gigglehd.com/zbxe)에 올라온 모든 뉴스와 정보 글은 다른 곳으로 퍼가실 때 작성자의 허락을 받아야 합니다. 번역한 뉴스와 정보 글을 작성자 동의 없이 무단 전재와 무단 수정하는 행위를 금지합니다.