浮動小数点設定

浮動小数点計算で CPU 固有の設定を制御する必要があるアプリケーションでは、インテル® スレッディング・ビルディング・ブロック (インテル® TBB) のタスク・スケジューラーで実行されるタスクに浮動小数点設定を伝える方法は 2 つあります。

デフォルトでは、ワーカースレッドは、アプリケーション・スレッドの暗黙の領域または明示的な task_arena の初期化中に取得した浮動小数点設定を使用します。これらの設定は、スレッドがタスク・スケジューラーのインスタンスを終了するまで、task_arena 内またはアプリケーション・スレッドによって開始されたすべての並列計算に適用されます。スレッドがタスク・スケジューラーを後で再初期化した場合、新しい設定が取得されます。

浮動小数点の動作をより細かく管理するため、スレッドはタスク・グループ・コンテキストの現在の設定を取得することができます。これは、コンストラクターに特別なフラグを渡してコンテキストを作成したときに行われます。

task_group_context ctx( task_group_context::isolated,
                        task_group_context::default_traits | task_group_context::fp_settings );
        

あるいは、capture_fp_settings メソッドの呼び出しによって行います。

task_group_context ctx;
ctx.capture_fp_settings();
        

タスク・グループ・コンテキストを (flow::graph を含む) ほとんどのインテル® TBB 並列アルゴリズムに渡して、そのアルゴリズムに関連するすべてのタスクで指定された浮動小数点設定の使用を保証することができます。別々のコンテキストに対して取得された異なる浮動小数点設定で並列アルゴリズムを (同時に) 実行することも可能です。

タスク・グループ・コンテキストに対して取得した浮動小数点設定は、タスク・スケジューラー初期化中に取得した設定よりも優先されます。このため、コンテキストが並列アルゴリズムに渡された場合、そのコンテキストに対して取得された浮動小数点設定が使用されます。コンテキストに対して浮動小数点設定が取得されていない場合、あるいはコンテキストが明示的に指定されていない場合、タスク・スケジューラー初期化中に取得した設定が使われます。

明示的に浮動小数点設定が取得されたタスク・グループ・コンテキストを使用しない並列アルゴリズムへの入れ子の呼び出しでは、外側のレベルの設定が使用されます。外側のレベルのコンテキストで浮動小数点設定が取得されていない場合、タスク・スケジューラー初期化中に取得した設定が使用されます。

次の点が保証されます。

注意

上記の保証は、次の場合にのみ適用されます。
  • タスク内部のユーザーコードが浮動小数点設定を変更しない、あるいはタスクが完了する前に変更を元に戻すか以前の設定に戻す。
  • インテル® TBB のタスク・スケジューラー・オブザーバーが、浮動小数点設定のセットや変更に使用されない。
その他の場合、上記の保証はなく、浮動小数点設定に関連する動作は不定です。

関連情報