yohhoyの日記

技術的メモをしていきたい日記

TBB

Intel TSX拡張命令を利用したスピンロック

TBB

Intel TBB 4.2以降で提供されるIntel Transactional Synchronization Extensions(TSX)拡張命令実装によるミューテックス同期プリミティブ。基本はスピンロック(spin_mutex)として動作し、対応プロセッサの場合はTSX拡張命令が利用される。*1 クラス 機能 spe…

並列パイプライン処理のひな形

Intel TBB(Threading Building Blocks)を利用した並列パイプライン処理実装のひな形コード。下記の前提条件・要件に適合する。 データの“入力 → 変換 → 出力”処理フローにおいて、スループット改善を目的として変換処理を並列化する。 データ変換は並行実行…

task_groupコンセプト

C++1yに向けた並列プログラミングモデルについてメモ。(PDF)N3711 Task Groups As a Lower Level C++ Library Solution To Fork-Join Parallelismにて、タスク並列処理の基本構成要素となるtask_groupコンセプトが提案されている。なお、同名クラスはIntel T…

tbb::task::allocate_continuationによるループ処理オーバーラップ

Intel TBBタスク tbb::task の allocate_continuation() による継続タスク利用に関するメモ。TBB公式リファレンスにある推奨タスクパターン*1とは異なる例を取り上げるが、必ずしも望ましいユースケースとなっていない可能性がある(と思う)。 直列化された…

Intel TBBのscalable_allocator設計

TBB

Intel TBB(Threading Building Blocks)が提供する tbb::scalable_allocator の説明資料がIntelより公開されている。 http://www.intel.com/technology/itj/2007/v11i4/5-foundations/5-memory.htm (PDF)The Foundations for Scalable Multi-Core Software in…

C++1yへの並列アルゴリズムライブラリ提案

C++1yに向けた並列プログラミングモデルについてメモ。(PDF)N3429 A C++ Library Solution to Parallelismにて、いくつか並列アルゴリズムの追加提案がなされている(言語コア機能の拡張提案は含まない)。初期提案のため概要レベル。これら並列アルゴリズム…

tbb::flow::sequencer_nodeとsequence order numberの落とし穴(続き)

前記事ではフローグラフによる実装を行ったが、この設計ならばで並列パイプラインアルゴリズム parallel_pipeline の方が簡潔に記述できる。というより、この手の線形パイプライン処理はパイプライン(pipeline)アルゴリズムで実装すべき。 #include <iostream> #includ</iostream>…

tbb::flow::sequencer_nodeとsequence order numberの落とし穴

Intel TBB フローグラフ(flow graph)のシーケンサノード sequencer_node では、入力アイテムからシーケンス序数(sequence order number)を返すユーザ定義のSequencerファンクタを与えて、後続ノードへ送るアイテム順序を変更する。このシーケンス序数の割当…

並列パターン

IntelとMicrosoftから並列プログラミングのパターン集が公開されている。 (PDF) Intel® Threading Building Blocks Design Patterns Patterns and Practices for parallel programming in C++ (PDFダウンロードへのリンク) 2012-06-21追記:エクセルソフトよ…

C++11サポートを有効にしてIntel TBBをビルド

Intel TBBをgcc C++0xモード(-std=c++0xオプション付)でビルドする方法。gcc 4.6.3+tbb40_20120201oss_src.tgz (TBB 4.0 update 3) @Ubuntu 11.10で確認済み。${TBBROOT}/src/index.htmlに記載がある通り、makeオプションに cpp0x=1 を追加指定する*1。 …

TBBとPPL/ConcRTとブロッキング操作

Intel TBB(Threading Building Blocks)およびMicrosoft PPL(Parallel Pattern Library)と、タスク内からのブロッキングAPI呼び出しに関するメモ。まとめ: TBBのスケジューラは協調的マルチタスクを行うため、タスク内から長期間ブロックする処理を呼び出す…

(翻訳)Intel Threading Building Blocks フローグラフによるパイプライン構成方法

元記事:How to make a pipeline with an Intel® Threading Building Blocks flow graph | Intel® Software, Michael Voss氏, 2011/9/14自分自身の理解のために日本語訳を行ったIntel TBB フローグラフ解説記事。 Intel® Threading Building Blocks フローグ…

(翻訳)Intel Threading Building Blocks フローグラフを用いたウェーブフロント計算の実装

元記事:Implementing a wave-front computation using the Intel® Threading Building Blocks flow graph | Intel® Software, Michael Voss氏, 2011/9/9自分自身の理解のために日本語訳を行ったIntel TBB フローグラフ解説記事。 Intel® Threading Building …

(翻訳)Intel Threading Building Blocks フローグラフを用いた特徴検出の例

元記事:A feature-detection example using the Intel® Threading Building Blocks flow graph | Intel® Software, Michael Voss氏, 2011/9/9自分自身の理解のために日本語訳を行ったIntel TBB フローグラフ解説記事。 Intel® Threading Building Blocks フ…

(翻訳)Intel Threading Building Blocks フローグラフがフルサポートされます

元記事:The Intel® Threading Building Blocks flow graph is now fully supported | Intel® Software, Michael Voss氏, 2011/9/8自分自身の理解のために日本語訳を行ったIntel TBB フローグラフの紹介記事。 Intel® Threading Building Blocks フローグラフ…

Intel TBB 4.0のC++11対応状況

Intel TBB(Threading Building Blocks) 4.0では、C++11で追加された新機能との親和性向上や、新しいC++標準ライブラリ互換APIの提供が行われている。 C++11標準ライブラリ互換APIの提供 TBB 4.0ではC++11標準ライブラリとの前方互換性のために、新しく追加さ…

Intel Threading Building BlocksとMicrosoft Parallel Pattern Libraryの互換性

Intel TBB(Threading Building Blocks)とMicrosoft PPL(Parallel Pattern Library)は、両ライブラリともに同じような並列アルゴリズムや同期プリミティブを提供している。TBB バージョン2.2以降、一部機能についてはPPLとのAPI互換がとられている。(TBB 4.0…