»
S
I
D
E
B
A
R
«
Grand Central Dispatch
September 8th, 2009 by Wegra Lee

평소 기술 동향에 관심이 많아 Parallel Programming 을 빨리 익혀둬야겠다 생각한 지는 벌써 1년도 훨씬 지난 것 같은데, 마땅한 기회를 잡지 못해서 자료만 모으고 있었다. 그러다 마침 Snow Leopard 에서 Grand Central Dispatch (이하 GCD)라는 멋진 기술을 제공한 것을 계기로 몇 일 동안 이러저런 자료들을 살펴보았다. 처음엔 기본적인 개념 정리까지 해볼까 하였으나, 현재로썬 단순 번역 정도에서 그칠 듯 싶어 마음을 바꿔먹었다. 오늘은 운을 띄우는 정도에서 몇 자 적어보고.. 더 깊이 있는 지식과 경험을 쌓으면 보다 전문적인 글을 적어보겠다.

CPU 가 클럭 경쟁에서 멀티코어 형태로 그 진화 방향이 변화하였고, GPU 의 성능이 CPU 를 능가하기 시작하면서, 그 막강한 프로세싱 파워를 그래픽 외적인 목적으로도 활용코자 하는 노력도 몇 년 전부터 꾸준히 진행되어 왔다. 멀티 코어 CPU 와 GPU 의 공통적인 특징은  바로 복수의 프로세싱 엔진(코어)를 갖음으로써 여러 개의 서로 다른 연산을 병렬로 처리할 수 있다는 점이다. Parallel Programming 은 이런 다중 코어 환경에서 코어들을 최대한으로 활용하여 프로그램의 성능을 향상시키고자 하는 프로그래밍 기법을 일컷는다.

서버 분야에서는 멀티 코어 이전부터 멀티 프로세서 환경이 일반화 되어 있기 때문에 Parallel Programming 의 역사는 상당히 깊다. 자연히 GCD 는 갑자기 혜성처럼 나타난 별천지 기술은 아니다. 그리고 기존 상식을 뛰어넘는 혁신적인 아이디어도 보이진 않는다. 다만 서버 분야에서부터 적어도 십수년간 쌓아온 노하우를 애플 식으로 OS X 플랫폼에 멋지게 녹여낸 것이다. 그럼 애플 외의 다른 경쟁 데스크탑 플랫폼에서의 상황은 어떠할까?

.NET 은 곧 등장할 Windows 7 부터 4.0 으로 버전업되며, .NET 4.0 의 큰 특징 중 하나로 Task Parallel Library (TPL) 탑재가 있다. MS 도 바보가 아닌 이상 병렬화라는 시대 흐름을 놓칠 리 없고, 애플과 비슷한 시기에 비슷한 문제를 해결하려는 나름의 솔루션을 내놓는 것이다. Java 역시 곧 등장할 JDK 7 에 Fork/Join Framework 을 포함한 JSR166y 를 추가하여 병렬 환경 지원을 강화하고 있다.

이렇듯 Parallel Programming은 이제 거스를 수 없는 시대의 흐름이고, 어플리케이션이 이를 얼마나 잘 활용하느냐에 따라 수십배의 성능 차이를 보이는 날이 곧 도래할 것이다.

다시 애플의 GCD 로 돌아가보자. 내가 아직 전문 지식이 부족한 관계로 정확한 평가는 불가능하지만, 현재의 얕은 지식만을 바탕으로 봤을 때 GCD 의 큰 장점은 아래 정도이다.

  1. 병렬 실행 환경을 OS 자체에 매끄럽게 녹여내어 이론적으로 가장 높은 효율성을 보장할 수 있다. GCD 런타임이 시스템 서비스와 어플리케이션 전체 상황을 종합 고려하여 최상의 성능을 발휘할 수 있도록 스케줄링한다.
  2. OS X 의 주 개발 언어인 C/C++/Objective-C 모두에서 사용 가능하다. 즉, native 어플리케이션도 몇 라인 수정하는 것으로 멀티 코어의 장점을 십분 활용할 수 있다.

이 글은 관련 자료 중 쓸만한 링크들을 남겨놓는 것으로 마무리 하겠다. 나중에 직접 작성해볼 기회가 생기면 코드 수준에서의 간단한 설명과 성능 테스트 결과 정도를 포스팅할 생각이다.


»  Substance: WordPress   »  Style: Ahren Ahimsa