新しい機能:インテル® スレッド構築モジュール4.2


作者:杜偉
インテル® スレッド構築モジュール(Intel® TBB)は最もよく知られているC++スレッドライブラリで、最新バージョンは4.2に更新されています.以前のバージョン4.1と比較して、更新されたバージョンは複数の重要な新しい特性を提供しています.いくつかの特性はTBB 4.1の更新で発表された.
新しい同期ベースspeculative_spin_mutexは推測ロックのサポートを提供します.これにより、第4世代のインテルでは® Core™ インテル(R)トランザクション同期拡張(Intel)を使用したプロセッサー® TSX)ハードウェア特性が可能となる.推測されないロックとは異なる結果をもたらす可能性のある「競合」が発生しない限り、インテルなどのハードウェアトランザクションをサポートするメモリに反発ロックがあると推測されます.® TSX)のプロセッサが動作すると、複数のスレッドが同じロックを取得できます.したがって、競合しないケースではシリアル化は発生しません.これにより、「短い」キー領域でパフォーマンスと拡張性が大幅に向上します.トランザクション同期にハードウェアサポートを提供しない場合、反発ロックの役割は非推測反発ロックと同様であり、パフォーマンスが低下する可能性があります.
インテルTBBは現在、正確な異常伝播特性(C++11 exception_ptrベース)をサポートしています.exception_を利用ptrでは、例外オブジェクトはスレッド間で安全にコピーできます.これにより、マルチスレッド環境での例外処理に柔軟性が得られます.正確な例外伝播は、OS X*、Windows*、Linux*など、すべてのプラットフォームの事前構築ライブラリで提供されています.OS X*には2つのライブラリがあります.1つ目のライブラリはgcc標準ライブラリに関連付けられています.デフォルトでは、このライブラリは正確な異常伝播をサポートしていません.このプロパティを使用するには、libc++(ClangのC++標準ライブラリ)に関連付けられた2番目のライブラリを使用します.これらの機能を使用するには、まずIntel TBB環境を作成し、次のようにアプリケーションを構築します.
# tbbvars.sh libc++
# clang++ -stdlib=libc++ -std=c++11 concurrent_code.cpp -ltbb

除concurrent_unordered_setとconcurrent_unordered_mapコンテナのほかにconcurrent_unordered_Multisetとconcurrent_unordered_Multimapは、Microsoft*PPLプロトタイプに基づいています.concurrent_を使用unordered_Multisetでは、concurrent_で1つを複数回挿入できます.unordered_setでは実現不可能です.同様にconcurrent_unordered_Multimapでは、同じキー値を使用して<キー、値>ペアを1つ以上挿入できます.マルチコンテナの場合、findは一致する検索キーを持つテーブルに最初のアイテム(または<キー、値>ペア)を返します.
Intel TBBコンテナは、C++11で指定された値リスト(初期化プログラムリスト)を使用して容易に初期化できます.

  
  
  
  
1 tbb::concurrent_vector<int> v ({1,2,3,4,5} );

現在、イニシャル化プログラムのリストをサポートするコンテナは次のとおりです.
concurrent_vector concurrent_hash_map concurrent_unordered_set concurrent_unordered_multiset concurrent_unordered_map concurrent_unordered_multimap concurrent_priority_queue
拡張可能なメモリ割り当てプログラムは、各スレッド内の割り当てられたメモリにキャッシュを提供します.この方法では、パフォーマンスが確保されますが、通常はメモリの使用率が増加します.このメモリ割り当てプログラムはメモリの過剰使用をできるだけ避けるが、複雑な状況ではIntel TBB 4.2はプログラムデザイナーにより多くの制御権を渡す:scalable_を使用することができるallocation_command()関数は、スレッドキャッシュをクリーンアップし、メモリ消費を削減する目的を達成します.これにより、割り当てプログラム全体のパフォーマンスを大幅に向上させることができます.
Intel TBBライブラリは、さまざまなプラットフォームで広く使用されています.モバイル開発者は、Linux*オペレーティングシステムパッケージでAndroidに適した事前構築バイナリファイルを見つけることができます.Windows Store*アプリケーションのバイナリファイルがWindows*オペレーティングシステムパッケージに追加されました.
原子変数tbb::atomicは現在C++11で使用されているときに構造関数を備えている.これにより、プログラマは宣言時に値を初期化し、式の構築を正しくサポートできます.この場合、以下のコードはgccおよびClangコンパイラに有効です.

  
  
  
  
1 tbb::atomic<int> v=5;

新しいコミュニティプレビュープロパティでは、すべての作業スレッドが終了するまで待機できます.アプリケーションがプロセスを分解する場合は、TBBダイナミックライブラリが実行時からアンインストールされる可能性があります(たとえば、TBBがプラグインの一部である場合).ワークスレッド待機機能を有効にするには、task_を次のようにします.scheduler_Initオブジェクトの初期化:

  
  
  
  
1 #define TBB_PREVIEW_WAITING_FOR_WORKERS 1
2 tbb::task_scheduler_init scheduler_obj (threads, 0, /*wait_workers=*/true);

最新のインテルTBB 4.2のWebサイト:商用およびオープンソース.新しい機能をダウンロードして使用し始めます!