問題タブ [parallel-extensions]
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.
parallel-processing - これは PLINQ のバグですか?
PLINQ 出力が順次処理や Parallel.For ループと異なる理由
10,000,000 個の数値の平方根の合計を追加したい.. 3 つのケースのコードは次のとおりです。
シーケンシャル for ループ:
これの出力は次のとおりです: 21081852648.717
Parallel.For ループを使用するようになりました:
これの出力は次のとおりです: 21081852648.7199
PLINQ を使用中
これの出力は次のとおりです: 21081852648.72
PLINQ 出力と Parallel.For および Sequential for ループに違いがあるのはなぜですか?
list - F# のリストの Task.WaitAll
F# を使用して並列プログラミングを行っています。固定数の要素、たとえば 2 つの要素 a1、a2 および関数 f を使用すると、次のように実行できます。
要素のリストでどうやって同じことができるのだろうか:
Visual Studio は、Task.WaitAll が Task< T > リストをパラメーターとして受け入れることができなかったことを検出します。Task.WaitAll は Task [] を引数として持つことができますが、次の計算のために Result を取得する必要があるため意味がありません。
c# - 複数の限られた数のスレッドを使用してアイテムのリストを処理する
基本的に、アイテムのリストを一度に 1 つずつではなく、複数のスレッドで処理したいと考えています。一度に実行できるスレッド数を制限したい。このアプローチは理にかなっていますか?スレッド数にグローバル変数を使用することが唯一のオプションですか? (以下の疑似コード)
c# - IO バウンド操作に ThreadPools または Task Parallel Library を使用する必要がありますか?
アグリゲーターのような私のプロジェクトの 1 つで、Web からのフィードやポッドキャストなどを解析しています。
シーケンシャル アプローチを使用すると、多数のリソースがあるため、それらすべてを処理するにはかなりの時間がかかります (ネットワークの問題や同様のもののため)。
したがって、同時実行性を実装したいのですが、基本的に ThreadPools を使用してワーカー スレッドを処理するか、TPL に依存してソートするかを決定できませんでした。
ThreadPools は確かにワーカー スレッドを使用してジョブを処理し、期待どおりの結果が得られます (マルチコア CPU 環境では、他のコアも使用されます)。
ただ、TPLもおすすめの方法なので検討したいのですが、ちょっと気になります。まず第一に、TPL は ThreadPools を使用していますが、意思決定の層が追加されていることを知っています。私は主にシングルコア環境が存在する状況を懸念しています。私が間違っていなければ、TPL は最初に使用可能な CPU コアの数に等しい数のワーカー スレッドから始まります。私は、TPL が私の IO バウンド ケースのシーケンシャル アプローチと同様の結果をもたらすことを恐れています。
したがって、IO バウンド操作 (私の場合は Web からリソースを読み取る) の場合、ThreadPools を使用して物事を制御するのが最善でしょうか、それとも単に TPL に頼るほうがよいのでしょうか? TPL は IO バウンドのシナリオでも使用できますか?
更新: 私の主な懸念は、シングルコア CPU環境で TPL がシーケンシャル アプローチのように動作するか、それとも同時実行性を提供するかということです。私はすでにParallel Programming with Microsoft .NETを読んでいるので、その本を読んでいますが、これに対する正確な答えを見つけることができませんでした。
注: これは私の以前の質問の言い換えです [ Is it possible to use thread-concurrency and parallelism together? ] これはかなり間違った言い回しでした。
c# - 並列拡張
ファイルのコピー、ファイルシステム内でのファイルの圧縮と移動、バックアップサーバーへのコピーなど、IO操作が多いアプリケーションがあります。
私はこのプログラムをシングルスレッドとしてビルドします。それは2分で実行されます。
このプログラムの別のバージョンをParallel拡張機能で作成し、Taskを使用して作成しました。これもほぼ2分で実行されます。
つまり、IOが重いため、Parallelsを使用してもパフォーマンスが向上することはありませんでした。
アプリケーションをブレードサーバーにデプロイした場合、同じ結果が得られますか?
ブレードサーバーは、ワークステーションよりも高速/マルチチャネルでIOを処理しますか?
ParallelsをIOバウンドアプリケーションで使用するメリットはありませんか?
linq - LINQオペレーターはまったくブロックしますか?
VS2010 Concurrency Profilerからの出力を見ていて、いくつかのLINQオペレーターの周りでいくつかのスレッド競合が発生していることに気付きました。競合を引き起こしているステートメントは次のとおりです。
LINQオペレーターはブロックしますか?Parallel.ForEachの一部として実行されているタスクでそれらを使用する場合はもっと注意する必要がありますか?
c++ - __gnu_parallel::accumulate での予期しないセグメンテーション違反
これは本当に私を混乱させます。誰かが私を助けてくれれば幸いです。
(編集:それはテンプレート化された問題だと思った、私はこれを間違えた)
#include <parallel/numeric>
次のクラスの複数のコピーを gnu の並列化された累積アルゴリズム (に格納)で追加したい
クラスは意図的にあまり機能しませんが、これはスレッドの衝突の問題ではないと思いますか?
私はそれを実行します
これは本当に私を混乱させます - 私は何が問題なのか分かりません。私はg ++ 4.4.5を使用してコンパイルしていますg++ gnu_parallel.cpp -g -fopenmp
編集:
これが機能することに注意してください:(1000ではなく999要素)
バックトレースは次のとおりです。
c# - OCRアプリケーションでのC#並列タスクの使用?
スキャンした画像を含むディレクトリを入力として受け取る Windows サービス アプリケーションを構築しています。私のアプリケーションは、すべての画像を反復処理し、すべての画像に対して OCR 操作を実行して、バーコード、請求書番号、および顧客番号を取得します。
背景情報:
- アプリケーションによって実行されるタスクはかなり CPU を集中的に使用します
- 処理する画像が多数あり、スキャンした画像ファイルが大きい (~2MB)
- アプリケーションは、16 GB の RAM を搭載した 8 コア サーバーで実行されます。
私の質問:
ファイル システム上のイメージを処理しているため、.NET Parallel Tasks を使用するようにアプリケーションを変更した場合に、実際に違いが生じるかどうかはわかりません。
誰でもこれについてアドバイスをもらえますか?
どうもありがとう!
c# - C#と並列拡張機能を使用して順次タスクを並列化する方法は?
順番に呼び出される次のメソッドがあります。
- プライベートStringBuilderReadPDF();
- プライベートStringBuilderCleanText(StringBuilder sb);
- private void ParseText();
ParseTextは、CleanTextを呼び出すReadPDFを呼び出します。
私が解析しているPDFには15MBのテキストがあり、通常のCore2Duoコンピューターを使用してファイルからすべてのデータを抽出するのに10分かかります。
これらのタスクを並列化するにはどうすればよいですか?
編集:明確にするために、PDFを読むのにかかる時間はごくわずかです。問題は、抽出されたテキストの解析、より具体的にはCleanTextフェーズにあります。並列化する必要がある理由は、1つのページのクリーンアップは瞬時に行われますが、2k以上のページのクリーンアップには長い時間がかかるためです。
c# - 制御されたサイズのバッチ挿入を行うためのデータのスレッドセーフ バッファ
データベースに保存する必要があるデータを生成するシミュレーションがあります。
シミュレーションでは大量のデータが生成されるため、最初にデータを生成してからデータベースに保存するのは現実的ではなく (最大 1 GB のデータ)、データベースに 1 つずつ保存するのも意味がありません。 (実用的であるには小さすぎるトランザクション)。それらを制御されたサイズのバッチ挿入としてデータベースに挿入したい(1回のコミットで100など)。
ただし、並列コンピューティングに関する私の知識は理論的なものではないと思います。私はこれを思いつきました(ご覧のとおり、非常に欠陥があります):
ご覧のとおり、キューを使用してバッファーを作成し、コミットするタイミングを手動で決定しています。ただし、これは私の問題に対する解決策としてはあまり効果的ではないと強く感じています。まず、ロックを正しく行っているかどうかわかりません。第二に、これが完全にスレッドセーフであるかどうか(またはまったく)もわかりません。
ちょっと見て、どうすればいいのかコメントしてもらえますか?または、これを行うための完全に優れた方法がある場合 (ある種の生産者と消費者の手法または何かを使用) ?
感謝と最高の願い、D.