このページの本文へ

前へ 1 2 3 次へ

WWDC 2009 総力レポート 第14回

解体Snow Leopard(後編)

OS Xを加速する「GCD」「OpenCL」という新技術

2009年06月15日 20時00分更新

文● 千種菊里

  • この記事をはてなブックマークに追加
  • 本文印刷

 前編中編に引き続き、Snow Leopardの秘密に迫っていこう。

Snow Leopard

Snow Leopard


ハードの性能を引き出すために

 パソコンの性能は、OSやアプリケーションを64bit対応にしたからといって、劇的に向上するわけではない。性能アップのためには、クロックに代わって増えているCPUコアを上手に使うアプリケーションの並列化が鍵となる。

 しかしプログラムの並列化は非常に難しい。

 プログラムの90%が並列化可能になっても、わずか10%が並列化できていないだけで、100%並列実行可能なプログラムに比べて、コアを増やしたときの性能向上は半分に落ちてしまう(アムダールの法則という。Wikipedia)。

 単にマルチスレッドのサポートがあるだけでは駄目で、より高レベルな並列化支援の枠組みが必要だ。

 そこで、アップルは並列化、高速化のためのふたつの枠組みを提供する。ひとつが「Grand Central Dispatch」(GCD)、そしてもう一つが「OpenCL」だ。

「64bit対応」「GCD」「OpenCL」という3つがSnow Leopardのポイントだ


並列化をOS側で支援する「GCD」

 GCDは開発者への負担を抑えつつ、OS側で並列化を促進するための枠組みを提供するというもの。

GCD

GCDは言語仕様に手を入れるなど、大幅な改善で並列化を促進する一連の仕組みだ。OS XのシステムレベルのAPIでも積極的に使われていることがうたわれている

 これは、ただマルチスレッドに対応したフレームワークを提供するという意味ではない。その程度のことは現在あるMac OS Xの開発環境「Cocoa」でもある程度は実現されているし、かつての「BeOS」ですらアプリケーションフレームワークはマルチスレッド対応であった。

 しかし、単にライブラリやフレームワークがマルチスレッドになってアプリケーションの一部が並列化可能になっても、先のアムダールの法則が指し示すように、それだけでは性能が上がらない。

 だから、GCDではもっと抜本的な対策が取られている。

 GCDではマルチコアを活かした処理を実行するエンジン部分を土台として整えて、オブジェクト志向のフレームワークとしてプログラマに提供する。これは一部の特別なアプリケーション向けという意味ではなく、システム全体のAPIとして用意されている。つまり、GCDはどのアプリケーションでも利用可能だ。

 そして、GCDの利用やGCDを使ったアプリケーションへの移行を支援するようなツールも展開するようだ。


プログラミング言語を拡張する

 いちばんのポイントは、さらに「プログラミング言語に対してGCDを支援するための拡張を施す」と言う点だ。

 これまでの並列化プログラミングは「いくつスレッドを作って」「それをどう動かして」というレベルから細かく開発者が面倒を見なければらなかった。一方で、GCDでは「ここら辺が並列化可能っぽい」「その中でもここは並列化しないで逐次で実行して」と要所を指定していくぐらいの手間で、あとはエンジンが自動的にスレッドを用意して、各コアに処理を分散して実行させるところまでをサポートしてくれるようだ。

 プログラミング言語を拡張した例としては、マイクロソフトの「構造化例外処理」(Structured Exception Handling、SEHと略される)がある。

 これは C/C++ といったプログラミング言語に独自の拡張を施し、システムと協調したエラー処理を明快に記述することができるようになるというもの。言語のレベルから支援したSEHのおかげで、Windows NT、2000、XPなどのWindowsは、それまでのWindows 3.1や95、98に比べてより高い安定性を実現した。

 また、並列化のために言語を拡張した例としては、インテルの推進する「OpenMP」がある。OpenMPがどちらかというと科学技術計算のような高度な計算を分散させるのに対し、GCDは一般プログラミング向け、例えば「Mail」や「Safari」のようなアプリケーションの並列化を支援するような味付けがされているのだろう。

前へ 1 2 3 次へ

カテゴリートップへ

この連載の記事

ASCII.jp RSS2.0 配信中