問題タブ [embarrassingly-parallel]
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 - opencl 分岐とメモリ冗長性
グリッド内のアイテムを処理しています。アイテムのタイプに応じて、異なるタイプの計算/関数を実行する必要があります。しかし、同じことをしている作業項目間で分岐を行うのは非常に悪いことだと読んだことがあります。これを回避するために、グリッドをタイプごとにグリッドに分割できます (この特定のケースでは 2 つしか必要ありません)...
この場合、何が良いでしょうか。そこに分岐を残すか、2 つのグリッドをタイプごとに 1 つずつ作成しますか? これは、ブランチ内で何が起こるか (計算限界) とグリッドの大きさ (メモリ/レイテンシー限界) に依存することを理解しています。
これらの種類の決定に従うべきいくつかの基本ルールはありますか、それとも一般的にどちらが優れているかについてのコンセンサスはありますか?
編集: (空間) グリッドは、通常の空間グリッドのようにまばらではありませんが、最大約 500.000 の要素を保持する構造体 (構造体あたり約 200 バイト) の密な配列 (空の要素なし) です。
この配列を別のソースから入力し、そのソースを使用して三角形または線分を配置します。
次に、このグリッドを使用して、線分/線分または線分/三角形の衝突検出を行う必要があります。したがって、問題は、この場合、2 つの別個の配列 (引数のために 250.000 要素 x 200 バイトとします) を埋めて、ワークアイテムに線/線または線/三角形のみのバッチ計算を実行させる方が効率的かどうかです.. 500.000x200 バイトの大きなものを 1 つ作成し、各ワークアイテムに特定のタイプで実行する計算を決定させます。
python - マルチプロセッシング - 大きな入力データの読み取り - プログラムがハングする
ファイルから読み込まれた入力データに対して並列計算を実行したいと考えています。(ファイルは非常に大きくなる可能性があるため、これにはジェネレーターを使用します。)
特定の数のアイテムでは、コードは正常に実行されますが、このしきい値を超えるとプログラムがハングします (一部のワーカー プロセスが終了しません)。
助言がありますか?(これを python2.7、8 CPU で実行しています。5,000 行はまだ問題ありませんが、7,500 行は機能しません。)
まず、入力ファイルが必要です。bash で生成します。
次に、これを実行します。
main.py:
python - Python マルチプロセッシングを使用した途方もない並列タスクによる高速化の期待
私は恥ずかしいほど並列問題に Python の Multiprocessing パッケージを使用することを学んでいるので、自然数n以下の素数を決定するための直列バージョンと並列バージョンを作成しました。ブログ投稿とスタック オーバーフローの質問から読んだ内容に基づいて、次のコードを思いつきました。
シリアル
平行
n = 10000000に対して得られるものは次のとおりです (並列の場合、8 つのプロセスを要求します)。
それで、3倍強のスピードアップが得られるようです。ここに私の質問があります:
- 明らかに、これは直線的なスピードアップではありません。では、どれだけ改善できるでしょうか (または、現実的にどのようなスピードアップを期待すべきでしょうか)。
- アムダールの法則がこれに答えているように見えますが、プログラムのどの部分が厳密にシリアルであるかを判断する方法がわかりません。
どんな助けでも大歓迎です。
編集:ハイパースレッディングが可能な4つの物理コアがあります。
c++ - 並外れた並列コードの低パフォーマンス
私はこの非常に単純な並列コードを使用して、恥ずかしいほど並列であるopenmpを学習しています。ただし、予想される超線形または少なくとも線形のパフォーマンス向上は得られません。
Intel C++ コンパイラ xe 15.0 を使用し、288 x 288 行列の sgemm (行列乗算) を計算する Visual Studio では、コア = 1 で 350 マイクロ秒、コア = 4 で 1177 マイクロ秒が得られます。これは、シーケンシャル コードのように見えます。インテル® MKL プロパティを Parallel (シーケンシャルでもテスト済み) に設定し、言語設定を Generate Parallel Code (/Qopenmp) に設定しました。とにかくこれを改善するには?クアッドコアの haswell プロセッサで実行しています
python-2.7 - 並列化された For ループの反復ごとに異なる乱数のセットを生成する方法は?
この質問への回答を直接適用したために、次の問題が発生しました。最小限の作業例 (MWE) では、myscript
いくつかの乱数を生成し、それらに対していくつかの操作を実行し、最終的に出力をファイルに書き込む場所が定義内にあります。このコードが並列化されていない場合、正しく動作します。ただし、並列の場合 ( 2 コア マシンでテストしていて、一度に 2 つのスレッドがある場合)、4 回の反復を実行したい場合 ( boot
)、同じ出力が 2 回得られます (つまり、4 つの出力のうち、予想される 4 つではなく、2 つの異なる数字のみ)。これはどのように修正できますか?
MWE:
python - パンダ適用の並列化
パンダは初めてですが、すでに行単位の適用操作を並列化したいと思っています。これまでのところ、 pandas groupby の後に Parallelize が適用されることがわかりました。ただし、それはグループ化されたデータ フレームに対してのみ機能するようです。
私の使用例は異なります。休日のリストがあり、現在の行/日付について、この日の前後から次の休日までの日数を見つけたいと考えています。
これは、apply を介して呼び出す関数です。
どうすれば高速化できますか?
編集
私は pythons プールで少し実験しましたが、それは良いコードではなく、計算結果も得られませんでした。
parallel-processing - 「実行する最大ジョブ」は、リモート サーバーで GNU Parallel を使用するときに指定されたジョブの数と等しくありませんか?
PBS クラスターで GNU Parallel を使用して多くの小さなシリアル ジョブを実行しようとしています。複数の計算ノードを使用するつもりだったので、各計算ノードには 16 個のコアがあり、オプション -S $SERVERNAME を GNUParallel に渡しましたが、混乱するのはを使用してノードで開始されたジョブ-S $SERVERNAME
の数は、9 つ以上のジョブを生成するつもりだったときに指定したジョブの数と等しくありません。以下は私の観察です。
-S $SERVERNAME なしで GNUParallel をローカル ホストとして使用する場合、問題はありません。10 個のジョブを生成するつもりでしたが、GNUParallel は 10 個のジョブを開始しました。
を使用して GNUParallel を使用して 10 未満のジョブを生成して-S $SERVERNAME
も、問題はありません。
これが私を混乱させるものです.10以上のジョブ番号を使用しようとすると、生成されるジョブの数は常に必要な数より1つ少なくなります.ここでは10を生成したいのですが、開始したジョブは9つだけです:
「top」を使用して計算ノードのステータスを確認したところ、使用時に 9 個の Cpu しか使用されていませんseq 1 10
。問題が明確になったことを願っていますが、この問題の考えられる原因を誰かが指摘できますか? どんな提案でも大歓迎です。
どうもありがとうございました!