問題タブ [tbb]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - IntelスレッドCAPI
Intel Threading Building Blocks
C ++ではなく、プレーンCから使用したいと思います。C APIもありますか?
linux - Linux11.04にTBBをインストールする
私はTBBをインストールする方法についてグーグルとtbbsフォーラムを検索してきました。
Linuxとソースの両方を http://threadingbuildingblocks.org/ver.php?fid=175からダウンロードしました。
tar -xvfを使用してそれらを抽出し、makeファイルを実行しました。それから私は行ってtbb/build/linux_intel64_gcc_cc4.5.2_libc,13_kernel2.6.38_debug/
走りましたtbbvars.sh
私も走ってみtbb/build/generate_tbbvars.sh
ましtbbvars.sh
たtbbvars.csh
でプログラムをコンパイルしようとすると、何を結んでも-ltbb
、
/usr/bin/ld: skipping incompatible /usr/lib/libtbb.so when searching for -ltbb
/usr/bin/ld: cannot find -ltbb
誰かがこれを修正する方法を知っていますか?
Linux damian-HP-Z600-Workstation 2.6.38-8-generic #42-Ubuntu SMP Mon Apr 11 03:31:24 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux
tbb - UbuntuにTBBをインストールするにはどうすればいいですか?
http://threadingbuildingblocks.org/ver.php?fid=174からtbb40_233oss_lin.tgzファイルをダウンロードしました
「TBBROOT」変数をbash_proflieのディレクトリに設定し、tarファイルを解凍して、binフォルダーに移動し、tbbvars.shファイルを実行しました。
入力しました
例を実行しようとしましたが、以下のように文句を言います
ライブラリパスを手動で設定しようとしましたが、次のように入力しました
しかし、それでも文句を言います。
Ubuntuでサンプルコードをコンパイルするにはどうすればよいですか?
前もって感謝します。
c++ - TBB タスク割り当てアサーション
TBB タスクと継続を介してツリーをトラバースしようとしています。コードは以下です。コードを実行すると、次のエラーで中断し続けます (常にではありませんが、頻繁に)。
アサーション t_next->state()==task::allocated がファイル ../../src/tbb/custom_scheduler.h の 334 行目で失敗しました割り当てられた
この問題の原因は何ですか?
opencv - TBB で OpenCV をビルドするにはどうすればよいですか?
opencv_traincascade
複数のスレッドを使用しようとして失敗しています。私が見つけた唯一のドキュメントには、「TBB で OpenCV をビルドする」と書かれています。TBB を使用して OpenCV を正常にビルドできていないのか、または に設定する必要があるフラグがあるのかどうかはわかりませんopencv_traincascade
。
OpenCV バージョン 2.3.1 Windows スーパーパックと をダウンロードし、tbb40_20111003oss_win.zip
解凍してC:\tbb40_20111003oss
. 次に、CMakeを使用してVC8.sln
と.proj
ファイルを生成し、設定
WITH_TBB: ON
TBB_INCLUDE_DIR:PATH=C:\tbb40_20111003oss\include
TBB_LIB_DIR:PATH=C:/tbb40_20111003oss/lib/intel64/vc8
その後、OpenCV はエラーなしでビルドされますが、実行するとシングルスレッドにopencv_traincascade
なります。私が間違っていることを誰かが知っていますか?
c++ - 2次元配列のconcurrent_vector
現在、 を使用して 2D 配列を表現しようとしていtbb::concurrent_vector<T>
ます。この 2 次元配列は、多くの異なるスレッドによってアクセスされるため、並列アクセスを可能な限り効率的に処理する必要があります。
私は2つの解決策を思いつきました:
を使用し
tbb::concurrent_vector<tbb::concurrent_vector<T> >
て保管してください。すべてを a に格納し、
tbb::concurrent_vector<T>
w/ で要素にアクセスします。x * width + y
1 つの要素にアクセスするために行全体をロックしたくないため、2 番目の要素を好みました (要素にアクセスするためarray[x][y]
に tbb 実装はx
th 行をロックし、次にy
th 要素をロックすると想定しているため)。
どの解決策があなたにとってより良いと思われるか知りたいです。
c++ - TBB: parallel_for のローカルおよびグローバル結果
並列ループのローカル値とグローバル変数の更新に関して質問があります。
疑似コードの例: 非常に長いベクトルの最大値を検索しています。次のように、ループで実行できます。
OpenMP で簡単に並列化できます。
TBB で同じことを行うにはどうすればよいparallel_for
ですか? 正確なコードは要求しません。反復ごとではなく、ループの最後にグローバル結果を更新する方法を知りたいだけです...
(TBB初心者です)
visual-c++ - 同じプロセスで異なるバージョンのVisualStudioに対してコンパイルされたDLLがスレッドビルディングブロックを使用できるようにする方法
私のDirectShowアプリケーションには、32ビットWindowsバージョンのIntel Threading Building Blocks(tbb.dll)に対するリンクのソースがないサードパーティのDLL(32ビットDirectShowフィルター)があります。
同じプロセスで自分のDLLでスレッドビルディングブロックを使用したい場合(たとえば、別の32ビットDirectShowフィルター)、このサードパーティのDLLの作成者が使用したのと同じバージョンのVisual Studioを使用する必要がありますか?
編集-バージョンに依存しない_mtライブラリが、このシナリオで使用するのにおそらく最適なライブラリであることに気づきました。サードパーティベンダーがこの_mtdll用にビルドしていない場合はどうなりますか?
私自身のスレッディングビルディングブロックのインストールでは、Visual Studioのバージョン(2005、2008、2010、および「MT」)ごとにtbb.dllのバージョンが異なることに気付きました(まだ何であるかはわかりません)。これの明らかな理由の1つは、異なるバージョンのtbb.dllが異なるバージョンのVisualStudioランタイムライブラリDLLに対してリンクしていることです。検査によってどのバージョンのtbb.dllが必要かを判断することは可能ですか、それとも使用されているコンパイラのバージョンを示すバイナリ内の文字列を探す必要がありますか(サードパーティのDLLはVisual Studioランタイムを静的にリンクしているようです)?
私が知る限り、tbb.dllはマニフェストを使用せず、バージョン管理を並べて使用し、コンパイラのバージョンごとに同じ名前が付けられています。最後の手段は、別のtbb.dllの名前を変更し、インポートライブラリをハックするか、名前を変更したdllを参照するようにインポートすることですが、実際にはこれを避けたいと思います。リンカーオプションを使用してインポートをリダイレクトするクリーンな方法はありますか?
これらのDLLは正常に動作するDirectShowフィルターであるため、VisualStudioランタイムまたはTBBオブジェクトをそれらの間で受け渡すことはありません。これは明らかに危険です。それらの相互作用は、標準のCOMDirectShow呼び出しを介した相互の呼び出しに制限されます。
c++ - TBB と自作のワークキュー
(スレッドビルディングブロック)が洗練されたエンジンを持っていると主張していることは知っTBB
ていますが、アルゴリズムの観点からは:
(Linux などで)N
作業スレッド (POSIX スレッド、N
コアの数) とミューテックスで同期されたタスクのキューを持つワークキューがあった場合、各作業スレッドはアイドル時にキューからタスクを取得し、同期も行います。TBB
素晴らしいC++
構文を除いて、他に何が提供できるでしょうか? コアへのタスクの貪欲な割り当てよりも優れたアルゴリズムはありません。
c++ - スタックを使用したタスクの共有と分割に使用するスレッドパラレルインターフェイスはどれですか?
分割可能なタスクを使用して作業を共有したいコードを作成することを計画しています。シリアルバージョンでは、ルートタスクで初期化されたスタックを使用します。スタックは、タスクを繰り返しポップすることによって空になります。その後、タスクが実行または分割され、サブタスクがスタックにプッシュバックされます。これを並行して実装するための最良の(最も効率的で簡単な)方法とインターフェース(tbb、openmpなど)は何ですか?このようなパラレルスタックは、スレッドパラレルインターフェイスによって明示的にサポートされていますか(またはスタックのより良い代替手段がありますか)?