インテル® スレッディング・ビルディング・ブロック (インテル® TBB) ダイナミック・ライブラリーの特定の設定や動作を制御するクラス。
#define TBB_PREVIEW_GLOBAL_CONTROL 1 #include "tbb/global_control.h"
class global_control;
global_control クラスのオブジェクトまたは "制御変数" は、インテル® TBB の動作やパラメーターに影響します。global_control クラスは、主にアプリケーション・レベルでアプリケーション全体の動作を制御することを目的としています。
ライブラリーやプラグインでは、構成やパフォーマンスに広範な影響を及ぼすため、使用を避けるべきです。
変更可能な現在のパラメーター・セットは、global_control::parameter 列挙子によって定義されます。パラメーターとその値は、制御変数のコンストラクターの引数として指定されます。制御変数の存在期間が終了すると、その効力も失われます。
制御変数は異なるスレッドにより作成することができ、入れ子やオーバーラップするスコープを持つことができます。ただし、各制御パラメーターの処理全体に適用されるアクティブな値は常に 1 つだけです。この値は、パラメーター固有の選択規則に従って、現存のすべての制御変数から選択されます。
パラメーター |
選択規則 |
説明 |
---|---|---|
max_allowed_parallelism |
minimum |
タスク・スケジューラーにおいてアクティブなワーカースレッドの合計数をパラメーター値 - 1 に制限します。 注max_allowed_parallelism を 1 に設定すると、global_control はアプリケーション・スレッドですべてのタスクのシリアル実行を行います。つまり、タスク・スケジューラーはワーカースレッドを実行しません。例外: task::enqueue または task_arena::enqueue で実行に渡されたワークがある場合、単一ワーカースレッドは max_allowed_parallelism の制限を無視して実行されます。 |
thread_stack_size |
maximum |
ライブラリーによって作成されるスレッド (タスク・スケジューラーのワーカースレッドやスレッド・ラッパー・クラスによって制御されるスレッドを含む) のスタックサイズを設定します。 注
|
#include "tbb/parallel_for.h" #include "tbb/task_scheduler_init.h" #define TBB_PREVIEW_GLOBAL_CONTROL 1 #include "tbb/global_control.h" using namespace tbb; void foo() { // 次のコードは最大 16 スレッドを使用可能 task_scheduler_init tsi(16); parallel_for( . . . ); } void bar() { // 次のコードは最大 8 スレッドを使用可能 task_scheduler_init tsi(8); parallel_for( . . . ); } int main() { { const size_t parallelism = task_scheduler_init::default_num_threads(); // foo() と bar() を含むスコープの動的範囲でインテル® TBB が // 利用可能な並列処理を半分に減らす global_control c(global_control::max_allowed_parallelism, parallelism/2); foo(); bar(); } // 以前の並列処理制限に戻す
namespace tbb { class global_control { public: enum parameter { max_allowed_parallelism, thread_stack_size }; global_control(parameter p, size_t value); ~global_control(); static size_t active_value(parameter param); }; } // tbb 名前空間
メンバー | 説明 |
---|---|
static size_t active_value(parameter param); |
param によって定義された設定の現在アクティブな値を返します。 |