並列プログラミング(パラレル・プログラミング)は難しい。
並列プログラミングの難しさには,本当のことと,間違ったことがある。本当の難しさは,効果的なアルゴリズムの選択だ。メモリーの内容が壊れてしまうとか,制御フローを組むのが難しいといった部分は,本質的なものではなくて,これらのいくつかは修理(fix)できるし,またすべきだと思う。Ctによって開発者のタスクを可能な限りシンプルにしたい。
Ctがその解決策になるのか。
並列化にはデータ・パラレルとタスク・パラレルがあるが,Ctはデータ・パラレルの基盤となるものだ。Ctは,コンピュテーショナル・ワークロードを並列化して,大きな問題をハイスループットで処理するのに適する。小さなデータのトランザクションを並列化するためのものではない。タスク・パラレルについては,Intelが開発してオープンソース化した「Threading Building Blocks(TBB)」が効果的なソリューションだ。CtとTBBの組み合わせは非常に強力だ。
Ctとは何なのか。
Ctはプログラミング・モデル,インタフェース,API(Application Programming Interface),抽象マシン(仮想マシン)という四つのコンポーネントで構成される。最初にターゲットとしている言語はC++で,テンプレートなどを利用した拡張構文を使って開発者がプログラムを書く。コンパイルして動作させれば完成だ。Ctの仮想マシンがプロセサの持っている機能に合わせて,最適なベクター処理,スカラー処理をしてくれるので,最新CPUの恩恵を享受できる。C++コンパイラはIntelのものでもいいし,米MicrosoftのVisual C++,オープンソースのGCC(the GNU Compiler Collection)のものでもよい。Ctはプログラミング言語やオペレーティング・システムからは独立している。Ctは現在ベータ版の段階で,2010年の正式リリースに向けて開発が進んでいる。
Intelのコンパイラだけでは不十分か。
IntelのC++コンパイラはスタティックな意味では最高の最適化をする。Ctがもたらすのは,ダイナミックなコンパイルだ。CPUが持つ拡張命令,コア数,キャッシュなどに応じて,ベストな動的コンパイルをする。それを行う仮想マシンがあるのだ。
Javaや.NET Frameworkの仮想マシンとどう違うのか。
Ctの仮想マシンはパフォーマンス・オリエンテッドだ。仮想マシンという技法はいろいろなところで使われており,パフォーマンスの改善にも利用できる。シンプルな手順で,実際に速く動く。それがCtのポイントだ。