ランタイムローダー

概要

ランタイムローダーは、アプリケーション、プラグイン、ほかのライブラリーで使用されるインテル® スレッディング・ビルディング・ブロック (インテル® TBB) ダイナミック・ライブラリーのロードに対する追加のランタイム制御を提供します。

ヘッダー

#define TBB_PREVIEW_RUNTIME_LOADER 1
 #include "tbb/runtime_loader.h"

ライブラリー

OS

リリースビルド

デバッグビルド

Windows®

tbbproxy.lib

tbbproxy_debug.lib

説明

ランタイムローダーは、使用するインテル® TBB のバージョンに対してより細やかなランタイム制御を提供するため、アプリケーション、ライブラリー、またはプラグインにリンク可能なクラスとスタティック・ライブラリーで構成されます。クラスは、ライブラリーを検索するディレクトリーの明示的なリストを使用して、ランタイムにダイナミック・ライブラリーの任意のバージョンをロードできるようにします。スタティック・ライブラリーは、リンク時に依存性を解決できるように、関数とメソッドにスタブを提供します。スタブは、ロードされたインテル® TBB ライブラリーの適切な関数とメソッドに動的に置換されます。

同じモジュール (exe や dll) の class runtime loader のインスタンスはすべて、特定のグローバルステートを共有します。その代表的なものが、ロードされたインテル® TBB ライブラリーです。次のような影響があります。

モジュールごとに 1 つのインテル® TBB ライブラリーのみロードできます。

ある runtime_loader インスタンスによってすでにライブラリーがロードされている場合、同じモジュールによって作成された別のインスタンスは別のライブラリーをロードできません。ロードされているライブラリーが 2 つ目のインスタンスにも適している場合、2 つのインスタンスは協調してライブラリーを使用します。その他の場合はエラーになります (詳細は以下を参照)。

異なるモジュールによりライブラリーの異なるバージョンが要求された場合、ライブラリーをロードすることはできますが、プロセッサーのオーバーサブスクリプションが発生する可能性があります。

runtime_loader オブジェクトはスレッドセーフではないため、同時に使用した場合、正しく動作しない可能性があります。

サンプル

#define TBB_PREVIEW_RUNTIME_LOADER 1
 #include "tbb/runtime_loader.h"
 #include "tbb/parallel_for.h"
 #include <iostream>
 char const * path[] = { "c:\\myapp\\lib\\ia32", NULL };
 int main() {
 tbb::runtime_loader loader( path );
 if( loader.status()!=tbb::runtime_loader::ec_ok )
 return -1;
 // ローダーはライブラリーの使用方法には影響しない
 tbb::parallel_for(0, 10, ParallelForBody());
 return 0;
 }

このサンプルでは、インテル® TBB ライブラリーは c:\myapp\lib\ia32 ディレクトリーからロードされます。明示的にバージョンが指定されていないため、このサンプルのコンパイルに使用したバージョン以上が適切なバージョンになります。ライブラリーがロードされたら、通常の方法で使用することができます。