問題タブ [parallelism-amdahl]
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.
python - pathos: 並列処理オプション - 誰かが違いを説明できますか?
Python(ubuntu)で並列プロセスを実行しようとしています。
マルチプロセッシングを使い始めたところ、単純な例ではうまくいきました。
その後、ピクルエラーが発生したため、パトスに切り替えました。さまざまなオプションに少し混乱したので、非常に単純なベンチマーク コードを作成しました。
約
- プレーン シリアル コードで 0.001 秒、パラレルなし、
-multiprocessing
オプションで0.100 秒、 - で 0.100 秒、 -
で 4.470
秒pathos.multiprocessing
、
- でエラーpathos.pools
AssertionError
pathos.parallel
これらのさまざまなオプションの使用方法をhttp://trac.mystic.cacr.caltech.edu/project/pathos/browser/pathos/examples.htmlからコピーしました
このような単純な例では、並列処理は単純なシリアル コードよりも長くなることがわかります。私が理解していないのは、パトスの相対的なパフォーマンスです。
ディスカッションをチェックしましたがpathos.pools
、なぜそんなに長くなるのか、なぜエラーが発生するのか理解できませんでした (最後のオプションのパフォーマンスがどうなるかわかりません)。
私も単純な二乗関数を試してみましたが、そのためにpathos.multiprocessing
はよりもはるかに長いですmultiprocessing
誰かがこれらのさまざまなオプションの違いを説明できますか?
さらに、pathos.multiprocessing
centOS を実行しているリモート コンピューターでオプションを実行しましたが、パフォーマンスは の約10 倍悪くなりmultiprocessing
ました。
コンピューターをレンタルしている会社によると、自宅のコンピューターと同じように機能するはずです。マシンの詳細がわからないと情報を提供するのは難しいかもしれませんが、それがどこから来たのかについてのアイデアがあれば、それは役に立ちます.
python - Pythonでシリアル関数内でパラレル関数を実行するには?
多分これは本当に簡単ですが、これを理解するのに少し問題があります。
私が抱えている課題は、親関数内から子並列関数を実行することです。その親関数は、子の並列関数呼び出しの結果を待っている間に 1 回だけ実行する必要があります。
私のジレンマを示す小さな例を書きました。
doInParallel
との間を切り替えるTrue
とFalse
、問題が表示されます。1回だけ実行して実行する場合childFunctionSerial()
。motherFunction()
しかし、 を使用して実行すると、childFunctionParallel
がmotherFunction()
複数回実行されます。どちらも同じ結果になりますが、私が抱えている問題は、motherFunction()
一度だけ実行する必要があることです。
2 つの質問:
1.
マザー関数を 1 回実行し、その
内部から、同じマザー関数の複数のインスタンスを実行せずに並列ジョブを開始するように、プログラムを再構築する方法は?
2.jobToDoById()
に加えて に2 番目のパラメータを渡すにはどうすればよいid
ですか?
python - 重要な再コーディング: プログラムを高速化するには? Cython、numba、マルチプロセッシング、numpy?
私は次のことを行うプログラム (いくつかのペア取引戦略) を持っています (または実際に取り組んでいます):
- postgres データベースにある大規模なデータ セット (財務データ: 100 株までの日時インデックスと株価) のサブセットを取得します。
- データを消去し (NaN が 30% を超える銘柄をドロップ)、リターンとインデックスを計算します (各銘柄の最初の観察に関連する)。
- 株式ペアのすべての組み合わせを見つけて、相関関係を計算します (実際にはそれに似た尺度ですが、ここでも重要です)
- 相関が最も高いペアを最低にランク付けするか、相関 > 定義されたしきい値、つまり 0.9 を持つペアのみを選択します。
- 両方の方法で共和分についてこれらのペアのそれぞれをチェックしてください! テスト値に従ってランク付けします
- 上位 n 個、つまり 10 個のペアを選択して取引し、移動平均と標準偏差に基づいてシグナルを計算します。
- 「サンプル外」ウィンドウを取得し、株を取引する
- 日誌に毎日の帰省(つまり 5 日間)を記録する
- いくつかの統計を計算する
これらの 9 つの手順の後、最初からやり直して、別のトレーニング ウィンドウを取得し、分析を実行します...
私のアプローチは次のようになります - より良いものを見つけたら修正してください:
1. プログラムからできるだけ多くの関数を抽出する
2. ステップ 1-9 を複数のトレーニング ウィンドウとトレーディング ウィンドウでループする
そして私の結果の質問(ここフォーラムの多くのスレッドに触発され、つまり、Pythonコードをより高速に実行する方法
- コードのどの部分を並行して実行できるかを特定するにはどうすればよいですか?
- どういうわけか、それは私にはまったく些細なことのように思えます。マルチプロセッシングを使用できるように、コードを「書き直す」ために適用する手法は何ですか?
- また、常に明らかであるとは限りません: ループを関数として書き換えます。常に注目すべき特定の角度はありますか?
numba.jit()
" " すべての関数に意味がありますか?- データのすべての形式を に変更する必要があります
float64
か? どのような不利益が発生する可能性がありますか?(現時点では、それらは「標準」の数値です) - ループをいつベクトル化できるかを確認できるチェックリストはありますか?
多くの - かなり概念的な - 質問をお詫び申し上げますが、上記の「痛み」のポイントをすべて理解できれば、「論理的」理解が本当に向上し、新しい Python ジョイナーにとっても非常に有益になると思います。
parallel-processing - OpenMP - ランダムな実行時間 - 実行時間の変動が非常に大きいのはなぜですか?
いくつかの並列プログラミングの概念を実装する方法を学ぶために、OpenMP に関するTim Mattsonの講義に従っています。
3x10^8ステップを使用してPIの値を計算する並列プログラムの実行時の動作を観察しようとしていました。
ここにコードがあります、
現在、デュアルコアマシンで実行されているUbuntu 14.04 LTSを使用していました。omp_get_num_procs()
返された2への呼び出し。実行時間は、1.31 秒から 4.46 秒までの範囲で、完全にランダムのようなものでした。シリアルプログラムは、ほとんど常に 2.31 秒かかっていました。
1、2、3、4、最大10スレッドを作成してみました。実行時間はすべてのケースで大きく異なりますが、スレッド数が多いほど平均は短くなります。私は他のアプリケーションを実行していませんでした。
実行時間があまりにも大きく変動した理由を誰か説明できますか?
実行時間を正確に計算する方法は? 講師は、一貫しているように見える彼のコンピューターの実行時間を与えました。また、彼はデュアル コア プロセッサも使用していました。