ホームページ  >  に質問  >  本文

Python - 複数のプロセスを使用して、ループのネストが遅いという問題を解決するにはどうすればよいですか?

ループ内にループのパターンがある
大ループと小ループの変数は、内側のループのループ本体で使用する必要があります。

ここでは単純なモデルに簡略化しました。
関数が複雑な場合、このモデルは非常に遅くなります。
マルチプロセス手法を使用して速度の問題を解決する方法を聞きたいのですが?

私のアイデアは、小さなループにのみマルチプロセスを使用することです。
大きなループのループ本体にマルチプロセスのコードを記述します。
しかし、失敗し続けます。
神にお願いしてください。正しいコード。

###ありがとう!

リーリー

代言代言2685日前2233

全員に返信(6)返信します

  • 学习ing

    学习ing2017-06-12 09:24:04

    まず第一に、並列コンピューティングでは、各並列演算のサブルーチン間に相互の因果関係がないことが必要です。
    小さなループでは、res は x、y、z、alist、blist、clist と密接な因果関係があり、それらを並列計算に分割するのは困難です。
    質問者が投稿したコードはオリジナルのコードではないため、オリジナルのコードにある大きなループに因果関係があるかどうかはわかりませんが、回路図のコードから判断すると、
    大きなループをN個の​​スレッドに分割します。 (プロセスは必要ありません)、「はい、各スレッドは 2000/N 回計算します」となるはずです。
    たとえば、8 つのスレッドに分割され、スレッド 1 は i=0 ~ 249 を計算し、スレッド 2 は i=250 ~ 499 を計算します。 。 。
    ここでの N のサイズは、CPU コアの数に応じて決定できます。N が CPU コアの数を超えると、あまり意味がありませんが、効率が低下する可能性があります。

    返事
    0
  • PHP中文网

    PHP中文网2017-06-12 09:24:04

    途中でelifを使用する必要があります。最後のforのインデントに問題があるようです

    返事
    0
  • 为情所困

    为情所困2017-06-12 09:24:04

    大きなループで複数のプロセスを開くことができます。たとえば、大きなループが 2000 回の場合、CPU コアの数が 4 の場合、4 つのプロセスが開かれ、各プロセスは 500 の実行を担当します

    小さなループが終了したら、サブスレッドを開いて次の後続の操作を実行でき、大きなループは前方に処理を続けます

    リーリー

    返事
    0
  • phpcn_u1582

    phpcn_u15822017-06-12 09:24:04

    サブプロセスを使用して小さなループを処理できますが、この場合は 2 つの大きなループが必要です。 1 つのループは小さなループを処理し、このループが処理された後、大きなループは次のことを処理します

    こんな感じ

    リーリー

    返事
    0
  • typecho

    typecho2017-06-12 09:24:04

    小さなループで実行される関数に時間がかかる場合は、プロデューサー/コンシューマー モデルを検討できます

    リーリー

    返事
    0
  • 怪我咯

    怪我咯2017-06-12 09:24:04

    質問者はプロセスの入力と出力を最初に設計する必要がありますか? 複数のプロセスが並列計算を行う場合、プロセス間の通信が最も重要です。それは、多層ループなどの MPI である必要があります。のデータを最初に分散する必要があります。各プロセスは計算を行ってからデータ統合ポイントに戻り、結果をマージして出力します。

    もう一つ重要な点は、各プロセスの実行時間を見積もることです。結局のところ、プロセス間通信がある場合、待ち時間も効率の低下につながります。

    @daijianke さんは、あなたのネストは並列計算の入力規則に準拠していないと言いました。この例を見てください。

    http://blog.csdn.net/zouxy09/...

    以前に記事内の例をテストしましたが、次の手順に従えば問題なく実行できるはずです。

    返事
    0
  • キャンセル返事