リスト12●C++でparallel_for_eachアルゴリズムを使った例。msdnのページに掲載されているサンプルから,コメントを取ったものだ(using-parallel-for-each.cpp)
リスト12●C++でparallel_for_eachアルゴリズムを使った例。msdnのページに掲載されているサンプルから,コメントを取ったものだ(using-parallel-for-each.cpp)
[画像のクリックで拡大表示]
図23●リスト12のコードをコンパイルし,実行した様子/EHscオプションを付けてコンパイルする実行する1から5が8乗された結果
図23●リスト12のコードをコンパイルし,実行した様子/EHscオプションを付けてコンパイルする実行する1から5が8乗された結果
[画像のクリックで拡大表示]

 ここまで見てきたParallelクラスは .NET Framework4.0の新機能で,PLINQはVBとC#で使える機能だったが,Visual C++専用の並列化機能もある。「コンカレンシ・ランタイム」がそれで,四つのヘッダー・ファイルから利用できる。パラレル・パターンズ・ライブラリ「ppl.h」,非同期エージェント・ライブラリ「agents.h」,ワーク・スケジューラ「concrt.h」,リソース・マネジャ「concrtrm.h」である。

 リスト12は,ppl.hを使って,parallel_for_eachアルゴリズムを使った例だ。msdnのページに掲載されているサンプルから,コメントを取ったものである。

 (1)でppl.hをインクルードし,(2)でConcurrencyという名前空間を指定している。(5)のmain関数では,(6)で「values」という名前のarray(配列)を作り,五つの要素の値を1から5にする。(7)では処理をパラメータとして記述してparallel_for_eachを呼び出す。これによって,五つの要素はすべて2乗される。(8)は(3)で定義したSquareFunctorクラスを使って2乗をするコード,(9)は(4)で定義したsquare_function関数を使って2乗をするコードである。二乗を3回繰り返すので,(10)で表示する結果は図23のようになる。

 コンカレンシ・ランタイムには,タスク・グループや,並列プログラミングを行うときに使えるアルゴリズムやデータ構造が詰まっている。前述したアドレスを参照し,左側に表示されるツリーを使って情報を得るとよい。