元麻布春男の週刊PCホットライン

並列化を進めるIntel製開発ツールのメリットとデメリット



●高クロックから並列化への変化
カンファレンスのキーノートスピーカーとして来日した、同社ソフトウェア開発製品担当のチーフ・エバンジェリスト兼ディレクターであるJames Reinders氏

 インテル株式会社は10月2日、都内のホテルで「Intel・ソフトウェア・カンファレンス」を開催した。

 「パラレリズムへの突破口」をテーマに掲げたこのイベントは、国内のソフトウェア開発者300名を対象に、並列化プログラミングのトレンド、Intelの開発ツールのロードマップ、これを用いた並列化プログラミング手法の紹介を行なうもの。米Intel本社も主催に名前を連ねており、先日サンフランシスコで開催されたIDFでもセッションを担当したソフトウェア開発製品担当のチーフ・エバンジェリスト兼ディレクターであるJames Reinders氏がキーノートスピーチを行なった。

 世界最大の半導体会社として知られるIntelだが、5,000人以上のソフトウェアエンジニアを抱える、一大ソフトウェア会社でもあるのは良く知られるところだ。中でもコンパイラ等の開発ツールは、同社製プロセッサに最適化されたバイナリを作成するためのツールとして、欠かせないものになっている。

 しかし、こうしたツールが一般的なアプリケーション、特にWindows上のアプリケーション開発に高い頻度で使われているかというと、どうやらそうでもないらしい。Microsoft製の開発ツールであるVisual Studioのアドオンとして動作するIntel製の開発ツールを利用するには、当然のことながらまずVisual Studioを購入し、その上でIntel製の開発ツールを導入する必要がある。新しい開発ツールを利用するには、習熟の時間も必要になる。

 一般的なWindowsアプリケーションの開発においては、バイナリの実行速度を改善するために、開発ツールにそこまでのコスト(お金だけでなく時間も)をかける必要性が感じられなかった、というのが今までの経緯ではなかったかと思う。何しろ、PCの性能はムーアの法則に従って、放っておいても1年半で2倍になったのである。

 ところが、半導体の製造プロセスが90nmに達したあたりから、消費電力の問題により、これまでの単純なクロックの引き上げによる性能向上が難しくなってきた。Intelに限らずプロセッサメーカーは、性能向上の手段をクロックの引き上げに頼るのではなく、マルチコア/メニーコア化へと大きく舵を切ることとした。放っておいてもアプリケーションの実行性能が上がる時代は終焉を迎えたのである。性能を向上させるには、マルチコア/メニーコアのアーキテクチャの恩恵を受けられるよう、アプリケーションが複数スレッドで実行可能なよう改める必要がある。

 もちろんIntelは、こうしたマルチコア/メニーコア時代を踏まえて、開発ツールを提供してきたわけだが、なかなか普及は進んでいない。その理由の1つは、一般的なアプリケーションの多くが、必ずしも性能に不足を感じていなかったり、プロセッサの性能がアプリケーション実行時のボトルネックではないと考えられていたからだろう。逆に実行時の性能が何より重視されるHPC向けアプリケーションでは、Intelのコンパイラをはじめとする開発ツールは、極めてポピュラーだという。

●並列化対応で一歩先を行くIntel製ツール

 また、アプリケーションのマルチコア/メニーコアへの最適化が進まなかった理由の1つは、その作業が難しかったからだ。

 1つのアプリケーションを複数のスレッドに分割して実行することは、その作業が単純に難しいだけでなく、複数のスレッドから同一のデータをアクセスする際のロックの問題、スレッドが互いに参照しあうなどして生じるデッドロックの回避、スレッド間の同期、あるいはメモリリークの発生など、解決しなければならない問題が少なくない。性能改善に、こうした障壁を乗り越えるだけのインセンティブ(利点)が感じられない種類のアプリケーションでは、マルチコア/メニーコアへの対応が後回しになるのも無理からぬところだ。

 NehalemマイクロアーキテクチャにTurbo Boostテクノロジーを導入したことでも分かるように、Intelもクロックの引き上げを完全に諦めたわけではない。が、今後性能向上の主役になるのがメニーコア化の方向であることは、現時点で疑う余地はない。たとえ今アプリケーションの性能に不満がないとしても、将来リリースされるメニーコアプロセッサによって、対応した競合製品の実行性能が向上すれば、ユーザーは乗り替えてしまうかもしれない。アプリケーションの性能が高くて文句を言うユーザーなどまずいない。

 こうした一般向けのアプリケーションのマルチコア/メニーコア対応を進めるため、Intelがリリースしたのが「IntelParallel Studio」だ。従来の開発ツール(コンパイラ、VTuneアナライザー、スレッディングツール、ライブラリ類)は、並列化によるパフォーマンスを最大限に引き出すことに力点が置かれており、並列処理に関するノウハウをプログラマに要求した。いわばHPC向けのツールだったのに対し、IntelParallel Studioは、Windowsというプラットフォームに特化して、並列化による生産性の向上を目指した開発ツールとなっている。

 IntelParallel Studioに含まれるツールは、「IntelParallel Composer」、「IntelParrallel Inspector」、「IntelParallel Amplifier」の3本。価格はいずれも56,700円だが、3本まとめた「IntelParallel Studio」として購入すると2本分以下の104,700円で購入できる(学生向けにはさらに大幅ディスカウントされたアカデミック版あり)。これらはエクセルソフト株式会社によって販売される。

