問題タブ [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++ - ファイルからの同時処理
次のコードを検討してください。
このコードを並列化し、可能な限り高速にしたいと考えています。
PPLを使用してそれを並列化する 1 つの方法は次のとおりです。
このアプローチの問題は、メモリに読み取られたのと同じスレッドでデータ (CPU キャッシュに収まる) を処理したい (データがキャッシュ内でホットである) ことですが、ここではそうではありません。ホットデータを使用する機会を無駄にしています。
これを改善する方法が2つありますが、どちらも実現できていません。
別のタスクで次の反復を開始します。
/li>メモリ マップされたファイルを使用し、ファイルの必要な領域をマップし、正しいオフセットでポインターから読み取るだけをシークするのではなく。を使用してデータ範囲を処理します
parallel_for_each
。ただし、メモリに読み込まれるタイミングとキャッシュに関する考慮事項に関して、メモリマップファイルのパフォーマンスへの影響を理解していません。ファイルは単純にシステムメモリにDMA:dされ、CPUを通過することはないため、キャッシュを考慮する必要さえないのではないでしょうか?
提案やコメントはありますか?
c++ - PPLparallel_forによって発生したc++キャッチエラー
私はpplによって起動されたエラーをキャッチするためにこのコードを書きました
例外が発生したのではないかと強く疑っていますが、エラーはキャッチされません(大きなメッセージがtry{}catch(...){}
キャッチされるstd::exception
と、明確なメッセージは表示されません。
pplコードで発生した例外をキャッチするための構文は正しいですか?
c++ - コンテキスト「use_current」でのタスク継続が機能しない
3日前からこれに対する答えを探してみました。それは、私が何か根本的に間違ったことをした (明らかな間違いがある) か、それが新しすぎて参照できないかのどちらかです。このような単純なケースが失敗する理由がわかりません。
次のコードは、Windows ストア アプリケーションで C++ の PPL タスク ライブラリを使用し、ループから抜け出すまでに 2 秒かかるファイル読み込み操作をシミュレートします (もちろん、これは最小限のコードで問題を説明するためのものであり、実際のループでは他のレンダリングを実行して、進行状況も表示します)。
継続コンテキストとして「use_current」を使用すると、コードの継続部分 (つまり、「fileLoaded = true」) が呼び出されることはありません。
「use_default」または「use_arbitrary」を使用し、「fileLoad」を「true」に適切に設定すると、同じコードが機能します。このコードは、Windows ストア C++ アプリ (Direct2D アプリなど) のどこにでも配置できますが、失敗します (「DirectXPage::DirectXPage」コンストラクター本体に配置しました。これがメイン UI スレッドであると予想されます)。私はひどく間違ったことをしましたか?
よろしくお願いします。:)
c++ - Microsoft PPL 軽量タスク スケジューラでバックオフを実装する方法は?
PPL Concurrency::TaskSchedulerを使用して、メディア パイプラインからサブスクライブしたクライアント (通常は GUI アプリ) にイベントをディスパッチします。
これらのイベントは、 Concurrency::TaskScheduler::ScheduleTask()に渡される C++ ラムダです。
ただし、負荷がかかると、パイプラインは、クライアントがそれらを消費できるよりも速い速度でイベントを生成できます。
スケジュールされたタスクの「キュー」が N より大きい場合、イベント ディスパッチャーがイベント (実際にはスケジュールされたタスク) をキューに入れないようにするために使用できる PPL 戦略はありますか? そうでない場合、どうすれば自分で転がすことができますか?
task - VC++ PPL、スケジューラを task_group に割り当てる
クラスがあるふりをします:
この task_group にスケジューラを割り当てるにはどうすればよいですか? コードの他の場所でも parallel_for を使用しているため、デフォルトのスケジューラは使用したくありません。
task_group には、時間に応じてすべてのコアまたはコアのサブセットを使用するように、スケジューラを介して設定された maxconcurrency のレベルがあります。アプリケーションは何時間も実行される可能性があるため、maxconcurrency を変更する必要があります。
PPL でこれを行う良い方法が見つかりません。.NET では、これは非常に簡単です。MaxDegreeOfParallelism を設定するだけです。
何か案は?
c++ - PPL タスクでの .then 構築の目的は何ですか?
PPL での .then 構築の目的は何ですか? どこでテストできますか? Visual Studio 2012 はまだサポートしていないようです (将来の CTP の可能性がありますか?)。また、標準の C++11 非同期ライブラリに同等のものはありますか?
winforms - VC++での「VS2010並列パターンライブラリ」の使用
vc ++ Windowsフォームアプリケーション(VS 2010)を作成しましたが、ppl.h(並列パターンライブラリ)をインクルードしようとすると、次のコンパイルエラーが発生しました。
エラー:/clrのコンパイル時に同時実行ランタイムはサポートされていません。c:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ include \ concrt.h 27 "
「VS2010並列パターンライブラリ」が提供するプログラムで「parallel_for」アルゴリズムを使用したい。
上記の問題を解決する方法と、Windowsフォームアプリケーション内で「並列パターンライブラリ」を使用する方法を教えてもらえますか?
c++ - 各ペアで同時に動作
私はいくつかのオブジェクトを持っています。各ペアを同時に処理する必要がありますが (すべてのペアではなく、任意のペアリング)、各オブジェクトはシリアルでのみ処理する必要があります。
これに対処できるアルゴリズムを説明するのに苦労していますが、できれば多数のロックを使用する必要はありません。Microsoft から PPL を入手したので、かなり高レベルの同時実行機能を自由に使用できます。
最後に、多くの場合、オブジェクトごとに非常に少数のペアリングを扱います。0 と 1 は特に一般的です。しかし、多対多の組み合わせは、私が対処しなければならない境界条件です。
そのようなアルゴリズムの提案はありますか?
c++ - その後遅滞なく実行する
C++11 には がないので、Microsoftライブラリからfuture.then
使い始めました。ほとんどの場合、うまく機能します。concurrency::task
PPL
ただし、現在、GPGPU を実行している状況にあるため、スケジューラで .then の継続をスケジュールするとPPL
、GPU がアイドル状態の場合に不要な遅延が発生します。
私の質問は、可能な回避策がconcurrency::task
ありconcurrency::task::then
、それらを直接実行できるかどうかです。
私の理解では、定期的にスケジュールされたタスクは、ほとんどの場合、キャッシュ効率の理由により、その継続をすぐに実行します。ただし、これは、明示的なスレッド (つまり、GPU スレッド) から を使用してスケジュールされたタスクには当てはまりませんconcurrency::task_completion_event
。
私がやっていることの例:
windows-runtime - WinRT C++/CX タスクがコンパイルされない
C++/CX を使用して WinRT コンポーネントを作成しようとしています。次のコードがありますが、コンパイルできません。それの何が問題なのですか?私が理解していることから、PPL タスクは、結果を伴うタスクである場合、透過的に IAsyncOperation に変換する必要があります。
エラーメッセージ