CoolSoft

CoolParallel Software Development Environment

CoolParallel SDE(Software Development Environment)は、困難さを増す並列処理ソフトウエア開発を「助ける」ソフトウエア開発環境です。プログラムの並列化(それは高速化とほとんど同義です)を迫られているプログラマであれば、多かれ少なかれ下の図のような経験があるでしょう。研究者あるいはアルゴリズム開発者が懸案事項を解決するための新たなアルゴリズムを開発します。C言語やC++言語などで書かれたプロトタイプコードが多いですが、場合によってはMatlabなどのソフトウエアや、Pythonなどのスクリプト言語のコードかもしれません。実製品への応用にあたってインプリメンテーションを行うプログラマは、そのコードを理解し、高速化のためにマルチコアCPUを使い切れるようなコードを限られたメモリリソースのもとで実現せねばならいわけです。しかし、残念ながら並列化を最初から念頭において開発されたアルゴリズムは多くはありません。解かねばならない問題にまず集中しなければならないので、そこまで気が回らないというのはしかたのないことかもしれません。

そこで多くのプログラマがすることは、プロファイラなどのツールを使って負荷の重いループなどを見つけ出し、その部分のデータ並列性を引き出すことです。これは、コンパイラ・ディレクティブなどを埋め込むことで実際の分割作業をコンパイラに任せることもできますし、場合によってはインラインアセンブラなどを使う面倒な手作業が必要となるかもしれません。しかし、着目したループなどは並列化できるものの、前後の依存関係から並列化できずボトルネックとなる部分が必ず残るということも多くの人が経験する事実です。

局所的にどんなに並列化できたとしてもこのようなボトルネックが残った場合は、かのアムダールの法則が教えるごとく、全体としての性能はそれほど高くはなりません。ならば、どうするか。提案したいのは、アルゴリズムと実際のインプリメンテーションの間のソフトウエアモデリングの重要性です。

コンパイラに任せられるような並列化、最適化はおいておきましょう。モデリングは、マルチプロセッサであることを前提にソフトウエアをどのように構成したら並列度が高められるのか全体に見通して設計し、それを検証するフェーズだと言い換えてもよいでしょう。良くできたモデルはボトルネックを解消し、全体性能を高めます。また、その後さらに細かな最適化、並列化を行うこととも矛盾をきたさないどころか、さらに良い方向に導くことも稀ではありません。以下にCoolParallel SDEの全体構想図を示します。現状、実装されているのは、CoolPartitionerを中心とした一部機能です。また、Multicore Associationで標準化されたSHIMにも対応しています。日々成長しておりますので詳しいことはお問合せください。よろしければ次のモデリングとデータの細粒度分割もご覧ください。

以下の表に上記図の各ソフトウエア機能を説明しております。