2016-11-17 32 views
0

私は約100のプロセスを持っています。各プロセスには10個の入力(論理式)が含まれており、各プロセスのタスクは、各論理入力を解決するための最速ヒューリスティックアルゴリズム(約5個のヒューリスティックアルゴリズムがあります)を見つけることです。
それぞれのプロセスを別々に実行すると、すべてのプロセスを並列に実行すると結果が異なります(python p1.py & python p2.py & ...)。たとえば、プロセスを別々に実行する場合、入力1(p1)は最初のヒューリスティックアルゴリズムを最も速い方法として検出しますが、同じ入力では5番目のヒューリスティックアルゴリズムがより速く見つけられます。
CPUが並列プロセスを切り替えるタイミングが間に合わないため、ヒューリスティックなアルゴリズムが入力を解決するために費やす時間が適切でないことがありますか?
解決策は何ですか?プロセスの数を半減することで、誤った結果を減らすことができますか? (私は自分のプログラムをサーバー上で実行します)マルチプロセスタイミングの不一致

+0

すべてのコードセクションが役に立ちます –

+0

100個のプロセスがすべて同時に並列に実行されるという保証はありません。それは100種類のプロセスにCPUのタイムスライスを与える方法は、基本的なオペレーティングシステムに完全に依存します。 – MYGz

答えて

1

オペレーティングシステムは、はるかに少ないCPU量ですべてのプロセスをスケジュールする必要があります。これを実行するために、各CPUで1つのプロセスをわずかな時間実行します。その後、オペレーティングシステムはプロセスをスケジュールして他のプロセスを実行させ、プロセスに実行時間を公平に分担させます。したがって、各プロセスはCPU上の実行中のスロットを待たなければなりません。待機する時間は、実行を待っている他のプロセスの量に依存し、ほとんど予測できません。

測定に時計の時間を使用すると、待機時間は測定値を汚染します。より正確な測定のために、プロセスが使用したCPU時間をオペレーティングシステムに問い合わせることができます。関数time.process_time()はこれを行います。

プロセスの切り替えには時間がかかります。同じリソース(ファイル、ハードディスク、CPUキャッシュ、メモリなど)にアクセスする複数のプロセスには時間がかかります。 CPUに依存するプロセスの場合、CPUよりも実行プロセスのオーダーが大きいほど、実行が遅くなります。 CPUの量よりわずかに少ないプロセスを開始することで、より良い結果が得られます。予備のCPUは、オペレーティングシステムまたは他の無関係のプログラムによって必要とされる作業のために利用可能なままである。