»
S
I
D
E
B
A
R
«
Grand Central Dispatch ported on FreeBSD
Oct 14th, 2009 by Wegra Lee

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:

  • Added new kqueue primitives required to support GCD, such as EVFILT_USER and EV_TRIGGER
  • Created autoconf and automake build framework for libdispatch
  • Modified libdispatch to use POSIX semaphores instead of Mach semaphores
  • Adapted libdispatch to use portable POSIX time routines

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.

Open tasks:

  1. Complete porting of libdispatch test suite to FreeBSD.
  2. Investigate pthread work queue implementation for FreeBSD.
  3. Evaluate performance impact of some machine-dependent and OS-dependent optimizations present in the Mac OS X version of libdispatch to decide if they should be done for other platforms and OS’s.
  4. Explore whether FreeBSD base operating system tools would benefit from being modified to use libdispatch.
Grand Central Dispatch.. Now Opened for All.
Sep 16th, 2009 by Wegra Lee

Apple 이 Snow Leopard 출시와 함께 가장 최근에 들고나온 강력한 무기중 하나인 Grand Central Dispatch (GCD) 를 오픈소스화하는 다소 놀라운 결정을 내렸다. (Click Here)

아마도 GCD 가 비표준 C 확장(Block – Click Here)을 요구하는 등, 이를 활용한 코드가 플랫폼 종속적이어서 저변 확대의 걸림돌이 될 것이라 판단한 것이 아닌가 싶다.

인터넷 상으로도 이렇게 바로 볼 수 있고 (Click Here), SVN 이나 Git 으로도 물론 다운 받아 볼 수 있다. 간략히 살펴보고 있는데, inline assembly 가 나오는 등 역시 low-level 기능이라 만만치 않다. 커널 수준의 코드를 자주 접해본 사람이 아니라면 만만치 않을 수 있겠다. 적어도 GCD 의 동작 메커니즘 등 기반 지식이 쌓고 코딩을 좀 해본 후 도전하는 것이 좋을 듯..

Grand Central Dispatch
Sep 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