Windowsアプリケーション並列化の敷居を下げる「IntelParallel Studio」
ラムダ関数をサポートしたIntelParallel Composerは、TBBによるC++テンプレート・プログラミングを容易にする

 IntelParallel ComposerはC/C++コンパイラとライブラリで構成されるコーディングのためのツール。同社の最適化ライブラリとして定評のあるIPP(Integrated Performance Primitive)やTBB(Threading Building Block)を含んでおり、これらを直接呼び出すことができる。また並列化を支援するものとして、OpenMP 3.0に対応しているほか、次期C++標準である「C++0x」(シープラスプラス・ゼロエックス)で採用されるラムダ関数も利用可能となっている。

 デバッグのためのツールであるIntelParallel Inspectorは、メモリリークや不正なメモリ参照などメモリエラーの検知に加え、デッドロックやデータの競合の検出など、スレッド化されたアプリケーション特有のエラーを指摘、Visual Studioのエディタで問題のあるソース部分を表示する。

 IntelParallel Amplifierは、VTuneの機能を継承したアプリケーションチューニングのためのツール。Hotspot解析によりボトルネックを素早く検知、コード行ごとの実行時間(CPU時間)を表示したり、関数とそのスタックに起因する実行中のCPU利用率を表示することで、アプリケーションの最適化を支援する。性能低下を招いているロックや、時間を浪費しているオブジェクト競合を検知することで、アプリケーションの並列性を高めることが可能だ。

Visutal Studioのロードマップを語るマイクロソフトのデベロッパー&プラットフォーム統括本部開発ツール製品部の近藤和彦氏

 このIntelParallel Studioに含まれる3本のツールは、MicrosoftのVisutal Studio 2005および2008と互換性を持つほか、現在CTP(ベータ)テスト中のVisutal Studio 2010(VS 2010、年内にβ2がリリース予定)とも互換性を持つ。VS 2010では、.Net Framework 4.0が提供され、.Netアプリケーションの並列化が可能となる。

 VS 2010/.Net Framework 4.0では、現行の.Net Framework 3.5で提供されている.NET LINQ(Language Integrated Query:統合言語クエリ)を並列処理対応にしたPLINQ(Parallel LINQ)が提供されるほか、並列プログラミング用の新機能としてTPL(Task Parallel Library)の提供が行なわれる。

 TPLは、.NETスレッドプールに統合された新しいタスクスケジューラーで、アプリケーションの実行単位をスレッドではなく、タスクという単位で管理する。記述されたタスクは、実行時の環境や状況に応じて、スレッドとして並列処理されるか、通常の実行処理となるかが、タスクスケジューラーで決定される。AppleがSnow Leopardで導入したGrand Central Dispatch(こちらは実行単位をブロックとして記述)に近い考え方だ。同様のダイナミックなスケジューリングは、もちろんPLINQでも利用できる。

並列化プログラミングに対応するVisual Studio 2010。ネイティブアプリケーションだけでなく、.NETアプリケーション(マネージド・アプリケーション)も並列化される
.NET Framework 4.0における並列プログラミング

 また、C++によるネイティブアプリケーションの開発においても、同様なスケジューリング機能は、Concurrency Runtimeの利用という形で実現される。IntelParallel Studioは、OpenMPやTBBによる並列プログラミングに加え、このConcurrency Runtimeを利用したプログラミングにも対応する。そして将来は、OpenMPやTBB自体をCocurrency Runtime対応にすることも含め、Intelが提供するWindowsベースの並列化プログラミングツールはすべてConcurrency Runtimeをベースにしたものにするとしている。

 ただ、こうしたことでも分かるように、Microsoftも開発ツールの並列処理対応を進めている。将来的に、並列処理を行なうのに、Intelのツールがなければならない、というものでないことも明らかだ。それでも、プロセッサメーカーの純正ツールとして、ハードウェアに沿った最適化という意味で、Microsoftのツールより1歩、あるいは半歩先行することもまた間違いない。ツールへの投資と手間を考えた上で、このあたりにどれくらいの価値を見出すか、そこを競合アプリケーションとの差別化ポイントにできるかが、IntelParallel Studioに対する評価の分かれ目になるのだろう。