-1

私はPythonで並列化を行っています..そして、大きな計算を並列化する必要があります。最初は大きなforループ(たとえば1000個の粒子)があるため、プロセスは独立していませんでした。並列化するには独立したプロセスが必要です。そのため、for ループを 2 つの FOR ループに分割し、500、500 の粒子を計算しました。そして、この 2 つの独立したループを 2 つの異なるコア (プロセッサ) で並行して実行する必要があります。はいの場合、どのように?いくつかのガイダンスを共有してください..

for i in particle1
   some processes
   ......

 print ( something)

2回目のループ

for i in particles2
    someprocess....

print (something1)

そして今、この2つの異なるプロセスを組み合わせたい

それで ...

 print (something + something1)

これは私がやりたいことです..アイデアを共有してください..

4

1 に答える 1

0

マルチスレッドとマルチプロセッシングの 2 つの可能性があります。マルチスレッドは、明示的に転送するのではなく、すべてのワーカー スレッド間でグローバル状態を自動的に共有できるため、より便利です。しかし、Python では、「グローバル インタープリター ロック」(GIL) と呼ばれるものにより、複数のスレッドが実際に並行して動作することが難しくなります。一度に実際に作業を行うスレッドは 1 つだけで、相互にブロックされる傾向があります。マルチプロセッシングはより多くのセットアップを必要とし、データを明示的に転送する必要がありますが (これにはコストがかかる可能性があります)、実際に複数のプロセッサを使用する場合にはより効果的です。

マルチスレッドとマルチプロセッシングの両方をモジュールで活用できるため、concurrent.futuresタスクベースの並列処理が可能になります。これを理解するのは難しいかもしれませんが、理解してしまえば、マルチプロセッサ対応のコードを作成する最も効率的な方法です。

最後に、for ループが一連のデータに対して同じ数学演算を実行している場合は、データを調べてnumpyベクトル化する必要があります。これは最も難しいアプローチですが、最高のパフォーマンスも得られます。

于 2014-08-22T11:58:24.177 に答える