본 기고문은 멀티코어 접근법이 차세대 최신 기기 설계를 어떻게 지원하는지 알아보고 있다.
차세대 "멋쟁이" 기기를 위한 멀티코어 설계
글│이언 리카르즈(Ian Rickards), ARM
차세대 "멋쟁이" 기기들의 등장으로 개발자들과 설계자들에게 이들 기기들이 뚜렷하고 경쟁력 있는 시장이어야 한다는 시장 요구의 증가는 불가피 하게 될 것이다.
특정 기기가 차세대 "최고 멋쟁이"로 인정을 받기 위해서는 여러 가지 주요 기능이 요구된다. 먼저, 최소한의 전력 소모가 배터리 수명을 늘이고 배터리 무게를 줄이는데 매우 중요하다. 둘째로, 초소형 고성능 기기에 있어서는 발열이 큰 문제가 될 수 있다. 셋째로, 데스크톱 수준의 사용자 경험(user experience)과 뛰어난 그래픽이 이들 휴대용 기기에서도 매우 중요하게 되고, 마지막으로 신속한 제품 시장 출시화 시간을 보장하는 편리한 소프트웨어 개발 역시 두말할 필요 없다.
이들 목적이 서로 상충되는 부분이 있는 것 같기도 하지만, 제대로 된 멀티코어 테크놀로지는 상기에 언급한 성능을 모두 개선하는데 큰 기여를 할 수 있다. 멀티코어 설계는 휴대용 기기에 여러 가지 큰 이점을 제공한다. 더 작고 덜 복잡한 CPU를 멀티코어 프로세싱 클러스터에 사용함으로써 보통의 휴대용 기기에서 발견되는 다양한 작업부하에 맞는 폭 넓은 성능 확장성과 동시에 최고의 전력 효율성을 확보할 수 있다.
1999년 인텔의 프레드 폴락(Fred Pollack)은 싱글 코어 고성능 x86 프로세서가 전력 소모와 성능 사이의 가파른 관계를 이루는 복잡한 단계에 도달했다고 지적한 바 있다. 이후, 훨씬 간단한 아키텍처의 듀얼 코어가 PC 데스크톱을 점령했다. 많은 동일한 원칙이 휴대용 기기에도 적용되는데, 단지 규모가 훨씬 작다는 것뿐이다. 이제는 단일 칩 ASIC 플랫폼에 내재된 명령어 세트 복잡성이 x86을 넘지 않는 작고 효율적인 프로세서의 멀티코어 프로세서 클러스터를 어렵지 않게 포함할 수 있다.
ARM은 2004년에 자사의 최초의 멀티코어 프로세서인 ARM11TM MPCoreTM을 선보였으며, 최근에는 2007년 10월에 ARM CortexTM-A9 MPCore 차세대 멀티코어 프로세서를 발표한 바 있다. 이둘 중 어떤 제품을 사용해도 강력한 쿼드 프로세서 대칭형 멀티프로세서 코어를 몇 평방 mm 크기의 첨단 ASIC에 맞추어 넣을 수 있다.
전력 효율성
많은 사람들이 "멀티코어"하면 "성능 증가"를 의미하는 것으로 생각하지만, 임베디드 세상에서는 "전력 효율성 증가"를 의미하기도 한다. 부분적으로 이러한 전력 효율성은 프로세서가 합성될 때 제공되는 실행 옵션 덕분이기도 하다.
특정 프로세스 노드(예를 들어 65nm) 상의 프로세서를 예로 들자면, 기초 제작 프로세스, 표준 셀 라이브러리, 다양한 합성 실행 설정 구성 등 전력 효율성에 영향을 줄 수 있는 실행 선택의 폭이 여전히 넓다.
1) 제작 프로세스(Fabrication process)
일반적으로 오늘날의 싱글 코어 휴대용 기기는 기기가 대기 상태일 때 누출을 통해 전력이 소모되는 것을 제한해야 하는 필요성으로 인해 LP(저전력) 프로세스의 변형 형태를 사용한다. 더욱 일반적인(G) 종류의 프로세스는 동적 전력이 낮기는 하지만, 누출 정도가 높아서 배터리가 완전히 소모되기 전에 기기를 대기 모드로 유지하는 기간을 상당히 제한하게 된다.
많은 기기들에 사용되는 멀티코어 프로세서는 이러한 설계 선택에 새로운 차원을 더할 수 있다. 누출량이 근본적으로 전력이 적용되는 실리콘의 물리적 면적에 관련되어 있다. 크기가 큰 싱글 코어 프로세서는 전력이 적용될 때마다 전체 면적에 걸쳐서 누출이 일어난다. 멀티코어 프로세서는 한 개의 작은 CPU 코어 상에서 제한된 백그라운드 프로세싱을 제공하고 전력을 없앨 수 있기 때문에, 따라서 미사용 프로세서의 관련 누출을 없앨 수 있다.
2) 표준 셀 라이브러리(Standard Cell library)
실리콘 기기를 실행하는데 사용하는 표준 셀 라이브러리를 살펴보자면, 트랜지스터의 크기와 드라이브 강도를 결정하는 라이브러리의 "트랙 크기"가 주요 선택이 된다. ARM 물리적 IP는 라이브러리 전력과 성능 특징 사이의 설계 유연성을 가능하게 하는 세 가지 기본 라이브러리 유형을 제공한다.
- Low Power 7 트랙(최소 전력, 가장 작은 크기의 트랜지스터)
- General Purpose 9 트랙(범용, 균형 설계)
- HS High Performance 12 트랙(최고성능, 가장 큰 트랜지스터)
www.arm.com에서 표준 90G 프로세스 , Normal Vt의 16KB 16KB L1 캐시의 ARM1176JZ-STM 싱글 코어를 두 개의 라이브러리로 구현한 경우 각각의 실행 시험 예를 확인할 수 있다.
이로써 성능을 두 배로 높여야 하는 경우가 아니라면 듀얼 코어 프로세서가 꼭 싱글 프로세서의 "두 배 크기"가 되어야 할 필요가 없다는 사실을 알 수 있다. 좀더 크기가 작고 전력 소모가 적은 라이브러리를 사용하고, 각각의 Core를 끌 수 있는 기능을 추가해 반 이상의 누설 전류를 줄임으로써, 필요한 성능 수준을 유지하면서 평균적인 전력소모를 획기적으로 줄일 수 있다.
3) 면적 및 속도의 합성 옵션
낮은 운영 주파수를 대상으로 하는 경우에는 합성 툴이 사이즈가 작은(속도는 낮음) 라이브러리 요소를 사용할 수 있어야 한다. 최대 주파수를 향해 높아짐에 따라, 합성 툴이 타이밍에 부합하기 위해 로직 셀의 크기를 크게해야 하기 때문에 실리콘 면적이 상당이 늘어날 수 있다.
표준 셀 라이브러리와 합성 속도/면적 옵션을 결합하면 다양한 전력/성능/면적을 바꿀 수 있는 선택폭이 주어진다. 멀티코어 프로세서를 사용하면 개발자들이 CPU 수에 대한 옵션도 가질 수 있다. 그림 1의 Cortex-A9 MPCore 멀티코어 프로세서를 사용해 달성 가능한 전체 성능 수준을 비교한 그림에서 이 사실을 확인할 수 있다.
그림 1. Cortex-A9 MPCore 멀티코어 프로세서를 사용해 달성 가능한 전체 성능 수준
주어진 DMIPS 요건을 달성하기 위해, 설계자는 하나 혹은 작은 수의 고성능 CPU 수를 쓰든지 그보다 많은 수의 작은 크기의 저성능 CPU를 쓰는 선택이 가능하다. 위 그림을 처음 보면 별 차이가 없어 보이지만, 중요한 점은 다수의 작은 크기의 코어를 사용하면 mW당 컴퓨팅 성능이 높아지기 때문에 전력 효율이 훨씬 높다는 사실이다.
단일 CPU 시대에는 대부분의 설계가 최대 주파수에 중점을 두고, 최대/최다 트랜지스터의 표준 셀 라이브러리를 사용하여 최고 성능을 확보하는데 있었다. 멀티프로세싱은 멀티코어 접근법을 사용하여 전력과 면적 효율이 높은 셀 라이브러리를 통해 뛰어난 전체 성능을 가능하게 하기 때문에 단일 CPU 방법을 변화시킨다. 회선뿐만 아니라 트랜지스터의 작은 공간을 최대한 활용한다는 점에서 멀티프로세싱 선택이 자연스러워 보인다.
전력 수준 제어
동적 에너지에 관한 한 쿼드 코어 프로세서 상에서 동시 작업을 하기 위해서 반드시 단일 코어 상에 시간을 분할하는 것보다 많은 에너지를 사용할 필요가 없다. 프로세서가 작업이 없어지면 바로 대기 상태에 놓여지기 때문이다. 이러한 혜택은 효율적으로 밀접하게 연결된(tightly-coupled) 멀티코어 설계, 즉시 전력절감 모드와 멀티코어 활용 비용이 단일 프로세스 상에서 시간을 분할하는 비용보다 높지 않은 경우에만 적용될 수 있다. ARM 프로세서는 WFI 명령어를 사용하여 각 프로세서가 작업이 없을 때는 OS 관리 하에 바로 클럭 중지 정지(idle)로 들어가는 "인터럽트 대기(Wait for Inter-rupt)" 기능을 제공한다. 클럭이 중지되면 코어가 누출 전류만을 소모하기 때문에 이러한 기능이 프로세서를 위한 주요한 전력 절감 방법이 된다. ARM MPCore 테크놀로지는 하드웨어에서 멀티코어를 지원하는 비용이 소프트웨어 시간 분할 비용에 비해 최소화될 수 있도록 설계되었다.
정적 전력 소모가 대기 시간에 영향을 미치기 때문에 휴대용 기기에 있어서 중요한 문제가 된다. 특히 물리 법칙에 따라 누출이 불가피하게 증가할 수 밖에 없는 최신의 작은 구조 프로세스에서 특히 문제가 된다. 파워 게이팅을 사용해 미사용 로직 부분을 끄는 기능이 휴대용 기기에 있어서 더욱 중요해 지고 있다.
멀티코어 설계는 필요에 따라 전체 CPU를 키거나 끄는 방식으로 최대 성능과 정적 전력을 맞바꾸는 기능을 제공한다. 듀얼 코어 시스템은 1~2개 CPU를 사용하여 정적 전력 소모를 50~100%으로 하여 50~100%의 성능 수준을 갖춘다. 쿼드 코어 시스템에는 25, 50, 75, 100%의 성능 수준이 있다. 따라서, 정기 기간이나 약한 활동 기간에는 한 개 프로세서만 활성화하여 정적 전력 소모를 줄이는 것이 바람직하다. 각각의 CPU가 다른 전력 도메인에 위치하고 있어 전기적으로 볼 때 효과가 명백하며, 이 방법은 ARM 프로세서의 주요 EDA 업체가 제공하는 iRM (implementation reference metho-dologies)에서 잘 뒷받침되고 있다.
소프트웨어에서의 소비 전력 조절 또한 당연히 가능하다. 평균 부하를 확인하고 프로세서의 전원 상태를 선택하는 일이 OS의 역할이다. 리눅스는 이러한 "CPU 핫 플러깅"을 전적으로 지원한다. CPU를 키거나 끄는데 약간의 비용이 있지만(캐시를 Clean하고 다시 Reload하는데 약간의 Clock cycle이 소요된다.), 대기 전력 절감 혜택이 이러한 비용을 훨씬 넘어선다.
이종 멀티코어
이종 멀티코어는 몇 가지 다른 종류의 프로세서를 한 개의 ASIC에 결합하는 것을 의미한다. 동일한 명령어 세트를 가진 여러 가지 프로세서이거나, 다른 명령어 세트를 가진 프로세서이거나, 오디오나 비디오 엔진처럼 다른 전용 프로세싱 엔진을 가진 프로세서일 수 있다. 전용 하드웨어의 혜택은 특정 작업에 더 적합하다는 사실인데, 예를 들어 비디오 재생을 주로 하는 제품의 경우에는 전용 비디오 디코딩 하드웨어가 범용 프로그래머블 프로세서보다 전력 효율을 더 높인다.
하지만 운영 체제(Operating System)가 "대칭형 멀티프로세싱"을 사용하여 이들 다양한 프로세서들의 동작을 제어 할 수 없기 때문에, 이종 멀티코어 프로세서의 소프트웨어 설계가 더욱 복잡해진다. 즉 운영체제 대신에 소프트웨어 엔지니어가 다양한 프로세서들 사이의 모든 메시지 전달, Data의 동기화와 일관성(synchronization and coherency)을 처리해야 한다.
이종 시스템의 경우에 시스템 설계 역시 훨씬 복잡해진다. 예를 들어, 개발자들이 다양한 프로세서와 컴퓨팅 엔진의 연결을 쉽게 하기 위해 개방형 표준 AMBA® 버스와 같은 버스 아키텍처를 고려하고, 이종 시스템 내의 프로세서 사이에 일관성(Coherency)을 맞추는 문제를 고려해야 한다.
시스템 설계
ARM Cortex-A9 MPCore 멀티코어 프로세서는 멀티코어 클러스터를 미리 검증된 단일 매크로셀에 구축하는 작업의 복잡성을 감춘다. 최고 성능을 유지하고 관련 전력 소모를 줄일 수 있게 해 줌과 동시에 프로세서 간의 일관성(Cohereency)를 유지하기 위해 필요한 추가 작업 역시 매크로셀 자체 내부에서 처리한다. Cortex -A9 프로세서는 1 또는 2개의 AMBA 3 AXITM 마스터 인터페이스만을 나머지 시스템에 노출하기 때문에, 멀티코어 설계 통합이 간편해진다. 다른 멀티코어 솔루션의 경우에는 일관된 시스템 내에서 여러 개의 독립 프로세서를 통합하는데 더 많은 작업을 필요로 한다.
소프트웨어 설계
소프트웨어는 최신 휴대용 시스템 개발에서 중요한 구성요소이다. 제품을 일정에 맞추어 선보이는 것이 매우 중요하고, 그러기 위해서는 소프트웨어 개발 위험이 낮아야 한다.
그림 2. 개발자들이 차세대 휴대용 기기 수요에 부합할 수 있도록 지원하는 멀티코어 프로세서
많은 기존의 임베디드 소프트웨어 엔지니어들이 멀티코어에 소프트웨어를 작성하는 복잡성에 대해 우려를 표시하고 있는데, 항상 단일 프로세서 시스템만을 다루어 왔던 엔지니어들의 경우에는 충분히 이해할 만하다. 다행히 이러한 복잡한 작업의 대부분을 운영 시스템이 처리한다. SMP 운영 시스템은 여러 코어의 관리를 쉽게 하는 높은 수준의 "쓰레딩" API를 제공한다. 작업을 특정 프로세서에 전용으로 할당하는 방식으로 실시간 성능까지도 보장된다.
표준 아키텍처와 표준 운영 시스템을 선택하면 이러한 작업이 훨씬 수월해진다. 대부분의 OS 업체들이 멀티코어 솔루션의 가장 간단한 코딩 방법인 대칭형 멀티프로세싱(SMP) 지원을 발표했거나 현재 작업 중이다. 리눅스는 ARM을 비롯한 많은 아키텍처에 대한 SMP 지원을 갖추면서, 전력 효율 스핀록(power efficient spinlocks), 쓰레드 ID 레지스터, 메모리의 full performance를 활용하기 위한 메모리 access reordering을 지원하는 메모리 region 등과 같은 새로운 아키텍처 기능을 십분 활용하고 있다.
멀티코어 기기 프로그램 작업은 이전에는 이러한 기기를 처리해 본 경험이 없는 프로그래머에 있어서 걱정을 불러일으키기가 쉽다. 경험이 있는 프로그래머들 조차도 애플리케이션 병렬화를 통한 혜택보다 동시실행 지원의 비용이 높아 어려움을 겪은 경험이 있을 것이다. 그러나 ARM MPCore 테크놀로지를 활용하는 새로운 임베디드 휴대용 기기에서는 이러한 인식이 바뀔 수 있다.
멀티프로세싱 성능을 긴밀하게 통합하면 동시실행 지원 비용을 낮추고, 따라서 매우 정교한 수준의 소프트웨어 동시실행이 가능해 성능 이득을 실현할 수 있다. 이러한 기기에서는 활성 애플리케이션, 운영 시스템, 주변기기 드라이버 사이의 보이지 않는 동시실행이 효과적인 수준의 동시실행을 제공할 수 있다.
한 개의 중요한 작업이 있는 상황에서는 프로그래머가 이러한 작업을 작은 작업으로 분해하는 것을 고려해 볼 필요가 있다. 기존 단일 코어 기기에서와 마찬가지로 다른 가속기와 프로세서 사이에서 작업을 나누어 성능을 최대화하고 최대 전력 효율을 보장한다.(사실 이미 많은 단일 코어 프로세서를 사용하는 기기들이 실제로 여러 개의 단일 코어 프로세서를 사용하고 있다는 사실을 인식한다면 이러한 멀티코어로의 움직임이 그다지 큰 행보가 아닐 수도 있다.) 이와 같은 여러 개의 단일 코어 프로세서가 임베디드된 기기의 성능과 전력 이점이 단순히 멀티코어 프로세서 영역으로 확대된 것이다.
요약
본 기고문은 어떻게 멀티코어 설계가 동적 전력과 정적 전력 소모를 모두 줄이는 동시에, "불가능해 보이는" 성능 개선을 달성함으로써 휴대용 기기에 뛰어난 혜택을 가져오는지를 살펴 보았다. 제대로 실행된 멀티코어와 강력한 소프트웨어 개발을 지원하는 SMP 운영 시스템을 갖춘 멀티코어 설계가 완전히 새로운 "멋진 기기" 시대를 열고 있다.