問題タブ [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.
openmp - OpenMPオーバーヘッド
OpenMPとIntelTBBを使用して、画像の畳み込みとlu分解を並列化しました。1〜8コアでテストしています。しかし、たとえばset_num_threads(1)とtask_scheduler_init InitTBB(1)をそれぞれ使用して1つのスレッドを指定することにより、OPenMPとTBBの1つのコアで試してみると、TBBのパフォーマンスは、TBBのオーバーヘッドのためにシーケンシャルコードと比較して若干の低下を示しますが、驚くべきことに、OpenMPはシングルコアでオーバーヘッドを示さず、シーケンシャルコードとまったく同じように動作します(Intel O3最適化レベルを使用)。OpenMPループの静的スケジューリングを使用しています。それは現実的ですか、それとも私は何か間違いをしていますか?
c++ - C/C++ コードと LIBRARY の混合
私はネイティブ C++ プログラマーであり、低レベル C について何も知りませんでした。状況によっては、C を広範囲に使用する必要がありました。その結果、多くの C の習慣を身につけることができました。OpenCV、TBB、OpenCL、および OpenGL を使用してコンピューター ビジョン プロジェクトを開発しようとしていることを知っています。
問題は、OpenCL がネイティブ C であり、TBB であるということです。TBB について 100% 確信があるわけではありません。誰もが知っているように、C++ は産業用言語であるため、C++ での開発は (少なくとも私にとっては) とても楽しいものですが、メインの調査を行った後は、どの言語を使用する必要がありますか? 私は、C/C++ コードのミキシングにもっと関心があることを知っています…。
だから私の質問はこれです.Cですべてを開発する必要がありますか(維持、拡張、開発が難しい)、またはC ++のままにする必要があります。そして、私がC++を使用している場合、誰かが私に良い方法、C/C++を混合する戦略(本、チュートリアル)を教えてくれますか?
前もって感謝します.....
android - Android および iOS 用インテル TBB
Android および iOS 用のマルチスレッド ライブラリがあるかどうか疑問に思っています。
また、Intel の TBB を Android と iOS で実行するためのハックはありますか??
c++ - TBB 同時ハッシュ マップ
tbb の同時ハッシュ マップを実装して、そのパフォーマンスを他の一連の同時ハッシュ テーブルと比較しています。
しかし、それから得られるパフォーマンスは恐ろしいものです。他の同時ハッシュテーブルと比較してそれほど遅いとは信じられません
これが私の実装です:
私の実装に何か問題が見られるか、パフォーマンスが低下する理由を知っている人はいますか? シングル スレッド環境で 200,000 要素を挿入するには、30 分以上かかります。概観すると、他のほぼすべてのテーブルがこのテストを 5 分未満で実行します。
ここに私のビルドコードがあります:
更新: ハッシュ テーブルを 100,000 ではなく 1000 に事前設定するようにテスト コードを調整しました。再度実行すると、tbb は 92 オペレーション/秒を実行しますが、別の実装では 89431 オペレーション/秒を実行します。(64スレッド環境)…なんか言い方がおかしい…。
追加情報: コンピューターは、6 GB の RAM と 6 コアを搭載した HP Z600 ワークステーションです。
相互配置に注意してください: http://software.intel.com/en-us/forums/showthread.php?t=86119
c++ - IntelTBBとMicrosoftPPLの違いは何ですか?
クロスプラットフォームプロジェクトのタスクベースの並列処理で「遊び」を始めることを計画しています。インテルスレッディングビルディングブロックを使用したかったのです。私はWindowsとVisualStudioから始めています。
今のところプロトタイプを作成したいので、Windowsでのみ「再生」することを考えており、互換性のあるすべてのプラットフォームでライブラリを使用するのに十分な知識があります。
VS2010以降、Microsoftは、Intel TBBと(ほぼ)同じインターフェイスを持つ同様のライブラリであるParallelProcessingLibraryを提供していることを学びました。
TBBのチームブログを含むいくつかの情報源は、TBBを一緒に構築し、同じライブラリであると示唆しています。
ただし、2つのライブラリの間に小さな違いがあることがしばしば示唆されるため、実際には明示的ではありません。
それで、もしあれば、それらの違いは何ですか?最後の安定したITBBから直接開始する必要がありますか、それともプロトタイプでMicrosoft PPLを試して、クロスプラットフォームの「実際の」プロジェクトでITBBを使用するのはリスクが低いのでしょうか。
c++ - TBBの自動リンクを無効にする方法
VSプロジェクトをデバッグとしてビルドすると、常にtbb_debug.lib(tbb_debug.dllとリンク)に自動リンクされます。これをオーバーライドして、デバッグビルドでもtbb.libをリンクさせる方法はありますか?
c++ - これを設計するためにミューテックスまたは条件変数を使用する方法(C++)?
私は並列プログラミングについてはまったく新しいです。現在、問題があり、TBB で解決しようとしています。
問題を単純化するために、複数の人 (タスク) がボールを拾い、ボールの数字のハッシュ値に従ってコンテナー (concurrent_vector) に入れると想像できます。ロスレスであることを確認する必要があるためです。ボールはリンク リストとして表されます (これが、concurrent_hashmap の代わりに concurrent_vector を使用する理由です。ランダム アクセスが必要です)。コンテナがほぼ満杯の場合(判定には閾値と条件があります)。1人で今の容器から大きな容器に玉を全部入れていきます。正確を期すために、彼が他の容器にボールを移動するとき、他のすべての人はそれ以上ボールを追加するのをやめて、彼が終わるまで待つべきです. ボールを動かすには時間がかかるため、他のすべての人が現在のタスクを停止して、ボールを動かすのを手伝う方がよいでしょう。より効率的に設計するにはどうすればよいですか?mutex、spin_mutex、または条件変数を使用する必要がありますか? 現在、concurrent_vector を使用しているため、コンテナーの内容の変更は並行して行われます。移動手順のためにベクトル全体をロックする必要がありますか? また、TBB ミューテックスについて質問があります。再入場禁止ってどういうこと?
c++ - openmp を使用した TBB concurrent_vector
openmp で TBB の concurrent_vector を使用できますか?
同時更新は許可されますか?
c++ - tbb:最初の要素を並列検索
私はこの問題を抱えています:
- 特定の条件が当てはまるリストの最初の要素を見つけます。
残念ながら、リストは非常に長く(100.000要素)、各要素の条件の評価には、1つのスレッドを使用して合計で約30秒かかります。
この問題をきれいに並列化する方法はありますか?すべてのtbbパターンを調べましたが、適切なものが見つかりませんでした。
更新:パフォーマンス上の理由から、アイテムが見つかったらできるだけ早く停止し、リストの残りの処理を停止したいと思います。だから私は使用できないと信じていparallel_while
ますparallel_do
。
c++ - スタックを使用しないTBBtask_groups
C++でポストオーダーツリートラバーサルを実行したいと思います。ツリーが非常に深くなる可能性があるため、再帰を使用できません(スタックを使い果たします)。代わりに、std::stack<...>
すべてをヒープに配置するを作成し、関数呼び出しではなく、whileループでツリーをトラバースします。これはうまくいきます。
ここで、TBBを使用してプロセス全体を並列化したいと思います。私はtask_group
すべてのノードでを作成しfunctor
、その子のそれぞれで同じものを実行することを考えていました。しかし、これは以前と同じツリーの深さの問題にfunctor
遭遇することになります。最も深いパスの各ノードでを実行すると、すべてがなくなるまでスタックから何かが失われます。
この問題を解決する方法はありますか?それとも私はすべてを想像していますか?task_group::wait()
この問題を回避 する魔法が背後にありますか?