マルチコア時代の定番チューニングツール
「インテルParallel Studio 2011」
インテルParallel Studio 2011の新機能紹介
ダウンロード サンプルファイル (8.6 KB)
Parallel Composer 2011の新機能
Parallel Composer 2011は、高性能なコードを出力するインテルC++コンパイラーとデバッガ、並列化のための各種ライブラリを含み、並列化アプリケーション実装の中心となる製品です。
今回のバージョンでは、以下のような新機能が追加されています。
- インテルC++コンパイラーがC++の次期標準であるC++0xのサポートを拡大
- 並列化のためのC/C++言語拡張であるインテルCilk Plus(シルクプラス)
- 並列化ライブラリであるArray Building Blocks(ベータ版)
本記事では、注目株のインテルCilk Plus(以下、Cilk Plus)を解説します。
Cilk Plus
Cilk Plusは並列化処理のためのC/C++言語拡張です(綴りはClickやClikではなくCilkなのでタイプミスに注意)。
シンプルな記法で、ループや特定の関数呼び出しなどを並列化処理することができます。Cilk Plusで定義されているキーワードは以下の3つです。
| キーワード | 機能 | 別名 |
| _Cilk_for | 並列でfor文を処理する | cilk_for |
| _Cilk_spawn | 並列で関数を呼び出す | cilk_spawn |
| _Cilk_sync | _Cilk_spawnの結果を待つ | cilk_sync |
なお、各キーワードは<cilk/cilk.h>で別名でも定義されています。
このようにCilk Plusのキーワードはわずか3つで、使い方も実にシンプルです。
例えば、これまで逐次処理していたfor文を並列処理する際は、以下のようにコードを書き換えます。
for(int i = 0 ; i < LOOP_MAX ; i++){
//処理内容
}
↓
cilk_for(int i = 0 ; i < LOOP_MAX ; i++){
//並列処理内容
}
同様に、逐次的に関数呼び出しを行っていた部分を並列処理する際は、以下のようにコードを置き換えます。
someMethod1(); //1番目のメソッド呼び出し someMethod2(); //1番目のメソッド終了後、2番目のメソッド呼び出し someMethod3(); //同上
↓
cilk_spawn someMethod1(); //メソッドを並列に呼び出し cilk_spawn someMethod2(); //someMethod1の終了を待たず、メソッドを並列に呼び出し cilk_spawn someMethod3(); //同上 cilk_sync; //すべてのメソッド終了まで待つ
Parallel Composer 2011には、よく知られたアルゴリズムであるクイックソートをcilk_spawnを使って並列化したサンプルが含まれています({Parallel Studio 2011をインストールしたフォルダ}\Composer\Samples\en_US\C++\Cilk\qsort)。
クイックソートはソート対象を小さな問題に分割しながら処理を行う分割統治法を用いていますが、このサンプルでは、分割した前半部分を並列に再帰呼び出ししています。
//クイックソートを行う再帰関数
void sample_qsort(int * begin, int * end)
{
if (begin != end) {
--end;
int * middle = std::partition(begin, end,
std::bind2nd(std::less<int>(), *end));
using std::swap;
swap(*end, *middle);
//前半部分をcilk_spawnで並列処理
cilk_spawn sample_qsort(begin, middle);
//後半部分は逐次処理(直後にcilk_syncがあるため、並列処理する意味がない)
sample_qsort(++middle, ++end);
//並列処理結果を待つ
cilk_sync;
}
}
この並列処理クイックソートと、cilk_spawn,cilk_syncを除いた逐次処理クイックソートで、100,000,000個の数字を処理したところ、以下のように17%ほどの高速化が確認できました(筆者の環境はIntel Core 2 Duo T9300 2.5GHz デュアルコア)。
| 逐次処理 | 13375ms |
| 並列処理 | 11140ms |
また、Parallel Composer同梱のQuickDemoサンプル({Parallel Studio 2011をインストールしたフォルダ}\Composer\Samples\en_US\C++\Cilk\QuickDemo)では、並列処理と逐次処理の処理速度を並列度を変えながら視覚的に比較することができます。

この記事は参考になりましたか?
- インテルソフトウェア開発製品による並列化プログラミング連載記事一覧
-
- マルチコア時代の定番チューニングツール 「インテルParallel Studio 2011...
- 正しい分析でムダなくチューニング アプリの並列化を支援する「インテル Parallel A...
- 並列プログラミングの効率的なデバッグを実現する「Parallel Inspector」
- この記事の著者
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト 土井 毅(ドイ ツヨシ)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社
この記事は参考になりましたか?
この記事をシェア
