cover story2 병렬화와 저전력화로 보는 프로세서 기술 전망 컴퓨터의 핵심 부품인 프로세서는 가장 빠르게 진보하는 컴퓨터 기술 중 하나이다. 이제는 CPU라 불리는 전통적인 마이크로프로세서뿐만 아니라 그 래픽 처리를 담당하는 GPU 그리고 저전력 프로세서까지 종류가 다양해졌다. 2009년 이런 프로세서들의 핵심 키워드는 모두 공히 병렬성의 증대와 에너지 효율 개선으로 볼 수 있다. 이 키워드를 중심으로 2009년에 어떠한 프로세서 신기술들이 등장할지 알아보자. 5 IT Technology 김민장 art.oriented@gmail.com, http://minjang. egloos.com 미국 Georgia Tech 전산학 박사과정 학생으로 컴퓨터 아키텍처를 연구하고 있다. 현재는 어떻게 하면 병렬성을 더 쉽게 프로그래머에게 제공할 수 있을까라는 문제를 고민하고 있다. 프로세서 시장은 이제 단순히 데스크톱 및 워크스테이션 용뿐만 아니라 그래픽 처리를 담당하는 GPU(Graphic Processing Unit), 그리고 넷북의 등장으로 더욱 뜨거워진 모바 일 분야까지 그 범위가 확장되었다. 올해 출시될 여러 프로세서 들의 기술을 살펴보면 앞으로 약 5년 동안 프로세서 시장이 어떤 방향으로 흘러갈지 충분히 가늠할 수 있다. 지난해도 그러했고 올해 역시 프로세서 시장의 최고 화두는 병렬성의 증대와 에너지 효율이다. 데스크톱 및 워크스테이션 분야 인텔은 2008년 11월 코어(Core) 마이크로아키텍처의 후속인 네할렘(Nehalem)을 출시했다. 인텔은 2007년부터 채용한 틱톡 (Tick-Tock) 전략으로 새로운 프로세서를 시장에 내놓고 있다. 틱(Tick)은 기존의 마이크로아키텍처를 더 미세 공정으로 바꾸 는 것이고, 톡(Tock)은 새로운 마이크로아키텍처를 선보이는 것 이다. 2006년에는 65nm 공정 기반의 전혀 새로운 멀티 코어 아 키텍처인 코어 구조를 출시해 큰 성공을 거두었으며 2007년에 출시한 코어 아키텍처의 45nm 축소판인 펜린(Penryn)으로 여 전히 인기를 얻고 있다. 미세 공정이 도입되면 같은 면적에 더 많 은 트랜지스터를 집적할 수 있고 배선 폭도 줄어들기 때문에, 캐 시 용량과 클럭 속도가 증가하는 효과가 있다. 2008년에는 코어 아키텍처에서 큰 폭으로 진화한 네할렘 구조를 공개했고 제품으 116 m a s o
로는 Core i7 시리즈가 출시됐다. 네할렘 마이크로아키텍처는 네 이티브 쿼드 코어, 새로운 캐시 계층 구조, 메모리 컨트롤러의 내 장, 기존의 FSB(Front Side Bus)를 대신하는 QPI(QuickPath Interconnect)의 도입, 그리고 하이퍼스레딩 부활이라는 상당히 큰 폭의 변화를 이루었다. 2009년은 역시 틱톡 전략에 따라 네할 렘 구조의 축소 버전인 32nm 기반의 웨스트미어(Westmere) 아 키텍처가 등장할 것이다. 인텔의 최대 경쟁자, AMD 역시 쿼드 코어 프로세서로 반격 중이다. AMD는 코드명 K10 마이크로아키텍처와 65nm 공정 기 반의 바르셀로나(Barcelona)를 2007년 9월에 처음 출시했다. x86 지원 프로세서로는 최초로 4개의 코어를 한번에(mono lithic) 실리콘 웨이퍼에 구현했다. 당시 인텔은 두 개의 듀얼 코 어 프로세서를 이어서 만드는 방법(멀티 칩 모듈)으로 쿼드 코어 를 만들고 있어 어떤 것이 진짜 쿼드 코어인가라는 논쟁을 낳기 도 했다. 인텔이 2008년에 구현한 내장 메모리 컨트롤러와 공유 L3 캐시는 K10 마이크로아키텍처에서 이미 구현됐다. 2008년에 는 K10 기반의 페놈(Phenom) 프로세서 군으로 본격적으로 쿼 드 코어를 내놓았다. 그러나 안타깝게도 TLB(Translation Lookaside Buffer)라는 일종의 캐시 장치에서 문제점이 발견되 었다. 비록 이 프로세서의 버그를 실제로는 거의 겪을 일이 없지 만 판매에는 영향을 미칠 수밖에 없었다(CPU의 문제점은 버그 라 하지 않고 erratum으로 표현). 2009년에 AMD는 45nm 공정 으로 개선된 페놈 II 제품군을 출시하며 6 코어가 집적된 이스탄 불(Istanbul)도 나올 예정이다. 이 구조는 폐기되었다. 프로세서 업계 및 컴퓨터 아키텍처를 연 구하는 학계에서도 더 이상 무리하게 클럭 속도를 올리는 것이 매우 어렵다는 점을 깨달았다(불과 10년 전만 하더라도 지금쯤 10GHz 처리 속도의 프로세서가 등장했으리라 쉽게 예측하곤 했다). 클럭 속도를 쉽게 올릴 수 없는 이유에는 여러 가지가 있는데 가장 큰 이유는 발열 및 소비 전력이라는 에너지 장벽이다. AMD나 인텔 데스크톱 프로세서는 모두 비순차 방식이라는 기 술을 이용하여 프로세서를 만들고 있다. 이 기술로 지난 20년 동 안 큰 성능 발전을 이룰 수 있었다. 그러나 이 비순차 방식을 구 현하기 위해서는 스케줄링이라고 불리는 단계가 있는데 이 부분 을 빠른 클럭에서 돌아가도록 만들기가 쉽지 않다. 펜티엄 4는 이 부분을 기존의 방법과 달리 구현하여 클럭을 높일 수 있었지 만 너무 과도한 전력이 낭비되는 문제가 있었다. 프로세서에 집 적되는 트랜지스터의 개수는 계속 증가하고 있다. 그러나 아무리 캐시 양을 늘려도 비순차 실행이 가지고 있는 한계로 싱글 스레 드 성능은 과거처럼 크게 향상되기 힘들다. 하이퍼스레딩 멀티코어프로세서 Core 0 Core 1 Core 2 Core 3 SIMD 클럭 속도에서 병렬성 증대로 과거 프로세서 제품명에는 클럭 속도가 전면에 표시될 정도로 클럭 속도가 곧 프로세서의 성능이었다. 그러나 앞에서 살펴본 인텔과 AMD의 동향을 보면 클럭 속도에 대한 이야기는 거의 없 다. 그보다는 쿼드 코어나 저전력과 같은 문제를 부각시키고 있 다. 그렇다면 왜 프로세서 회사들은 클럭 속도 대신 멀티 코어로 방향을 바꾸었을까? 이것을 이해하면 앞으로 프로세서의 진화 방향을 쉽게 가늠할 수 있다. 과거 프로세서 회사들은 클럭 속도를 올리기 위해 경쟁했다. 최초로 1GHz를 AMD가 구현하자 인텔은 높은 클럭 속도를 위 해 온갖 방법을 동원한 넷버스트(NetBurst) 아키텍처를 만들어 펜티엄 4로 맞섰다. 그러나 단순히 클럭 수치는 펜티엄 4가 높았 으나 정작 실제 성능은 클럭만큼 차이가 나지 않았다. 아주 간략 히 설명하면 명령어 하나당 걸리는 싸이클이 증가하여 클럭이 높 아진 만큼 성능이 따라주지 못했기 때문이다. 결국 높은 클럭만 을 위한 넷버스트 구조는 높은 발열이라는 큰 장벽에 가로막히고 <그림 1> 프로세서에 있는 다양한 병렬성 비순차 실행이 가지는 한계점과 에너지 장벽이라는 이유로 클 럭 속도를 높여 싱글 스레드 성능을 높이는 대신에 멀티 코어로 프로세서는 진화하게 되었다. 병렬성 증대는 멀티 코어화, 정확 한 용어로는 칩 멀티프로세서(Chip Multiprocessor, CMP)가 가장 대표적인 방법이다. 그러나 다른 방향으로도 병렬성을 증가 시킬 수 있다. <그림 1>에서 보듯이 쿼드 코어 프로세서에는 총 4 개의 코어가 있어 4개의 스레드가 동시에 실행된다. 그리고 여기 에 하이퍼스레딩과 같은 동시 멀티스레딩 기술로 8개 이상의 스 레드가 동시에 작동할 수 있다. 그러나 싱글 코어 안에서도 SIMD(Single Instruction Multiple Data)라는 일종의 벡터 연 산 장치로 또 다른 병렬성이 숨어 있다. 단순한 덧셈과 벡터 합을 생각하면 쉽게 이해할 수 있을 것이다. 벡터 합을 구하는 데 있어 각 원소의 합은 동시에 수행할 수 있다. 과거 수퍼 컴퓨터들은 벡 터 연산 기반이었는데 데스크톱 프로세서도 x86 MMX, SSE와 m a s o 117
cover story 2_프로세서 기술 전망 같은 SIMD 명령어를 제공함으로써 벡터 연산을 지원하고 있다. 그래픽카드에 있는 GPU는 이런 SIMD 연산을 극대화시킨 벡터 프로세서라고 보면 된다. 2010년에 출시될 인텔의 차세대 마이 크로아키텍처는 현재 128비트인 SSE 연산폭을 256비트로 확장 하여 새로운 명령어 셋인 AVX(Advanced Vector Extension)를 제공한다. 이렇게 코어 수를 늘리거나 SIMD 연산 폭을 높여 병 렬성을 높이고 있다. 멀티 코어의 장벽: 메모리 성능 클럭 속도는 지금의 기술로는 어느 정도 한계에 근접했다. 그 렇다면 멀티 코어 프로세서는 어떠할까? 쿼드 코어에 이어 헥사 (6개) 혹은 옥타(8개) 코어도 머지않은 시간에 출시될 것이다. 그렇다면 32코어, 64코어도 가능할까? 현재로서는 힘들어 보인 다. 그 이유는 바로 메모리 성능에 있다. 지금 우리가 쓰는 컴퓨터는 폰노이만 구조에 기반한다. 이 컴 퓨터 구조에서는 메모리 성능, 즉 레이턴시와 대역폭이 컴퓨터 전체의 성능을 좌우하는 것이 일반적이다. 과거에는 메모리와 프 로세서의 속도 차이가 그리 크지 않았다. 1998년의 CPU는 200MHz 정도였고 DRAM 메모리 속도도 100MHz 정도였다. 그러나 메모리 속도가 증가하는 것보다 프로세서의 속도가 훨씬 빨리 증가하자 메모리가 주요 병목 지점이 되고 있다. 현재 CPU 는 2~3GHz이지만 DRAM 속도는 DDR2를 기준으로 800MHz 정도가 보통이다. 이 속도 차이를 극복하기 위해 많은 캐시와 정 교한 정책으로 메모리와 프로세서 간의 속도 차이를 줄이고 있 다. 그러나 멀티 코어가 되면서 대역폭이 다시 큰 문제로 대두되 었다. 멀티 코어에서 많은 스레드가 동시에 돌아갈 때, 이들이 동 시에 데이터를 요구하면 메모리 대역폭은 큰 장애가 된다. 이런 요구는 인텔의 네할렘 구조에 잘 반영되었다. AMD는 이 미 이전부터 메모리 컨트롤러를 CPU 칩에 내장하여 메인 메모 리와의 레이턴시를 크게 줄였다. 반면 인텔은 그 공간에 캐시를 더 넣는 방법을 택했다. 그러나 점점 벌어지는 레이턴시를 단순 히 캐시 양으로는 극복하기 힘들어지자 인텔 역시 메모리 컨트롤 러를 칩에 내장했다. 그리고 메모리 대역폭을 늘리기 위해 트리 플 채널이라는 기술도 네할렘 구조에 도입했다. DRAM 모듈 3 개를 동시에 꼽아 최대한으로 병렬성을 높여 대역폭을 높이는 구 조다. 이것으로 대역폭을 70% 이상 증가시켰다. 다시 앞서 제기한 문제로 돌아가 보자. 물론 반도체 집적 기술 이 발전하면 64코어 같은 프로세서를 물리적으로는 만들 수 있 다. 그러나 현재의 메모리 기술로는 이것이 더 좋은 성능으로 연 결되지는 않는다. 이것을 흔히 메모리 장벽(Memory wall)이라 고 부른다. 사실 이 문제는 새롭게 대두한 문제는 아니다. 그러나 멀티 코어 프로세서를 활용하는 프로그램에는 매우 큰 대량의 데 이터를 다루는 것들이 많다. 이런 프로그램들은 64개의 멀티 코 어 프로세서가 있더라도 현재와 같은 메모리 구조 아래에서는 성 능이 오히려 떨어진다는 연구 결과가 있다. 싱글 코어의 성능이 한계에 다다르자 멀티 코어라는 방향으로 꾸준히 프로세서를 발 전시켜왔지만 또 다시 메모리 성능이라는 문제점을 만나게 될 것 이다. 이 문제를 해결하기 위해 메모리를 직접 CPU 코어에 올리 는 3차원 적층법과 같은 여러 방법이 고안 중에 있다. 프로그래머들의 도전: 병렬프로그래밍 앞 단락에서 멀티 코어 프로세서의 발전을 가로막는 이유로 메 모리 장벽을 들었다. 그러나 사실 이것은 컴퓨터 아키텍처의 측 면이고 실제로 멀티 코어의 미래는 소프트웨어 개발자들의 손에 달려 있다. 바로 병렬 프로그래밍이다. C++ 전문가인 마이크로 소프트의 허브 서터는 2006년 2월 C/C++ Users Journal 에 기고한 병행성 혁명 이라는 글에서 이제 공짜 점심은 끝났다고 주장했다. 과거에는 프로세서들의 클럭이 꾸준히 증가했기 때문 에 힘들게 소프트웨어를 최적화하지 않아도 빨라진 프로세서의 혜택을 가만히 앉아서 누릴 수 있었다. 그런데 싱글 코어의 성능 이 더 이상 크게 발전하지 못하고 병렬성 증대라는 방향으로 발 전하자 상황은 달라진다. 대부분의 과거 프로그램들은 싱글 스레 드로 만들어져 있다. 이런 프로그램들은 최신 프로세서에서 성능 향상을 공짜 로 얻기 힘들다. 높은 싱글 스레드의 성능이 특히 요구되는 고사양의 게임은 듀얼 코어에서 쿼드 코어로 업그레이 드했다고 속도가 저절로 높아지는 것은 아니다. 프로그래머들은 자신이 만든 프로그램의 성능을 높이려면 병렬화를 해야만 한다. 이 병렬 프로그래밍은 아직까지도 매우 어려운 문제로 남아 있 다. 싱글 스레드 프로그램은 프로그램 코드를 순차적으로 읽으면 쉽게 그 작동이 상상되지만 병렬 프로그래밍은 그렇지 않다. 인 간의 인지를 보통 뛰어넘는다는 원초적인 어려움이 있다. 일반 프로그래밍에서는 객체 지향 설계와 같은 아주 성공적인 프로그 래밍 모델과 방법론이 존재한다. 그러나 병렬 프로그래밍에서는 이런 방법론이 아직까지 없다. 프로그램의 병목 지점을 알려주는 프로파일러나 디버거 역시 병렬 프로그래밍에 최적화되지 않았 다. 올해뿐만 아니라 2010년에도 프로세서의 병렬성은 클럭 속 도의 증가보다 클 것이다. 그리고 병렬 프로그래밍에 대한 요구 도 지금보다 훨씬 커질 것이다. 프로그래머들도 프로세서의 발전 방향을 눈여겨 볼 필요가 있다. 여전히 중요한 싱글 코어 성능 계속 싱글 스레드의 성능 향상이 어렵다고 이야기했지만 여전 118 m a s o
히 싱글 코어 성능은 매우 중요하다. 인텔의 최신 Core i7의 싱글 스레드 성능은 Core 2 Duo에 비해 크게 나아지지는 않았지만 10~25% 정도의 향상은 일반적으로 기대할 수 있다. 이것은 캐 시 구조와 정책을 개선하고 프리펫처(prefetcher)와 같은 기술이 발전했기 때문이다. 과거처럼은 아니지만 여전히 많은 사람들이 싱글 스레드 성능 향상을 위해 노력하기 때문에 병렬화되지 않은 프로그램이라도 성능이 저절로 높아지는 혜택을 누릴 수는 있다. 여기서 싱글 스레드 성능의 한계를 한번 생각해 보자. 연구 결 과에 따르면 완벽한 캐시나 완벽한 분기 예측이 가능하다면 현 재 싱글 코어의 성능은 3~4배 이상 빨라질 수 있다. 물론 구현 불가능하겠지만 잠재적인 싱글 코어의 향상 가능성은 여전히 많이 있다. 인텔이나 AMD의 프로세서가 채택하고 있는 핵심 기 술은 비순차 실행(Out-of-Order execution)이다. 물론 이 기술 로 지금의 빠른 컴퓨터가 구현되었다. 그러나 동시에 이 비순차 실행은 클럭 속도 증가의 걸림돌이 된다. IBM의 POWER6 프로 세서는 현재 가장 빠른 프로세서 중 하나로 클럭 속도가 2008년 에 5GHz에 달했다. 그런데 이 POWER6의 구조는 이전 세대의 비순차 구조가 아니라 순차 실행(In-order execution) 구조로 바 뀌었다. 과거 486급 프로세서에나 쓰였던 순차 실행 방식을 오히 려 다시 도입한 것이다. 비순차 실행은 처리 가능한 명령어를 최 대한 빨리 실행하여 명령어 완료 레이턴시를 순차 실행에 비해 크게 줄일 수 있다. 반면, 순차 실행을 도입하면 복잡한 비순차 실행 로직을 제거할 수 있어 클럭 속도를 쉽게 올릴 수 있다. POWER6는 이 둘을 서로 맞교환한 것이다. 인텔 아이태니엄 (Itanium) 제품군은 일반 x86 프로세서와는 매우 다른 방식을 취하고 있다. 이 제품 역시 순차 실행 방식이다. 조금 이론적인 이야기를 하자면 싱글 스레드 성능을 높이기 위 해서는 명령어 수준의 병렬성을 찾는 것이 핵심이다. 순차 실행 프로세서는 이것을 찾을 수 없었다. 반면, 비순차 실행 프로세서 는 명령어 수준 병렬성을 직접 실시간으로 찾아 높은 성능을 구 현했다. 그런데 이 병렬성은 컴파일러도 잘 찾아낼 수 있다. 이 일을 소프트웨어가 한다면 하드웨어는 그로 인해 생긴 여유를 클 럭 스피드를 늘리거나 캐시를 늘려 성능을 높일 수 있다. 아이태 니엄과 같은 프로세서가 사용하고 있는 원리인 것이다. 비순차 실행이 한계에 다다르자 이렇게 순차 실행이 다시 새롭게 조명을 받고 있다. 당장에 큰 변화는 없겠지만 5년 뒤에는 지금의 일반 적인 비순차 방식이 바뀔 수 있다. 지금까지는 하드웨어 수준에 서 모든 것을 처리했다면 이제는 컴파일러나 JIT 같은 기술로 소 프트웨어와 협력하여 고성능을 추구하는 방향으로 진화할 수도 있다. 싱글 스레드라 하더라도 결국 속도를 높이는 것은 명령어 수준의 병렬성을 찾는 것이고 이것을 효율적으로 하기 위해 하드 웨어와 소프트웨어 간의 협력이 필요한 것이다. 이런 아이디어는 바로 저전력과도 이어지기 때문에 더 매력적이다. 병렬화 에너지 효율 싱글 코어 성능 SW-HW 협력 병렬 프로그래밍 <그림 2> 미래 컴퓨터 프로세서의 과제 저전력 프로세서 시장 일반 노트북보다 작은 초경량급 넷북은 2008년에 큰 주목을 받았다. 무엇보다 넷북 시장이 활발해진 것은 x86을 지원하는 초 저전력 프로세서의 등장으로 볼 수 있다. 이것은 윈도우XP와 같 은 기존의 데스크톱 운영체제나 응용프로그램을 수정 없이 바로 사용할 수 있음을 뜻한다. 사실 노트북을 위한 프로세서군은 이 미 이전부터 모바일용으로 따로 만들어져 왔다. 이 모바일 제품 들은 보통 데스크톱 프로세서와 근본적인 차이는 없고 저전력 기 술을 추가하는 형식이었다. 그러나 보통 노트북보다 더 작은, 화 면 크기가 7~10인치 정도인 넷북은 기존의 모바일 프로세서조 차 적합하지 않을 정도로 환경의 제약이 크다. 따라서 보통 데스 크톱 프로세서의 80% 정도의 성능을 가지지만 차지하는 면적은 50%, 그리고 사용하는 전력은 20%인 소위 80-50-20 모델의 전 혀 새로운 프로세서가 필요하게 되었다. 인텔은 2008년 아톰(Atom)이라는 초소형 초저전력 x86 프로 세서를 출시했다. 데스크톱에서 쓰이는 덩치 큰 코어에 비해서는 당연히 성능이 낮지만 사용 전력이 싱글 코어일 경우 2~3 와트 에 지나지 않고 프로세서가 차지하는 면적도 크게 줄어 효율을 훨씬 높였다. 아톰 프로세서는 밑바닥에서 새롭게 제작된 프로세 서로 고성능 프로세서가 사용하는 비순차 실행 대신 고전적인 순 차 실행 방식을 채택하여 공간과 전력을 많이 아꼈다. 여기에 하 이퍼스레딩과 각종 신기술을 접목했다. 올해에는 32nm로 제작 된 아톰 프로세서가 등장할 예정이며, DDR2 메모리 컨트롤러와 그래픽 코어도 내장된 후속작 코드명 파인뷰(Pineview)도 준비 중에 있다. 아톰 프로세서와 경쟁하는 초전력 프로세서로는 비아(VIA Technologies)의 나노(Nano) 칩을 들 수 있다. 역시 x86 및 x86-64를 지원하는 나노는 2008년에 출시되어 넷북 시장에서 인 기를 얻고 있다. 비아 칩은 아톰보다는 좀 더 많은 전력을 소비하 고 있다. 이것은 아톰과는 달리 데스크톱에 쓰이는 비순차 실행 을 구현했기 때문이다. 성능은 상당히 우수하지만 약간 높은 전 력 소비가 걸림돌이다. AMD는 2008년에는 이 시장에 참여하지 m a s o 119
cover story 2_프로세서 기술 전망 않았다. 그러나 유콘(Yukon)과 콩고(Congo)라는 코드네임으로 저전력 프로세서를 올해 출시하는 것으로 알려져 있다. 핵심은 에너지 효율 데스크톱 컴퓨터에 장착된 프로세서의 실제 크기는 엄지손가 락만 하다. 그런데 이 프로세서가 사용하는 전력은 60 와트 이상 소비한다(물론 제품마다 클럭마다 큰 차이는 있다). 보통 형광등 하나가 40 와트임을 감안하면 상당히 큰 수치다. 컴퓨터 프로세 서가 사용하는 전력은 CPU 사용률에 따라 달라진다. 부하를 많 이 주면 당연히 전력은 많이 사용되는데 사실 이것은 아주 심각 한 문제는 아니다. 문제는 CPU가 그다지 할 일 없이 대기하고 있을 때 얼마나 전력을 아낄 수 있느냐이다. 서버용 컴퓨터도 모 든 시간에 걸쳐 평균 CPU 점유율을 구한다면 10% 정도라는 이 야기가 있다. 개인용 컴퓨터는 더 낮을 것이다. 따라서 이때 소비 되는 전력량을 줄이는 것은 환경 보호적인 측면에서도 매우 중요 하다. 넷북용 프로세서도 당연히 그러하다. 소비 전력을 줄이기 위해서는 프로세서의 기본 재료인 CMOS 회로부터 최적화가 필요하다. 특히 누수 전력으로 대표되는 정적 전력을 줄여야 한다. 회로 단위에서는 파워 게이팅(power gating) 최적화와 동적 전압 조절 같은 기술이 있다. 더 높은 단 위의 로직 단계에서는 클럭 게이팅(clock gating)이 대표적인 기 술이다. 이런 게이팅 기술은 대기 전력을 줄일 수 있어 매우 중요 하다. 인텔 프로세서의 경우, 펜티엄 모바일 버전부터는 다양한 쉼 상태(idle states)가 지원되기 시작했다. 앞에서 비순차 프로세서의 한계를 이야기하면서 이의 극복 방 안 중 하나로 소프트웨어와의 협력을 들었다. 전력과 공간을 많 이 차지하는 비순차 프로세서 대신 순차 프로세서는 이 점에 있 어 큰 이득이 있다. 그러나 손해 보는 성능을 소프트웨어의 힘으 로 극복하는 것이다. 이런 방법론은 넷북용 초전력 프로세서에도 충분히 응용될 것으로 보인다. 80-50-20이라는 모델을 언급했는 데, 넷북보다 더 작은 휴대폰에 들어가는 프로세서들은 아마 50-10-1이라는 극단적인 모델이 필요할지도 모른다. 중국이 만드는 프로세서 일반 범용 목적의 프로세서는 인텔, AMD, 썬, IBM 같은 미국 회사들의 거의 독점하고 있다. 우리나라는 일부 기업이 임베디드 목적의 프로세서나 설계도를 라이선스하여 제조하고 있지만 일 반 범용 프로세서를 개발할 역량을 가지고 있지는 못하다. 최근 중국은 룽손(Loongson, 영어명 Godson)이라는 MIPS 64 기반 의 프로세서를 개발하고 있다. 현재 대학과 국가가 주도해 상당 한 규모의 인력과 자금이 투자되고 있다고 알려져 있다. 특히 2009년에는 3세대 Godson-3 프로세서를 출시할 예정이다. 이 프로세서는 x86 명령어 구조를 에뮬레이션 형식으로 지원한다. 쿼드 코어 디자인에 SIMD 지원 그리고 DDR2 메모리 컨트롤러 내장 등 상당히 진보된 기술을 구현할 예정이다. 이는 미국 기업 들로서는 긴장하기 충분할 정도로 잠재력을 가지고 있다. 아직까 지 구체적으로 이 프로세서를 접해 성능을 체감할 수는 없었지만 미국이 독주하고 있는 프로세서 시장에서 과연 얼마나 큰 영향을 줄지 2009년에 주목할 필요가 있다. 특히 사용전력이 10W 정도 로 낮고 클럭 속도도 아톰과 비슷해 저전력 프로세서 분야에도 사용될 것으로 보인다. 프로그래밍 가능한 대량의 병렬성: GPU 작년 한해 GPGPU(General Purpose Graphics Processing Unit)의 열풍과 관심은 대단했다. 그래픽카드에 장착된 GPU가 게임이나 동영상 재생에만 쓰이는 것이 아니라 GPGPU라는 이 름으로 진화해 일반 범용 계산 용도로 사용되기 시작했기 때문이 다. 최초의 데스크톱 컴퓨터에는 GPU 같은 장치는 없었다. 그러 다 반복되는 그래픽 연산들을 모아 하드웨어로 특화한 것이 GPU다. 그리고 3차원 그래픽에 대한 요구가 커짐에 따라 nvidia나 ATI(이제는 AMD)의 GPU가 빠른 속도로 발전하기 시작했다. 3차원 이미지 정보를 모니터로 출력하려면 여러 단계 가 필요하다. 초창기의 3차원 가속 GPU들은 이 작업들이 하드 웨어로 단단히 고정되어 있어 프로그래머가 자유롭게 이 로직을 조정할 수 없었다. 아예 GPU 자체가 프로그래머에게 노출되어 있지도 않아 DirectX나 OpenGL을 거쳐야만 했다. 그러나 점점 더 풍부한 그래픽 표현이 요구되자 픽셀 쉐이더와 같은 기능이 추가되기 시작했다. 이런 기능의 핵심은 고정되어 있는 GPU의 기능을 프로그래밍하여 더 세밀하게 조정하는 것에 있다. 이렇게 GPU는 하드웨어로 고정되어 있던 기능들을 점차 프로그래밍이 가능한 형태로 발전시켰고 GPGPU는 이것의 극 단적인 형태이다. 한마디로 GPU를 CPU처럼 사용하는 것이다. nvidia의 CUDA는 GPGPU의 대중화에 큰 공헌을 했다. CUDA는 nvidia 그래픽카드를 위한 범용 목적 GPU 툴킷이다. CUDA 프로그래밍 API를 이용하여 프로그래머는 GPU를 직접 조작해 계산할 수 있다. AMD 역시 조금 늦은 감은 있지만 최근 선보인 ATI Stream 기술로 올해 GPGPU를 적극적으로 홍보할 것이다. 한편 OpenGL처럼 OpenCL(Computing Language)이 라는 표준 규격이 공식적으로 발표되었다. 이는 CPU와 GPU를 이용한 범용 병렬 프로그래밍을 위한 규약이다. GPGPU로 빠른 성능 향상을 얻으려면 GPU에 맞는 병렬 프 로그래밍을 해야만 한다. GPU는 SIMD 연산, 즉 벡터 연산을 120 m a s o
매우 큰 폭으로 확장시킨 것이다. 전통적으로 GPU가 처리하는 일감은 벡터 연산에 적합한 풍부한 병렬성이 내포되어 있다. 아 무런 프로그램이나 GPGPU로 빨라지는 것이 아니다. 적합한 성 격의 일감을 찾아 잘 병렬화하는 것이 핵심이다. 어 기능을 점차 프로그래밍이 가능한 방향으로 발전시켰다면 라 라비는 처음부터 높은 프로그래밍성을 고려해 설계됐다. 무엇보 다 가장 큰 차이는 라라비는 x86 CPU에 기반한다는 점으로, 과 거 순차 방식의 펜티엄 프로세서를 최대 32개까지 묶어 만든다. 그리고 몇몇 그래픽에 특화된 하드웨어를 구현한다. x86 명령어 기존의 CPU와는 아주 다른 GPU 구조 nvidia와 AMD의 GPU는 CPU와 상당히 다른 구조를 지니고 있다. 간략히 정리하면 캐시의 양은 적고 연산 유닛이 매우 많은 형태라고 할 수 있다. 아무리 복잡한 데스크톱 프로세서라 하더 라도 그 안에 실제 계산을 담당하는 연산 장치는 15여개 정도로 매우 적다. 대신 대부분의 공간이 캐시와 같은 장치로 채워져 있 다. 이것은 데스크톱에서 실행되는 프로그램의 성격이 복잡한 분 기문이 많고 실행되었던 데이터나 코드가 다시 반복되는 경향이 크기 때문이다. 반면, GPU가 처리하는 일감은 흔히 스트리밍 (streaming) 형태를 띤다. 대량의 데이터를 많은 반복 없이 처리 하는 형태다. 복잡한 분기문도 적어 단순한 실행 흐름을 가진다. nvidia의 최신 GTX 280 GPU 구조를 아주 간략하게 <그림 3> 에 그려봤다. 가장 밑바닥에는 스트리밍 프로세서(Streaming Processor, SP)라고 불리는 연산 장치가 3개의 산술 논리 연산 장치(ALU)로 구성되어 있다. 이것은 조금 더 특수한 계산을 할 가 지원된다는 것은(SSE와 같은 명령은 지원되지 않음) 그만큼 프로그래밍이 쉽다는 것을 뜻한다. 기존의 병렬 프로그램도 최소 한의 소스 수정으로 라라비에서 작동시킬 수 있다. 이는 nvidia CUDA나 ATI Stream을 사용하려면 큰 폭의 소스 수정이 필요 한 것과 비교되는 점이다. 또한 공유 캐시 모델이 있어 마치 CPU에서 멀티스레드 프로그래밍하듯이 GPGPU를 이용할 수 있을 것으로 기대된다. nvidia나 AMD의 GPU는 공유 캐시 모 델이 없어 명시적인 데이터 교환이 필요하다. 라라비에 추가되는 명령어는 SIMD 형태가 될 것이다. 128비트인 x86 SSE SIMD 와는 달리 라라비는 그 폭이 512비트로 대폭 확장됐다. 각 라라 비 코어는 4개의 스레드를 지원하는 멀티스레딩(하이퍼스레딩과 는 조금 다르다)으로 32코어라면 최대 128개의 스레드를 지원한 다(nVidia GPU에서 이야기하는 스레드는 우리가 흔히 이해하 는 운영체제와 CPU의 스레드와는 다른 개념이므로 혼동해서는 안 된다). 수 있는 SFU(Special Function Unit)와 함께 스트리밍 멀티프 로세서(SM)를 만든다. GTX 280에는 SM이 총 30개, SP가 총 240개나 있다. 아주 많은 수의 연산 장치가 있어 대량의 데이터 를 동시에 처리할 수 있다. CPU Multithreading Multicore Many -core Larrabee GPU 프로그래밍성 (Programmability) CPU 높은 처리률을 가지는 방향으 로발전 GPU 범용 목적 계산 방향으로 발전 완전한 프로그래밍 (Fully Programmable) 부분적인 프로그래밍 (Partially Programmable) 고정된 기능 (Fixed Function) 스트리밍 프로세서(SP) FP 레지스터 파일 Int move cmp 처리율(Throughput Performance) <그림 4> 라라비가 추구하는 방향 GPU 요약하면 라라비는 공유 캐시와 x86 지원으로 CPU처럼 프로 그래밍할 수 있고 또한 512비트 SIMD 명령어와 텍스처 하드웨 <그림 3> nvidia GTX 280 어로 GPU처럼 프로그래밍할 수 있다. 라라비의 실제 성능을 점 치기는 어렵지만 올해 기대되는 기술임은 분명하다. CPU를 닮아가는 GPU: 인텔 라라비 올해 주목되는 GPU 중 하나는 인텔 라라비(Larrabee)이다. 지난 해 논문을 통해 처음으로 공식 발표되었지만 아직 시제품이 나오지는 않았다. 올해 시제품과 라라비를 위한 API도 공개될 것으로 보인다. <그림 4>와 같이 라라비는 기존의 GPU와는 다른 방향으로 접근하고 있다. 기존의 GPU가 고정되어 있는 하드웨 참고자료 1. http://www.spectrum.ieee.org/nov08/6912 2. http://www.gotw.ca/publications/concurrency-ddj.htm 3. Joel Emer et al. Single-Threaded vs. Multithreaded: Where Should We Focus?, IEEE Micro, vol. 27, no. 6, pp. 14-24, November/December, 2007. 4. Seiler, L. et al. 2008. Larrabee: a many-core x86 architecture for visual computing. ACM Trans. Graph. 27, 3 (Aug. 2008), 1-15. m a s o 121