問題タブ [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.
assembly - 特定のスピードアップを達成するために必要なプロセッサの数は?
簡単に言えば、プログラムは 15% が順次部分で実行され、85% がその並列部分で実行されます。
無限の数のプロセッサで最大のスピードアップをどのように把握できますか?
また、たとえば、プログラムを最大速度の 80% まで高速化するには、いくつのプロセッサが必要かをどのように計算できますか?
アムダールの法則を使用。インターネットやグーグルなどを調べてみましたが、この単純な問題を解決するのに役立つものは何も見つかりませんでした!
c++ - アルファベータはアムダールの法則を「破る」?
追加のアルファ ベータ プルーニング実装を備えた従来のミニマックス問題ソルバーがあります。
次の方法でアルゴリズムを並列化しました。
- 使用可能なスレッドよりも多くのノードが得られるまで、反復的な深化を行います
- N スレッドのバッチで、スレッドごとに 1 つのミニマックスを実行します。したがって、シリアル検索から深さ 2 で 9 つの可能な移動を取得した場合、最初に 4 つのスレッドを開始し、次に別の 4 つ、最後に 1 つを開始します。それぞれが独自のパラメーターを使用して深さ 2 から開始します。
4 スレッドのスピードアップ S=T(シリアル)/T(パラレル) は 4.77 であることが判明したため、基本的にここでアムダールの法則を破っています。
実装が何らかの形で壊れていないと言うなら、ここでアルファベータの剪定が魔法のように働いているのではないでしょうか? いくつかの検索を並行して開始するため、より多くの剪定が行われ、より早く? それは私の理論ですが、誰かがこれをより詳細に確認できれば幸いです。
明確にするために:
アルファベータ実装のない Minimax は、基本的にツリー全体の深さ優先検索を最大深さまで実行します。alpha-beta でも同じことを行っていますが、いずれにせよ悪い結果につながるいくつかの枝を剪定します。
編集: コードをさらに調べた後、コードの 1 行にバグがあり、プログラムが「チート」していくつかの動きに従わなくなりました。実際のスピードアップ係数は現在 3.6 です。皆さんの時間を無駄にして申し訳ありません.. 今日のコンピューティングにはブレークスルーがありません。:/
performance - アムダールの法則を利用した実行時間の高速化
私は自分の課題の 1 つでこの問題を与えられました。高速化、実行時間などのプロセスの原則を理解しています。しかし、この質問は不完全だと感じています。それは本当ですか、それとも解決できますか?もしそうなら、あなたは説明してもらえますか。
プログラムは、2GHz のクロック レートで動作するマシンの元のバージョンで実行されます。このプログラムには 450 マイクロ秒の CPU 時間がかかります。プログラム内のコードの 80% に影響するマシンに改善が加えられています。アムダールの法則に基づくと、この改善により、プログラムの実行時間が N% 高速化されます。N の値は? 答えを小数点以下 2 桁まで表してください。
parallelism-amdahl - アムダールの法則と時間を使用してプロセッサの量を計算しますか?
355 秒を消費するシリアル部分と 645 秒を使用する並列部分を持つプログラム T があるとします。
プログラム T の並列実行時間をシリアル実行時間の 51% 以下にするために必要なプロセッサの数を調べるにはどうすればよいですか?
java - マルチスレッド プログラミングで予期しない結果
マルチスレッド Java プログラムで困っています。プログラムは、マルチスレッドを使用した整数の配列の分割された合計と、スライスの合計から構成されます。問題は、スレッドの数を増やしても計算時間が減らないことです(スレッドの数に制限があり、それ以降は計算時間が少ないスレッドよりも遅くなることがわかっています)。その制限数のスレッドの前に実行時間が短縮されることを期待しています (並列実行の利点)。run メソッドで変数 fake を使用して、時間を「読み取り可能」にします。
parallel-processing - 10 プロセッサと 40 プロセッサでは、どの程度の速度向上が得られますか?
2 つの合計を実行するとします。1 つは 10 個のスカラー変数の合計で、もう 1 つは次元が 10 × 10 の 2 次元配列のペアの行列の合計です。ここでは、行列の合計のみが並列化可能であると仮定しましょう。10 プロセッサと 40 プロセッサでは、どの程度の速度向上が得られますか?
私の理解:
10x10 行列 + 10 スカラー変数 = 110t
10 プロセッサの場合、(100/10)t + 10t = 20t
スピードアップ=110/20=5.5;
40 プロセッサの場合、(100/40)t + 10t = 12.5t
スピードアップ=110/12.5=8.8;
ソリューション ブックには、10 個のプロセッサで約55%の潜在的な高速化が得られると記載されていますが、40個のプロセッサでは22%しか得られません。
55% は理解できますが、その 22% はどのようにして得られるのでしょうか?
python-3.x - Python での for ループの並列化
私は実行速度が非常に遅いニューラル ネットワークをコーディングしたので、特定のループを並列化することで少し速度を上げたいと考えていました。
実装とGILの仕組み、そしてそれが私に関係があるかどうかはわかりません。
コードは次のようになります。
ループは、独立して処理できる一連のトレーニング サンプル (20) が含まれてtrain()
いるため、並列化したいループです。batch
python-2.7 - 並列化のためのpythonのPool()はグローバル変数への書き込みを妨げますか?
Python 2.7 では、2 次元配列の計算をすべてのコアに分散しようとしています。
そのために、グローバル スコープで変数に関連付けられた 2 つの配列があり、1 つは読み取り用、もう 1 つは書き込み用です。
計算 (温度の反復計算) が実際に意味をなすように、arr
その例示的な -s 以外のいくつかの異なる値を持つ配列の追加の初期化があると仮定します。1
for
メソッドの代わりにコメントアウトされたループを使用するとPool.map()
、すべてが正常に機能し、配列には実際に値が含まれます。関数を使用するPool()
と、変数new_array
は初期化された状態のままになります (つまり、最初に で初期化されたため、ゼロのみが含まれます)。
Q1 :Pool()
グローバル変数に書き込めなくなるということですか?
Q2 :並列化でこの問題に取り組む他の方法はありますか?
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
ですか?