問題タブ [ppl]
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++ - IntelTBBとMicrosoftPPLの違いは何ですか?
クロスプラットフォームプロジェクトのタスクベースの並列処理で「遊び」を始めることを計画しています。インテルスレッディングビルディングブロックを使用したかったのです。私はWindowsとVisualStudioから始めています。
今のところプロトタイプを作成したいので、Windowsでのみ「再生」することを考えており、互換性のあるすべてのプラットフォームでライブラリを使用するのに十分な知識があります。
VS2010以降、Microsoftは、Intel TBBと(ほぼ)同じインターフェイスを持つ同様のライブラリであるParallelProcessingLibraryを提供していることを学びました。
TBBのチームブログを含むいくつかの情報源は、TBBを一緒に構築し、同じライブラリであると示唆しています。
ただし、2つのライブラリの間に小さな違いがあることがしばしば示唆されるため、実際には明示的ではありません。
それで、もしあれば、それらの違いは何ですか?最後の安定したITBBから直接開始する必要がありますか、それともプロトタイプでMicrosoft PPLを試して、クロスプラットフォームの「実際の」プロジェクトでITBBを使用するのはリスクが低いのでしょうか。
c++ - ppl、それを正しく使用する方法は?
次のコード:
次のようなランダムな出力を生成します: 0 1000 1468 204 3600 25 5898 7000 7456 1395
「結合可能」を使用する必要があると思いますが、それについて見つけたドキュメントはあまり良くありません。このコードを正しく動作させる方法を知っていますか? vett が 2 次元ベクトルの場合はどうなりますか?
並列コンピューティングを学びたいので、この新しい Microsoft ライブラリを学ぶ価値はありますか、それともより良い代替手段がありますか?
c++ - デバッグバージョンとリリースバージョンでの奇妙な実行時間
VS2010で並列パターンライブラリを使い始めましたが、アプリケーションは期待どおりの結果をもたらしますが、デバッグバージョンとリリースバージョンをベンチマークすると、次のようにリリースバージョンで奇妙な実行時間が発生します。デバッグバージョン: "シーケンシャルデュレーション:1014" "パラレルデュレーション:437 "リリースバージョン"シーケンシャルデュレーション:31 ""パラレルデュレーション:484 "
これは私のアプリケーションコードです
c++ - Microsoft並列パターンライブラリ(PPL)とOpenMP
PPLとOpenMPのパフォーマンスを比較したいのですが、Web上で詳細な調査を見つけることができません。PPLの経験者は少ないと思います。
Visual Studio 2010を使用してWindowsでソフトウェアを開発していますが、短期的には他の場所に移植したくありません。
移植性が問題ではなく、パフォーマンスだけが問題である場合、これら2つの方法についてどう思いますか?
c++ - concurrent_vector の安全性
operator [] は同時書き込みに対して安全ではないことが知られています:
concurrent_vector::operator[] 演算子
しかし、異なるスレッドが異なるベクトル位置に書き込むことを保証するとしたらどうなるでしょうか。このように(非常に単純化された例):
同時に安全ですか?「そうでない」場合、なぜですか?
ありがとう
c++ - 非同期アイランドGAアルゴリズムを編成するためにparallel_forとconcurrent_vectorを使用することは可能ですか?
リングトポロジーを備えた標準的な島の遺伝的アルゴリズムがあると仮定します。私はC++、PPL、MS VisualStudio2010を使用しています。
PPLライブラリのparallel_forを使用すると便利です。停滞フラグがオンになっているときに島が隣人から現在の最高の個人を取得する必要がある場合、どのプログラムプリミティブを使用する必要がありますか?parallel_forサイクルのファイナライズ後に停滞フラグの配列を確認したくないので、「空腹の」島にオンザフライでフィードしたいと思います。PPLにはこの目的のための手段がありますか?各島には、その隣の島へのポインターがあります。GetBestIndividual()メソッドをブロックするために、Evolve()メソッド内にある種のクリティカルセクションが必要です。Evolve()は並列で呼び出されます(島の場合はparallel_forサイクル)。
c++ - PPL task_groupは、作業をスケジュールし、蓄積されたリソースをクリーンアップします
基本的に達成したいのは、作業が利用可能になったときにtask_groupの新しい作業項目をスケジュールすることです。task_groupでは、run()メソッドがプロデューサーコンシューマーシナリオで呼び出されます。これにより、作業が必要なときにいつでも、task_groupで実行されるようにスケジュールされます。
task_groupは、(アプリを終了する前に)wait()メソッドを呼び出してリソースを解放する必要があります。キャンセルのサポートも必要なため、task_groupを使用しますが、wait()を呼び出す必要があるため、設計が複雑になります。実際には、タスクグループでwait()を呼び出すための追加のスレッドを使用する必要があるようです(wait()を1回呼び出した後、task_groupで新しい作業をスケジュールすることが合法かどうかはわかりません。 wait()を繰り返し実行してください)。
マイクロソフトのpplを使用してどのようにそれを行いますか?
MSDNのドキュメントを 編集すると、wait()を複数回呼び出すことができます。http: //msdn.microsoft.com/en-us/library/dd470481.aspx "task_groupオブジェクトでwaitを呼び出すと、オブジェクトがクリーンな状態にリセットされます。再利用されます。これには、task_groupオブジェクトがキャンセルされた場合も含まれます。」
残っているのは、別のアプローチを取ることができるかどうかだけです
c++ - PPL と並列メモリ割り当てによるスレッド ID
Microsoft PPL ライブラリと並列プログラミング全般について質問があります。FFTW を使用して、64 x 64 x 64 FFT と逆 FFT の大規模なセット (100,000) を実行しています。現在の実装では、並列 for ループを使用し、ループ内でストレージ配列を割り当てます。これらのケースでは、CPU 使用率が約 60 ~ 70% しか上がらないことに気付きました。(これは、私がテストした FFTW によって提供される組み込みのスレッド化された FFT よりも優れた使用率であることに注意してください)。fftw_malloc を使用しているため、完全な使用を妨げている過剰なロックが発生している可能性はありますか?
これに照らして、メイン処理ループの前に各スレッドにストレージ配列を事前に割り当てて、ループ自体の中でロックが不要になるようにすることをお勧めしますか? もしそうなら、MSFT PPL ライブラリでこれがどのように可能になるのでしょうか? 私は以前に OpenMP を使用していました。その場合、提供された関数を使用してスレッド ID を取得するのは簡単です。ただし、PPL ドキュメントで同様の関数を見たことがありません。
c++ - concurrent_vector.h の警告 C4189
プロジェクトで次の警告が表示されました (リリース モードとデバッグ モードの両方)。
somefile.h は私のファイルで、780 行目には次のコードがあります。
Vector3i は次のようなものです。
concurrent_vector.h の 1598 行付近のコードは次のとおりです (1598 行は単に '{' です)。
この理由は何でしょうか?この somefile.h が他のプロジェクトに含まれている場合、そのような警告は発行されません。