問題タブ [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 の Threading Building Blocks を使用した経験はありますか?
Intel のThreading Building Blocks (TBB)オープン ソース ライブラリは非常に興味深いものです。このテーマに関するO'Reilly Bookさえありますが、多くの人がそれを使用しているとは聞いていません。Unix (Mac、Linux など) 環境でマルチレベルの並列アプリケーション (MPI + スレッド) に使用することに興味があります。なんといっても、私はハイ パフォーマンス コンピューティングや数値計算の種類のアプリケーションに興味があります。
TBBの経験がある人はいますか?うまくいきますか?かなり移植性がありますか (GCC やその他のコンパイラを含む)? このパラダイムは、あなたが作成したプログラムでうまく機能しますか? 調べる必要がある他のライブラリはありますか?
c++ - この C++ 実装は Atomic float に対して安全ですか?
編集:ここのコードにはまだいくつかのバグがあり、パフォーマンス部門では改善される可能性がありますが、これを修正しようとする代わりに、記録として、インテルのディスカッション グループに問題を持ち込んで、多くの素晴らしいフィードバックを得ました。すべてがうまくいけば、Atomic float の洗練されたバージョンが Intel の Threading Building Blocks の近い将来のリリースに含まれる予定です。
これは難しい問題です。超高速のグラフィックス パフォーマンスのためではなく、クラスのデータ メンバーとして日常的に使用するために、Atomic float が必要です。また、これらのクラスでロックを使用することによる代償を払いたくありません。それは、私のニーズに対して追加の利点を提供しないからです。
intel の tbb と私が見た他のアトミック ライブラリでは、整数型はサポートされていますが、浮動小数点はサポートされていません。それで私は続けて実装しましたが、うまくいきました...しかし、それが本当にうまくいくかどうかはわかりません。
これがある種のスレッド異端ではないかどうか、ここにいる人は誰でも知っていますか?
ありがとう!
編集: Greg Rogers が提案したように size_t を uint32_t に変更しました。
編集:いくつかの修正を加えて、全体のリストを追加しました。
その他の編集:私のマシンで 100 スレッドで 5.000.000 += 操作にロックされたフロートを使用すると、3.6 秒かかりますが、愚かな do-while を使用しても、同じ作業を行うには 0.2 秒かかります。したがって、30 倍を超えるパフォーマンスの向上は、その価値があることを意味します (これが問題です)。
さらに編集: Awgn が指摘したように、私のfetch_and_xxxx
パーツはすべて間違っていました。それを修正し、よくわからない API の部分を削除しました (テンプレート化されたメモリ モデル)。コードの繰り返しを避けるために、演算子 += に関して他の操作を実装しました
追加:演算子 *= と演算子 /= が追加されました。フロートはそれらがなければフロートにならないためです。これに気付いたというピーターチェンのコメントのおかげで
編集:コードの最新バージョンは次のとおりです(参照用に古いバージョンを残します)
c++ - C++ 並列化ライブラリ: OpenMP とスレッド ビルディング ブロックの比較
マルチコア CPU を利用できるように、カスタム グラフィック エンジンを改造します。より正確には、ループを並列化するためのライブラリを探しています。
OpenMP と Intel の Thread Building Blocks の両方が、この仕事に非常に適しているように思えます。また、どちらも Visual Studio の C++ コンパイラと他のほとんどの一般的なコンパイラでサポートされています。また、どちらのライブラリも非常に使いやすいようです。
では、どちらを選択すればよいでしょうか。両方のライブラリを試した人はいますか?どちらかのライブラリを使用することの長所と短所を教えてください。また、最終的にどんな仕事に就きましたか?
ありがとう、
エイドリアン
c++ - TBB に静的にリンクする方法は?
インテルの TBB ライブラリをアプリケーションに静的にリンクするにはどうすればよいですか? スケジューラーの不公平な負荷分散などの注意点はすべて知っていますが、スケジューラーは必要なく、コンテナーだけが必要なので、問題ありません。
とにかく、文書化されていませんが、これを行うことができることは知っていますが、今はそれを行う方法を見つけることができないようです(どこかで見たことはありますが)。
それで、誰かが知っているか、手がかりを持っていますか?
ありがとう
c++ - インテル TBB のスケーラブルなアロケーターはどのように機能しますか?
tbb::scalable_allocator
Intel Threading Building Blocks は内部で実際に何をしますか?
確かに効果はあります。シングルstd::vector<T>
をstd::vector<T,tbb::scalable_allocator<T> >
. 一方、別のアプリでは、すでに大量のメモリ消費量が2倍になり、物事をスワップシティに送信するのを見ました。
Intel 自身のドキュメントには、多くの情報はありません (たとえば、この FAQの最後にある短いセクション)。自分でコードを掘り下げる前に、どのようなトリックを使用しているか教えてもらえますか?
更新: TBB 3.0 を初めて使用したところ、scale_allocator による最高のスピードアップが見られました。シングルvector<int>
を a に変更するとvector<int,scalable_allocator<int> >
、実行時間が 85 秒から 35 秒に短縮されました (Debian Lenny、Core2、TBB 3.0 のテスト)。
c++ - Intel の TBB コンテナーのデバッグ
最近、Intel の TBB との連携を開始しましたが、コンテナーをデバッグするときに要素とそのデータを実際に見ることができないことがわかりました。
これを有効にするフラグ設定、プラグイン、またはトリッキーな方法はありますか? (たぶん、Visual が動作するためのスクリプト スニピット)
c++ - QtベースのCDリッパー用のスレッディングビルディングブロック(TBB)?
私はC++とQtでCDリッパーアプリケーションを構築しています。複数のトラックを同時にエンコードできるように、アプリケーションを並列化したいと思います。そのため、トラックのエンコードが「タスク」になるようにアプリケーションを構成し、これらのタスクのいくつかを同時に実行するメカニズムに取り組んでいます。もちろん、スレッドを使用してこれを実現し、独自のタスクキューまたはワークマネージャーを作成することもできますが、IntelのThreading Building Blocks(TBB)の方がこの作業に適したツールになると思いました。ただし、いくつか質問があります。
- WAVファイルをFLAC、Ogg Vorbis、またはMp3ファイルにエンコードすることは、tbb :: taskとしてうまく機能するものですか?チュートリアルドキュメントには、「スレッドが頻繁にブロックされると、タスクスケジューラを使用するとパフォーマンスが低下する」と記載されています。エンコードタスクがミューテックスを頻繁にブロックすることはないと思いますが、エンコードするためにディスクからWAVデータを読み取る必要があるため、ディスクに比較的頻繁にアクセスする必要があります。このレベルのディスクアクティビティは、チュートリアルで説明されている意味で問題がありますか?
- TBBはQtでうまく機能しますか?Qtスレッドを使用する場合、スレッド間で透過的にQtのシグナル/スロットメカニズムを使用できます。Qtスレッドの代わりにtbb::tasksを使用していた場合も、同じことが言えますか?他に「落とし穴」はありますか?
あなたが提供できる洞察に感謝します。
performance - Visual Studio 2008 SP1はランタイムのバグをもたらしましたか、それとも私は夢中ですか?
私は、最新の(ベータ版ではない)Visual Studio 2008 SP1で何が起こっているのかを理解しようと、頭を悩ませてきました。
OpenMPで構築された私のアプリは、デバッガーで非常に遅く実行され、CPU使用率が100%になります。それらがデバッガーの外部で実行される場合、それは単にゆっくり実行されます(リリースビルドの場合)。
Intel Thread Building Blocksライブラリを使用してビルドされたアプリ、または独自のスレッドチームの実装は、デバッガーの外部で実行する場合(リリースビルドの場合)よりもデバッガーでの実行が遅くなります。
SP1がインストールされていない他の開発マシンに行くと、状況が異なります。デバッガー内または外部で実行しても、プログラムのパフォーマンスには影響しません。OpenMPは、スレッドビルディングブロックまたは私自身のスレッドチームコード(この問題を理解するために憤慨して急いで書かれた)と同様に、私のアプリケーションを加速します。
これは、アプリにまったく変更を加えずに、デバッガーSP1と通常のVisualStudioの内部または外部で実行するだけです。
私はグーグルでこれについて何も見つけられなかったので、私は首を突き出して、誰かがこれが彼らに起こっていることを認識するかもしれないことを期待して何かを言っています。それか、私は物事を見ています。
c++ - AMDマルチコアプログラミング
追加のコアを利用して、多くの計算を実行する必要があり、計算が互いに独立しているコードの部分を実行するアプリケーション(C ++)の作成を開始したいと思います。私は次のプロセッサを使用しています:x64ファミリ15モデル104ステッピング2 Authentic AMD〜1900 Mhzは、Windows Vista HomePremium32ビットおよびOpenSUSE11.064ビットで実行されています。
Intelプラットフォームでは、次のAPI Intel TBB、OpenMPを使用しました。それらはAMDで動作し、AMDには同様のAPIがありますか?あなたの経験は何ですか?