클럭 속도의 한계: 에너지 장벽너무나 잘 아는 무어의 법칙에 따라 프로세서 칩에 집적될 수 있는 트랜지스터의 개수는 해마다 크게 증가해왔다. 불과 5년 전까지만 하더라도 수 십 년간 지켜져온 이 무어의 법칙은 클럭 속도를 계속 높여 싱글 코어의 성능 역시 트랜지스터 개수에 비례하여 증가시켜왔다. ![]() 위 그래프는 프로세서의 트랜지스터 수와 클럭 속도를 보여준 것이다. 세로 축이 로그 스케일임을 주목하면 말 그대로 기하급수적으로 트랜지스터 수는 증가하였다. 그리고 파란 점들과 파란 선들을 보면 클럭 속도 역시 트랜지스터와 같이 발전하였다. 그러나 2003년 이후를 주목 해보자. 트랜지스터 수는 올라갔지만 더 이상 클럭 속도는 오르지 못하고 정체되어 있다. 5년 전에도 프로세서들은 클럭 속도가 2~3GHz였고 지금도 그러하다 (예를 들어, 2003년 6월에 나온 펜티엄 4는 2.4GHz 였고 지금 많이 팔리는 Core 2 Duo 제품 역시 2.66GHz). 물론 명령어 당 사이클(IPC)이 크게 개선되어 싱글 코어 성능 향상도 비약적으로 있었지만 적어도 클럭 속도는 정체되어 있다. 이런 이유는 여러가지로 설명할 수 있지만 무엇보다 에너지 장벽(Energy wall)이 가장 큰 이유였다. 2004~2005년에 나왔던 인텔의 프레스캇 코어는 클럭 스피드는 3기가를 훌쩍 넘었지만 엄청난 발열로 매우 악명이 높았다. 그건 펜티엄 4의 구조인 넷버스트 아키텍처가 오직 클럭 스피드만을 고려했기 때문이었다. 그 설계자들도 이렇게 심각한 발열과 소비전력의 문제가 있을 줄 몰랐다. 1997년에 출판된 SGI 수퍼 컴퓨팅 관련 논문을 보면 발열에 대한 언급이 아예 없다. 그러나 어떠한가? 이제 수퍼 컴퓨터를 돌리려면 그 만한 크기의 에어컨이 필요하다. 이렇게 클럭 속도를 올리는 것이 에너지 효율이라는 측면에서 엄청난 삽질임을 깨닫고, 프로세서 업체들은 멀티코어라는 방향으로 눈을 돌렸다.
멀티코어의 한계: 메모리 장벽2006년에 대중적인 듀얼 코어 프로세서가 등장 이후 이제는 쿼드 코어 프로세서 역시 일반적이다. 비록 하이퍼스레딩이긴 하지만 Core i7은 8 스레드를 동시에 지원한다. 마치 프로세서 세대가 진보함에 따라 클럭 속도가 뛰었던 것 처럼 코어의 개수가 지금 그러하다. GPU 역시 그 안에 있는 수 많은 멀티프로세서의 개수가 증가하고 있다. nVidia 지포스 제품군들은 100여개의 멀티프로세서가 이제 200개를 넘고 있다. 그럼 이런 멀티코어는 클럭 속도가 그러했듯이 어떠한 벽에 부딫혀 한계에 다다를까? 물론 인텔이 연구용으로 발표현 80 코어 프로세서 같은 것이 있기는 하지만 이런 것들은 하나의 코어를 이루는 프로세서들이 극히 단순한 형태이다. 그러나 지금 데스크탑 용 프로세서와 같은 복잡하고 덩치큰 코어를 8개, 16개, 32개 더 넘어 64개, 128개까지 한 칩에 집적할 수 있을까? 물리적으로는 가능할지 몰라도 과연 그것이 더 높은 성능으로 이어질까? 당연한 이야기이겠지만 그렇지 않다. 그 이유는 메모리 성능에 있다. 컴퓨터 좀 조립해보신 분은 ‘듀얼 채널’이라는 용어에 익숙할 것이다. DRAM 메모리를 컴퓨터 메인보드에 꼽을 때, 쌍으로 꼽아야 높은 성능이 나온다는 이야기다. 대역 폭을 늘리기 위해 두 개씩 쌍으로 접근하는 것이다. 인텔의 새 프로세서 Core i7은 메모리 컨트롤러를 AMD 처럼 내장하였다. 이건 메모리 성능 중 레이턴시를 줄이지 대역폭을 동시에 개선하지는 못한다. 대신 Core i7은 ‘트리플 채널’이라는 걸 도입하여 대역폭을 증가시켰다. Core i7의 메모리 대역폭을 제대로 사용하기 위해서는 이제 메모리 3개를 쌍으로 해서 꼽아야 한다. ![]() 왜 인텔은 Core i7에서 메모리 시스템을 이렇게 크게 바꾸었을까? 쉽게 예측할 수 듯이 멀티코어, 매니코어 환경에서는 메모리 대역폭이 아주 중요하기 때문이다. 8개의 스레드에서 바쁘게 돌아가는 프로그램들이 모두 제각각 데이터를 읽고 쓴다고 생각해보자. 순식간에 메모리 대역폭이 병목 지점이 될 것이다. 참고 자료에 따르면 Core 2 Quad 시스템에서 듀얼 채널 DDR3의 대역폭은 데이터 카피 시 6.9GB/s (기가바이트)으로 생각해보면 매우 크다. 그러나 대량의 데이터를 쓰는 프로그램들이 쿼드 코어에서 돌아간다면 이 숫자는 결코 큰 숫자가 아니다. 특히 계산을 하려면 대량의 데이터 이동이 필요한 인포매틱스 분야 프로그램들은 더욱 그러하다. 실제로 프로파일링을 해봐도 메모리 대역폭의 부족은 여실히 드러난다. ![]() Core i7에서는 트리플 채널의 도입으로 같은 경우 초당 12GB를 읽고 쓸 수 있다. 무려 70%의 대역폭 향상이다. 그 만큼 코어 수가 늘어남에 따라 메모리 대역폭이 고성능 프로그램에서는 심각한 병목 지점이 될 수 있기 때문에 이렇게 메모리 대역폭에 신경을 쓴 것이다. ![]() 이 그래프는 현재의 구조에서 언급한 인포매틱스와 같은 프로그램들은 8개 코어 이상이 전혀 무용지물임을 보여주고 있다. 바로 원인은 메모리 대역폭에 있다. 붉은 색 실선이 잘 보여주고 있다. 당연히 많은 컴퓨터 공학 연구자들이 이 문제를 모를리 없다. 대안 중 하나로 3D-stacking 기술이라는 것이 있다. 말 그대로 칩을 고층 건물 올리듯이 쌓는 것이다. 아직까지는 연구 수준에 머물러 있지만 가까운 미래에 구현되리라 믿는다. 만약 이런 기술로 프로세서 코어 위에 바로 DRAM을 올린다면? 위 그래프의 노란색이 이런 경우의 성능을 예측하고 있다. ![]() 위 그림은 가장 최근에 발표된 멀티코어를 위한 3D-stacked 메모리 구조라는 논문 중 발췌한 그림이다. 2차원으로 칩이 확장되는 것이 아니라 수직으로 쌓는다. 물론 발열이나 여러 가지 문제를 고려해야 한다.
멀티코어의 미래멀티코어 아키텍처가 성공하기 위해서는 메모리 대역폭이라는 문제가 이제 새롭게 ‘추가’되었다. 사실 메모리 장벽은 전혀 새로운 사실이 아니다. CPU와 메모리 속도의 차이는 계속 벌어져서 싱글 코어에서도 메모리 성능은 주요 병목 지점이었다. 그래서 많은 양의 캐시와 프리펫처가 사용되었다. 당연하지만 멀티코어의 승패를 결정 짓는 가장 중요한 요소는 병렬 프로그래밍에 있다. 에너지 장벽에 가로 막히자 멀티코어라는 방향으로 계속 프로세서는 계속 발전하고 있다. 얼마나 효율적이고 버그 없이 병렬 프로그래밍을 하느냐, 또 얼마나 메모리 대역폭이 받쳐주느냐가 멀티코어의 미래를 결정할 것이다. 참고자료: Inside the Machine의 저자 Jon Stokes씨가 며칠 전에 쓴 글:
최근 등록된 덧글
개발자 입장에서의 수많은 ..
by Jiyoon at 02/04 저도 아들 돌잔치때 돌잡이 .. by 박상욱 at 01/18 미국 대학원 원서 작성중에 p.. by 태클사이야 at 01/13 TO: 박PD 로그인 하지 않아.. by 박응용 at 01/10 http://gigglehd.com/zbx.. by dhunter at 12/28 우와.. 좋네요. 태반이 .. by 윤광배 at 12/17 항상 좋은 글 잘 보고 있습니.. by y2k at 11/23 글이 좋아서 제 블로그에 담.. by 쏭섭 at 11/23 최근 등록된 트랙백
메뉴릿
이글루 파인더
|