はじめに
IT業界はよく日進月歩だと言われます。確かに我々開発者を取り巻く環境は日々変化し、新しいテクノロジーが毎月のように発表されています。しかし、ある程度経験を積んだ開発者は、そのような変化は表面上のものだと考えます。
プログラミング言語は進化し、どんどん新しい機能が追加されてゆき、それに伴い新しい開発環境が登場します。ですが、冷静に考えてみればそう慌てることはありません。昨今騒がれている言語の新しい機能も大半が古くからあるものですし、開発環境もそれ程やり方は変わっていません。開発ツールが進化しても、開発工程そのものはほとんど変わっていませんので、ちょっと新しいことを覚える程度で済みます。何も慌てることはありません。
しかしここ数年の間に大きな変化がありました。それはCPUのマルチコア化です。2006年にPentium 4シングルコアの製造が中止され、Intel Core 2が発売され始めた時、筆者は非常に衝撃を受けました。なぜならば、それは従来の開発技法が通用しないことを意味するからです。
今まではムーアの法則が示す通りに、CPUの性能はどんどん向上していき、開発者が特別なことをしなくてもCPUさえ買い換えれば開発したシステムの処理スピードが上がりました。ですが、もう単一CPUの時代は終わり、CPUのマルチコア化が進んで行きますので、開発者もそれに伴って並列プログラミングをする必要性が生じました。
あまりなじみのない方もいると思いますので簡潔に説明します。「並列プログラミング」とは、複数の処理を同時に行うようにアルゴリズムやオブジェクトデザインを考え、それに基づきコーディングすることです。CPUがマルチコアになれば、システムの性能を上げるためには、その複数のCPUを有効に使用せねばなりません。CPUがシングルコアに戻ることはないのですから、これからの時代は並列プログラミングが当たり前のものとなるのです。
並列プログラミング
今までシングルコアのCPUが主流だったからといって、並列プログラミングがまったくなかったわけではありません。今までもマルチスレッドプログラミングを行っていた人も多いと思います。この手法でもコア数が2ならば十分に対応可能でしょう。
しかし、コア数が4・8・16・32・64・……と増えるにつれてこの方法では対処できなくなります。また、コア数を固定したプログラミング方法では、エンドユーザーがCPUを買い換えた時パフォーマンスがアップしません。エンドユーザーは新しいCPUを買えばシステムの性能がよくなると考えていますので、これではシステム不備だと看做されてしまうでしょう。今後コア数が増加することは目に見えていますので、新しい技術が必要なのは明白です。
幸い並列プログラミングを助け、マルチコアを有効に利用するための技術があります。いろいろありますが、筆者が知っているのはOpenMPとTBB(インテル・スレッディング・ビルディング・ブロック)です。これからこの2つの技術を簡潔に説明します。
OpenMP
OpenMPはコンパイラを拡張し、プログラマーがプログラムを並列なものとして記述する手助けを行い、コンパイラに並列環境に適したコードを生成させるための規格です。この規格は1997年に制定され、FortranとC言語の拡張機能として広く普及しています。この技術の特徴は、独自のプリプロセッサディレクティブを使用することにより、並列環境とそうでない環境のコードを同一にできることです。効果も高く非常に有用な技術だと言えます。
TBB
TBBは標準C++を使用してスケーラブルな並列プログラミングをサポートするライブラリです。この技術の特徴は、スケーラブルでよりコア数が多いプロセッサーに変えてもパフォーマンスを向上できること、ライブラリなのでOpenMPなどの他の技術と併用できることです。C++の並列プログラミングにおいて、筆者の知る限り最良の技術です。
この2つの技術を有効利用すればマルチコア対応の並列プログラミングが効率よくできます。ただ一つだけ憂慮するべき点があります。それは開発環境です。実務では優れた開発環境を使用して開発効率を上げます。もし開発環境がなければ、どれだけ優れた技術でも開発効率が落ちては意味がありませんので、実務では採用できないでしょう。そこで筆者はこの2つの技術に対応した開発環境を求めていました。そして見つけたのが「インテル Parallel Studio」(以下、Parallel Studio)です。