yohhoyの日記

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

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

Intel TBB(Threading Building Blocks)およびMicrosoft PPL(Parallel Pattern Library)と、タスク内からのブロッキングAPI呼び出しに関するメモ。

まとめ

  • TBBのスケジューラは協調的マルチタスクを行うため、タスク内から長期間ブロックする処理を呼び出すべきでない。(他タスクをスケジュールすることができず、CPUリソースの利用効率が悪化する。)
  • PPL/ConcRT*1ではユーザモードスケジューラ(UMS; User-Mode Scheduler)スレッドが利用でき、タスク内からブロッキングAPI呼び出しを行ってもCPU利用効率が低下しない。(ConcRTでは協調ブロッキング機能を提供するため、ブロック中は他タスクがスケジューリングされる。)ただし、UMSはWindows Server 2008 R2 または Windows 7 (x64) 以降の64ビット版でのみサポートされる。それ以外のWindows OS上では通常スレッドが用いられる*2

TBB 4.0

Intel(R) Threading Building Blocks Reference Manual, Rev.1.28, 12 Task Schedulerより引用。

The task scheduler is intended for parallelizing computationally intensive work. Because task objects are not scheduled preemptively, they should generally avoid making calls that might block for long periods, because meanwhile that thread is precluded from servicing other tasks.

PPL/ConcRT(MSVC10付属)

Comparing the Concurrency Runtime to Other Concurrency Models | Microsoft Docs, "さまざまなオペレーティング システムでの動作"より該当箇所を引用。

Windows 7Windows Server 2008 R2の両方が、ユーザーモードスケジュール可能(UMS)スレッドのサポートを追加しています。(中略)またUMSは、カーネルでスレッドがブロックされると、アプリケーションに制御を戻します。このため、アプリケーションは、タイムスライスの残りの期間に追加の作業を実行できます。オペレーティングシステムがUMSスケジューリングをサポートしている場合は、同時実行ランタイムはUMSスケジューリングを自動的に使用します。

関連URL

*1:ConcRT=Concurrency Runtime(同時実行ランタイム)。PPLはこのConcRT上で動作するライブラリ。

*2:http://msdn.microsoft.com/ja-jp/library/ff829269.aspx