»
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 의 동작 메커니즘 등 기반 지식이 쌓고 코딩을 좀 해본 후 도전하는 것이 좋을 듯..

RTC/Jazz on Eclipse 3.5 / OS X
Sep 16th, 2009 by Wegra Lee

RTC 2.0 은 Eclipse 3.5 와 거의 같은 시기에 출시되었는데, 아쉽게도 이전 버전인 Eclipse 3.4 버전을 기반으로 하고 있다. 또한 OS X 는 레퍼런스 플랫폼이 아니라 공식적인 지원이 없는 상태이다.

하지만 Linux/Solaris 등 Unix 계열 플랫폼을 이미 지원하고 있고, 다행히도 Eclipse 3.5 와 3.4 의 호환 수준도 높아 몇 가지 간단한 수정만으로 둘 모두와 연동시킬 수 있다.

두 개의 레퍼런스가 있는데, 서로 커버하는 영역이 조금 달라서 모두 소개한다.

  • Running Rational Team Concert (Jazz) on Eclipse 3.5 / Mac OS X (Click Here)
  • Running Rational Team Concert on Mac OS X (Click Here)

크게 보면 위의 것이 둘 모두를 다르고 있지만, repotools 동작 문제에 대해 다루지 않고 있다. 나도 처음에 위의 아티클을 따라 설치 후 사용하고 있었으나, 방금 repotools 수행에서 막혀 정보를 찾아보던 중 두 번째 자료를 발견했다.

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 어플리케이션도 몇 라인 수정하는 것으로 멀티 코어의 장점을 십분 활용할 수 있다.

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

OS X Snow Leopard (in-depth review)
Sep 4th, 2009 by Wegra Lee

Mac OS X 10.6 Snow Leopard: the Ars Technica review (Click Here)

지난달 말 공개된 Snow Leopard 에 대한 심층 분석 글이다. 일부는 AppleInsider 의 글들을 통해 이미 알고 있었지만, 잘 모르던 멋진 기술들도 알기 쉽게 설명해주고 있고, 무엇보다 하나의 아티클에 모여 있다는 점에서 마음에 든다.

여기서 다루는 주요 기술들은 하나같이 Apple 의 철학을 보여주는 듯 하다. 플랫폼을 만드는 사람들이라면 꼭 본받아야 하는 장인 정신이 아닐런지.. 우리 조직은 아키텍트 라는 타이틀을 달고도 노가다성 일을 하고 있고, 빠른 출시만을 위해 너무도 비효율적인 레거시 설계를 뜯어 고칠 엄두를 못내고 있으니.. 참으로 안타깝다.

