|
HPC/並列プログラミングポータルでは、HPC(High Performance Computing)プログラミングや並列プログラミングに関する情報を集積・発信しています。 |
[記事一覧を見る]
並列プログラミング向けのコンパイラやデバッガ、各種ライブラリを提供するインテル Parallel Compsoserには、並列プログラミング向けの言語拡張「インテル Cilk Plus」が含まれている。これを利用することで既存のプログラムを容易に並列化したり、より簡潔にアルゴリズムを記述できる。本記事では、このCilk Plusについて機能や使い方を説明する。
インテル Parallel Studio 2011にはさまざまな新機能が搭載されているが、そのなかでも注目したいのがインテル Parallel Composerに含まれるインテル Cilk Plusだ。Cilk Plusは、次のような特徴を持つ言語拡張だ。
たとえばリスト1はクイックソートをシンプルに実装したものだが、これをCilk Plusで並列化する場合、後半の「my_qsort」関数を再帰呼び出ししている部分に「cilk_spawn」キーワードを付け、最後に「cilk_sync」キーワードを追加するだけで並列化が完了する(リスト2)。
void my_qsort(int* begin, int* end) {
int* left = begin;
int* right = end;
int n;
while (1) {
while (*left *begin)
left++;
while (*begin *right)
right--;
if (left = right)
break;
n = *left;
*left = *right;
*right = n;
left++;
right--;
}
if (begin left-1)
my_qsort(begin, left-1);
if (right+1 end)
my_qsort(right+1, end);
}
if (begin left-1) cilk_spawn my_qsort(begin, left-1); ←「cilk_spawn」を追加 if (right+1 end) my_qsort(right+1, end); cilk_sync; ←「cilk_sync;」を追加
ごく簡単な修正であるが、筆者の環境(Core 2 Duo E6550/2.33GHz・2コア、メモリ2GB)で1億個の要素を持つint型配列をソートするのに必要な時間を計測・比較したところ、これだけで3割ほどの実行時間短縮が確認できた(表1)。
| 並列化前 | 並列化後 |
|---|---|
| 10611ミリ秒 | 7662ミリ秒 |
また、配列に対する演算を次のように簡潔に記述することも可能となる。
double A[6];
double B[] = { 1.0, 4.2, 4.2, 5.3, 7.4, 3.2 };
double C[] = { 3.1, 8.9, 1.4, 2.2, 1.0, 2.4 };
double d;
A[:] = 0.0; ←配列Aの要素をすべて0.0に初期化
d = __sec_reduce_add(A[:] * B[:]); ←BとCの内積を計算
A[:] = B[:] + C[:]; ←A[0] = B[0] + C[0]、 A[1] = B[1] + C[1]、……に相当
Cilk Plusはこのように非常に簡単に導入でき、また並列化によるパフォーマンスの向上だけでなくコードをより簡潔に記述できるというメリットがある。以下ではこのCilk Plusについて、基本的な機能や文法などのポイントを紹介していく。
Cilk Plusは元々はMITの「The Cilk Project」により、ANSI Cベースの並列プログラミング言語「Cilk」として開発されていた。Cilkは当初High Performance Computing(HPC)と呼ばれる、スーパーコンピュータなどの高性能コンピュータ向けに開発されていたが、Leiserson教授らが起こしたベンチャー企業Cilk Artsが商用化、C++対応やさまざまな新機能を追加した「Cilk++」としてリリースされた。その後Cilk ArtsはIntelに買収され、仕様変更とともに名称もCilk Plusに変更、Parallel Studioの一部となった。
なお、CilkはGCCをコンパイラとして利用しており、現在でもGPLでリリースされている。CilkとCilk Plusではspawn/syncキーワードなど共通している部分が多いため、Cilkを利用したことのあるユーザーであればCilk Plusも容易に扱えるだろう。ただし、C++対応やarray extensionsなどClik PlusにはCilkには含まれていない独自の拡張機能も多くあるので、ドキュメントなどで詳細を確認していただきたい。
[PageInfo]
LastUpdate: 2010-10-26 20:20:20, ModifiedBy: hiromichi-m
[Permissions]
view:all, edit:login users, delete/config:members