Grand Central Dispatch 가 벌써 타 OS 에 포팅되었다. 대상은, OS X 와 가장 가까운 친척인 FreeBSD. FreeBSD 는 CLang 도입에도 적극적이고.. 여러모로 Apple 과 친한 사이로 보인다.
하지만 마이너 OS 인 FreeBSD 보다는, 리눅스 진영이 이를 받아들이느냐가 훨씬 큰 관심사다. OS X 이 데스크탑/서버 분야에서는 그리 대중적이지 못하고, iPhone/iPod touch를 필두로 세를 확장 중인 모바일 시장은 GCD 의 잇점을 제대로 살리기에는 아직 몇 년이 더 필요하다. 뿐만 아니라, 최근 Gartner 의 전망치에서도 보듯, 모바일에서도 iPhone 은 몇 년 내에 Linux 기반인 Android 에 점유율 역전을 당할 가능성이 높다.
아래는 FreeBSD 의 분기 진행상황 리포트에서 발췌해온 내용이다. 내용에서도 나와있지만 배포본에서는 당장은 볼 수 없고.. 8.1 버전 정도가 나오면 접해볼 수 있을 듯 하다.
Grand Central Dispatch – FreeBSD port
URL: http://libdispatch.macosforge.org/
Contact: Robert Watson <rwatson@FreeBSD.org> Contact: Stacey Son <sson@FreeBSD.org> Contact: libdispatch mailing list <libdispatch-dev@lists.macosforge.org>
We have ported libdispatch, Apple’s Grand Central Dispatch event and concurrency framework to FreeBSD:
Jordan Hubbard has also prepared a blocks-aware clang compiler package for FreeBSD. When compiled with clang, libdispatch provides blocks-based, as well as function-based callbacks.
The port was presented at the FreeBSD Developer Summit in Cambridge, UK in September, and slides are online on the devsummit wiki page. A FreeBSD port is now available in the Ports Collection. After FreeBSD 8.0-RELEASE has shipped, the new kqueue primitives will be MFC’d so that libdispatch works out of the box on FreeBSD 8.1-RELEASE.
Apple 이 Snow Leopard 출시와 함께 가장 최근에 들고나온 강력한 무기중 하나인 Grand Central Dispatch (GCD) 를 오픈소스화하는 다소 놀라운 결정을 내렸다. (Click Here)
아마도 GCD 가 비표준 C 확장(Block – Click Here)을 요구하는 등, 이를 활용한 코드가 플랫폼 종속적이어서 저변 확대의 걸림돌이 될 것이라 판단한 것이 아닌가 싶다.
인터넷 상으로도 이렇게 바로 볼 수 있고 (Click Here), SVN 이나 Git 으로도 물론 다운 받아 볼 수 있다. 간략히 살펴보고 있는데, inline assembly 가 나오는 등 역시 low-level 기능이라 만만치 않다. 커널 수준의 코드를 자주 접해본 사람이 아니라면 만만치 않을 수 있겠다. 적어도 GCD 의 동작 메커니즘 등 기반 지식이 쌓고 코딩을 좀 해본 후 도전하는 것이 좋을 듯..
RTC 2.0 은 Eclipse 3.5 와 거의 같은 시기에 출시되었는데, 아쉽게도 이전 버전인 Eclipse 3.4 버전을 기반으로 하고 있다. 또한 OS X 는 레퍼런스 플랫폼이 아니라 공식적인 지원이 없는 상태이다.
하지만 Linux/Solaris 등 Unix 계열 플랫폼을 이미 지원하고 있고, 다행히도 Eclipse 3.5 와 3.4 의 호환 수준도 높아 몇 가지 간단한 수정만으로 둘 모두와 연동시킬 수 있다.
두 개의 레퍼런스가 있는데, 서로 커버하는 영역이 조금 달라서 모두 소개한다.
크게 보면 위의 것이 둘 모두를 다르고 있지만, repotools 동작 문제에 대해 다루지 않고 있다. 나도 처음에 위의 아티클을 따라 설치 후 사용하고 있었으나, 방금 repotools 수행에서 막혀 정보를 찾아보던 중 두 번째 자료를 발견했다.
평소 기술 동향에 관심이 많아 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 의 큰 장점은 아래 정도이다.
이 글은 관련 자료 중 쓸만한 링크들을 남겨놓는 것으로 마무리 하겠다. 나중에 직접 작성해볼 기회가 생기면 코드 수준에서의 간단한 설명과 성능 테스트 결과 정도를 포스팅할 생각이다.
지난달 말 공개된 Snow Leopard 에 대한 심층 분석 글이다. 일부는 AppleInsider 의 글들을 통해 이미 알고 있었지만, 잘 모르던 멋진 기술들도 알기 쉽게 설명해주고 있고, 무엇보다 하나의 아티클에 모여 있다는 점에서 마음에 든다.
여기서 다루는 주요 기술들은 하나같이 Apple 의 철학을 보여주는 듯 하다. 플랫폼을 만드는 사람들이라면 꼭 본받아야 하는 장인 정신이 아닐런지.. 우리 조직은 아키텍트 라는 타이틀을 달고도 노가다성 일을 하고 있고, 빠른 출시만을 위해 너무도 비효율적인 레거시 설계를 뜯어 고칠 엄두를 못내고 있으니.. 참으로 안타깝다.
위 아티클에 기반해 Snow Leopard 에서 선보인 기술들을 아주 간략히 정리해본 이렇다.
이 외에는 주로 사용자 관점의 리뷰들이라 이 정도에서 마무리를..