問題タブ [parallel-for]
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++ - concurrent_vector が parallel_for 内で機能しない ( PPL )
以下にサンプルの作業コードがあります ( parallel_for using Parallel Pattern Library ( ppl ) )。ここでの主な問題は、sqr < concurrent_vector > 格納された値が実行ごとに変化することですが、そうであってはなりません!
ランダム アクセスに < concurrent_vector > を使用しましたが、なぜ機能しないのですか?
c++ - CUDA のトリプル For ループ
CUDAでC++式の下に書くにはどうすればよいですか? 最初のループは簡単ですが、その後は?(起動カーネルを入れました)
カーネルを起動
C++ 3 ループ式
opencv - スレッド数が少ない TBB parallel_for
opencv 顔検出器を使用して多視点顔検出コードを作成しました。画像に対して 5 つの検出器 (さまざまなポーズ角度用にトレーニング済み) を実行し、それらの重みを使用して画像内の顔を検出しています。TBB parallel_for を使用してコードを並列化しましたが、パフォーマンスはわずか 1.7 倍向上しました。5 つの検出器を並行して実行するためのより良い方法はありますか?
16 コアのクラスターでコードを実行しています。スレッドの数 (私の場合は 5) が少なすぎて、完全なパワーを利用できないと思います。
助言がありますか?
ありがとう、
c++ - for ループを並列化してもパフォーマンスは向上しません
ベイヤー画像チャンネルを RGB に変換するアルゴリズムがあります。私の実装ではfor
、ベイヤー チャネルを反復処理し、ベイヤー インデックスから RGB インデックスを計算し、ベイヤー チャネルからそのピクセルの値を設定する単一のネストされたループがあります。ここで注目すべき主な点は、各ピクセルは他のピクセルとは独立して計算できる (以前の計算に依存しない) ため、このアルゴリズムは自然に並列化の候補になるということです。ただし、計算は、すべてのスレッドが同時にアクセスするが変更されないいくつかのプリセット配列に依存します。
ただし、メインfor
を MSと並列化しようとするとcuncurrency::parallel_for
、パフォーマンスが向上しませんでした。実際、4 コア CPU で実行されるサイズ 3264X2540 の入力の場合、非並列バージョンは ~34 ミリ秒で実行され、並列バージョンは ~69 ミリ秒で実行されました (10 回の実行の平均)。実際に操作が並列化されていることを確認しました (タスク用に 3 つの新しいスレッドが作成されました)。
Intel のコンパイラを使用するとtbb::parallel_for
、ほぼ正確な結果が得られました。比較のために、ループC#
も使用したこのアルゴリズムの実装から始めたところ、parallel_for
ほぼ X4 のパフォーマンス向上が見られました (C++
この特定のタスクC++
ではシングルコアでも高速だったので選択しました)。
私のコードがうまく並列化できない理由は何ですか?
私のコード:
c# - ループの並列描画
線の描画を高速化したい。並列 for ループが機能しないのはなぜですか? 何も描画しません。
また、それを高速化する他のアイデアも受け入れています。
増分 for ループのコードを編集しました。描画中に「タイプ 'System.AccessViolationException' の初回例外が SharpDX.Direct2D1.dll で発生しました」と表示されますが? livePoints は単純なリストです。
いくつかのコード:
ループの標準:
並列 for ループ:
c# - for ループを Task.Parallel.For に変換する
bool IsExistImage(int i)プロシージャがあります。画像を検出し、存在するかどうかに関係なく bool を返すプロシージャのタスク。
私は 100 ページ以上の PDF を持っており、それを分割してメソッドを介してファイル名のみを送信します。ファイル名は、実際にはメインの PDF ファイルのページ番号です。1,2,3,...,125,..のように
画像を検出した後、私のメソッドはページのリストを正しく保存します。そのために私はこのコードを使用しました:
このプロセスは 1 時間以上実行されます (明らかに isExistImage() メソッドの内部作業のためです)。オブジェクト/変数がメソッドスコープの外でグローバルではないことを保証できます。
そこで、時間を短縮するために、Task.Parallel For ループを使用しました。これが私がしたことです:
しかし、これは正しく機能していません。画像検出が正しい場合もあります。しかし、ほとんどの場合、それは間違っています。非並列 for ループを使用すると、常に正しい結果が得られます。
ここで何が問題なのか理解できません。ここで何を適用すればよいですか。私が見逃しているテクニックはありますか?
c++ - TBB parallel_for を OpenMP に置き換える
OpenMPparallel_for
を使用する Intel TBB ループの同等の代替品を考え出そうとしています。tbb::blocked_range
オンラインで調べてみると、他の人が似たようなことをしているという言及を見つけることができただけです。Open Cascade プロジェクトに提出されたパッチ。TBB ループはそのように見えます (ただし、tbb::blocked_range は使用しませんでした):
OpenMP に相当するものは次のとおりです。
置き換えようとしている TBB ループは次のとおりです。
クラスを使用DoStuff
して作業を実行します。
この参照に基づく私の理解では、TBB はブロックされた範囲をより小さなサブセットに分割し、各スレッドにループする範囲の 1 つを与えるということです。DoStuff
各スレッドは、多数の参照とポインタを持つ独自のクラスを取得するため、スレッドは基本的にこれらのリソースを共有しています。
OpenMP での同等の代替として私が思いついたものは次のとおりです。
私の制御の及ばない状況のため (これは +5 台のコンピューターにまたがるはるかに大規模なシステムの 1 つのコンポーネントにすぎません)、デバッガーを使用してコードをステップ実行して、何が起こっているかを正確に確認することは... ありそうにありません。私はリモート デバッグに取り組んでいますが、あまり有望ではないようです。私が確かに知っているのは、上記の OpenMP コードが何らかの形で TBB とは異なることを行っており、各インデックスに対して PerformWork を呼び出した後に期待される結果が得られないということだけです。
上記の情報を踏まえて、OpenMP コードと TBB コードが機能的に同等ではない理由について何か考えがある人はいますか?
c - C言語でスケジューリングを行うためのOpenMP Parallel
スレッド ID に基づいて、各スレッドが独自の変数セットを持つ、並列のスケジュールされた (例: 静的/動的/ガイド付き) for ループを実行したいと考えています。parallel プラグマ内で宣言された変数はプライベートであることはわかっていますが、for ループの反復ごとに変数を再宣言したくありません。
私の特定の状況では、一連の生成座標が円の内側または外側にあるときはいつでもカウントして、円周率を近似しています。各スレッドでこれらの座標を生成するために erand48(int[3] seed) を使用しています。各スレッドに「シード」の異なる値のセットを与えることで、近似に使用する数値の種類を増やすことができます。 (また、このシミュレーションの要件でもあります)。
これは、私がやろうとしていることを表現できる最高のものです。「this_result」、「tid」、「seed」の値にプライベート スコープを持たせたい。