위 아티클에 기반해 Snow Leopard 에서 선보인 기술들을 아주 간략히 정리해본 이렇다.

  • 데이터 압축 기술: Snow Leopard 를 설치하면 기존 Leopard 볼륨에서 무려 6GB 정도의 추가 용량이 확보된다. PowerPC 아키텍처 지원을 중지한 것도 있지만, 실행파일/데이터 등을 압축해 저장하는 기술 때문이다. 압축하고 푸는 오버헤드보다 큰 용량의 데이터를 디스크로 읽어오는 latency 가 훨씬 크기 때문에 속도 면에서도 훨씬 이득이다.
  • 64비트 커널: OS X 는 기존부터 64 비트 운영체제였지만 완벽하지 않았다. 이제 가장 밑바닥의 커널/드라이버부터 어플리케이션들까지 명실상부한 64 비트 운영체제로 거듭나게 되었다.
    OS X 의 재미난 특성 중 32비트 커널에서 64비트 어플리케이션을 돌리고, 64비트 커널에서 역시 32 비트 어플리케이션을 자유롭게 돌릴 수 있다는 것이다. 32비트 XP 에서 64비트  어플을 못돌리고, 64비트 XP 에서 32비트 호환 모드로 어플을 돌리는 MS 계열과는 다른 모습이다.
  • QuickTime X: QuickTime 의 기반 코드가 무려 18년 전에 만들어졌다고 한다. 이번에 이 기술을 완전히 교채할 목적으로 훨씬 효율적인 QuickTime X 를 발표했는데.. 아직 기존 QuickTime 대비 지원되지 않는 기능이 많다. 위 기사를 읽어보면 레거시에서 신기술로 전환하는 과정에서 애플이 선택한 정말 멋진 아키텍처적 전략을 엿볼 수 있다.
  • File system API 통합: 파일시스템은 역사가 아주 깊으니만큼 시대에 따라 그 표현 양식도 아주 다양하게 변화해왔다. Plain path string 부터 전용 데이터 타입(FSRef), URL 등.. API 마다 받아들이는 인자가 달라져 수많은 변환 과정을 동반한다. 이번에 URL 기반의 통합 API 를 재정비하였다. 중요한 것은 단지 입력 타입을 URL 이란 것이 아니란 거다. 캐싱가 매타데이터 프리패칭 등으로 성능을 향상시켰고, Bookmark 기능 등등.. 전통적인 시스템에서 할 수 없는 다양하고 유용한 기능들을 제공한다.
  • LLVM and Clang: 애플이 GCC 를 대체하기 위해 전략적으로 투자중인 야심작이다. GCC 보다 3배 빠른 컴파일 속도, 5~25% 빠른 실행 파일.. 거기에 더해 훨씬 정확한 에러 리포팅, 자유로운 라이선스 정책 등등 장점은 이루 말할 수 없다. 아직은 C++을 완벽 지원하지 않는 등 한계가 있지만, XCode의 recommended tool chain 으로 성장했을 정도로 많은 발전을 이루었다.
  • Blocks (C extension) – C 언어를 확장하여 Block 이라는 개념을 도입히다. Function pointer 의 runtime 버전이라고 볼 수도 있는데, 그 동안 dynamic programming language 의 전유물이었던 anonymous function 기능을 C/C++/Objective-C 에서 활용 가능하다. 이 장점은 뒤에 나올 GCD 등 애플의 새 API 곳곳에서 십분 활용하고 있다.
  • Grand Central Dispatch (GCD): 6월 애플 이벤트 때 설명해준 정도로는 ‘저게 뭘까? OS 최적화를 열심히 했나보네’ 정도로 생각했었는데.. 이건 완전히 mind blowing 기술이다. 여타의 훌륭한 기술들 중에서도 단연 으뜸이라 생각한다. 간단히 얘기하면 플랫폼의 밑단을 신경쓰지 않고 멀티 코어/GPGPU 등 환경에 최적화된 코드를 만들어준다. 시퀀셜하게 작성된 레거시 코드도 한 두 라인 수정해서 금새 멀티 코어를 십분 활용하는 코드로 변화시킬 수 있다. 위 아티클에는 동작 메커니즘 동영상과 코드 예제까지 나와 있으니 꼭 읽어보도록 하자. 이 부분은 너무 감동적이라 따로 정리를 해볼까 하는 마음도 굴뚝같다. Parallel Programming 을 공부해보려고 틈틈히 자료를 모으고 있는데.. 그냥 OS X 로 넘어가는 것만으로도 머리 아픈 복잡한 문제들의 대부분이 해결되버린다.
  • OpenCL: 비교적 잘 알려진 기술이 아닐까한다. OpenGL-like C API 로 보통의 그래픽이 아닌 일반 어플리케이션에서 막강한 GPU 의 성능을 활용할 수 있는 기술이다. nVidia의 CUDA 등 다른 GPGPU 기술과 달리, 한 번 컴파일한 바이너리로 GPU 뿐 아니라 멀티코어 CPU 나 전용 가속 칩에서도 동작할 수 있으니, 어플리케이션 개발자 입장에서는 사용하지 않을 이유가 없다. Snow Leopard 의 경우, 어떤 H/W 로 가속할 지, 몇 개의 thread 를 만들 지 등을 앞서 설명한 GCD 를 통해 알아서 결정해준다.

이 외에는 주로 사용자 관점의 리뷰들이라 이 정도에서 마무리를..

»  Substance: WordPress   »  Style: Ahren Ahimsa