CodeZine(コードジン)

特集ページ一覧

インテルTBB 3.0によるパイプライン処理

lambda-friendlyなパイプライン

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2010/06/09 14:00

 Visual Studio 2010がリリースされました(パッケージ版は2010年6月18日発売予定)。これに伴い改版されたインテルTBB(Threading Building Blocks)3.0で追加された新機能「parallel_pipeline」を紹介します。

目次

 Visual Studio 2010がリリースされました(パッケージ版は2010年6月18日発売予定)。評価版と、無償のExpressもマイクロソフト社のWebサイトからダウンロードできます。これに伴い改版されたインテルTBB(Threading Building Blocks)3.0で追加された新機能「parallel_pipeline」を紹介します。

インテルTBB 3.0

 オープンソースのマルチスレッドライブラリ、インテルTBB(Threading Building Blocks、以下TBB)がversion 3.0となりました。Visual C++ 2005(vc8)、2008(vc9)に加え、2010(vc10)にも対応しています。TBBのインストール・ディレクトリを環境変数TBB30_INSTALL_DIRにセットしておけば、インクルード/ライブラリディレクトリの設定はVS2010 IDEのプロジェクト・プロパティでそれぞれ次のようになります。

  • インクルード: $(TBB30_INSTALL_DIR)\include
  • ライブラリ: $(TBB30_INSTALL_DIR)\lib\ia32\vc10

 さらにTBBのDLLが$(TBB30_INSTALL_DIR)\bin\ia32\vc10にありますから、ここにPATHを通すか、DLLをPATHの通ったディレクトリにコピーすれば使えるようになります(64-bitターゲットの場合はライブラリ/DLLディレクトリの「ia32」を「intel64」に置き換えてください)。

 この記事ではCommercial Aligned Release tbb30_018ossを使いました。

パイプラインとは

 TBB 3.0で新たに追加された機能のうち、最も僕の気を引いてくれたのがパイプライン(pipeline)です。パイプラインそのものは以前のバージョンでもサポートしていたのですが、3.0ではlambda式と非常に相性のいいインターフェイスを提供してくれたおかげでパイプラインを簡単に記述/表現できるようになりました。

 パイプラインとは――例えばスーパーマーケットの鮮魚コーナーに並ぶ「おさしみ盛り合わせ」の製造工程を考えてみましょうか。鮮魚コーナーのバックヤードでは、おそらくはパートタイムのオバちゃんが

  • さしみを引いて
  • スチロール皿に盛り
  • ツマを添えて
  • プラスチックのタンポポ(?)をのせる

 なんて作業を繰り返していることでしょう。オバちゃんが一人なら一連の作業を順次処理することになります。が、オバちゃんが数人いれば同時並行作業が可能です。このとき各工程が互いに影響を及ぼさず独立したものであるなら、例えばオバちゃんAがさしみを引いている間にオバちゃんBが(Aが引いたさしみを)皿に盛ることができます。各工程に必要な作業空間が限られていても、数人のオバちゃんが横に並んで左隣から受け取ったものを処理して右隣に引き渡す「流れ作業」で仕事をすれば処理能力はオバちゃん一人よりずっと大きくなります。この「流れ作業」がすなわち「パイプライン」です。


  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • επιστημη(エピステーメー)

    C++に首まで浸かったプログラマ。 Microsoft MVP, Visual C++ (2004.01~2018.06) "だった"り わんくま同盟でたまにセッションスピーカやったり 中国茶淹れてにわか茶人を気取ってたり、 あと Facebook とか。 著書: - STL標準...

All contents copyright © 2005-2020 Shoeisha Co., Ltd. All rights reserved. ver.1.5