私は約100のプロセスを持っています。各プロセスには10個の入力(論理式)が含まれており、各プロセスのタスクは、各論理入力を解決するための最速ヒューリスティックアルゴリズム(約5個のヒューリスティックアルゴリズムがあります)を見つけることです。
それぞれのプロセスを別々に実行すると、すべてのプロセスを並列に実行すると結果が異なります(python p1.py & python p2.py & ...)。たとえば、プロセスを別々に実行する場合、入力1(p1)は最初のヒューリスティックアルゴリズムを最も速い方法として検出しますが、同じ入力では5番目のヒューリスティックアルゴリズムがより速く見つけられます。
CPUが並列プロセスを切り替えるタイミングが間に合わないため、ヒューリスティックなアルゴリズムが入力を解決するために費やす時間が適切でないことがありますか?
解決策は何ですか?プロセスの数を半減することで、誤った結果を減らすことができますか? (私は自分のプログラムをサーバー上で実行します)マルチプロセスタイミングの不一致
0
A
答えて
1
オペレーティングシステムは、はるかに少ないCPU量ですべてのプロセスをスケジュールする必要があります。これを実行するために、各CPUで1つのプロセスをわずかな時間実行します。その後、オペレーティングシステムはプロセスをスケジュールして他のプロセスを実行させ、プロセスに実行時間を公平に分担させます。したがって、各プロセスはCPU上の実行中のスロットを待たなければなりません。待機する時間は、実行を待っている他のプロセスの量に依存し、ほとんど予測できません。
測定に時計の時間を使用すると、待機時間は測定値を汚染します。より正確な測定のために、プロセスが使用したCPU時間をオペレーティングシステムに問い合わせることができます。関数time.process_time()はこれを行います。
プロセスの切り替えには時間がかかります。同じリソース(ファイル、ハードディスク、CPUキャッシュ、メモリなど)にアクセスする複数のプロセスには時間がかかります。 CPUに依存するプロセスの場合、CPUよりも実行プロセスのオーダーが大きいほど、実行が遅くなります。 CPUの量よりわずかに少ないプロセスを開始することで、より良い結果が得られます。予備のCPUは、オペレーティングシステムまたは他の無関係のプログラムによって必要とされる作業のために利用可能なままである。
関連する問題
- 1. 不一致
- 2. 不一致レコード
- 3. ifelse |不一致
- 4. 不一致エラー
- 5. CFBundleShortVersionString不一致
- 6. 不一致が
- 7. 不一致
- 8. Parallel.ForEachの不一致
- 9. インラインブロックの不一致
- 10. トップレイアウトガイドの不一致
- 11. バージョンの不一致
- 12. レプリケーションの不一致
- 13. スカラリフトタイプの不一致?
- 14. Datepickerの不一致
- 15. シグネチャの不一致
- 16. インスタンスの不一致
- 17. 一致/不一致の一致/不一致の合計を基準に範囲を合計します。
- 18. 一般的な不一致
- 19. nHibernateコンポジットキークラスタイプ不一致
- 20. TSQLラウンド()不一致?
- 21. XSLT - 不一致タグ
- 22. ランタイムエラー13 - 不一致
- 23. 不一致削除
- 24. 型不一致エラー
- 25. (JavaFX)SplitPane.getDividerPositions()不一致
- 26. 不一致XRefストリームエントリサイズ
- 27. TensorFlowバージョン不一致
- 28. gcovのメモリー不足/バージョンの不一致?
- 29. ハスケルの不一致のブラケットエラー
- 30. オートコンプリートのテキストボックスデザインの不一致
すべてのコードセクションが役に立ちます –
100個のプロセスがすべて同時に並列に実行されるという保証はありません。それは100種類のプロセスにCPUのタイムスライスを与える方法は、基本的なオペレーティングシステムに完全に依存します。 – MYGz