2017-12-27 22 views
0

長時間実行する操作を別々のスレッドで実行すると、PCに複数のプロセッサコアがある場合にパフォーマンスが大幅に向上します。 C#には関数Parallel.ForEachがありますが、これはどのように理解すると、各プロセッサコアで実行される別々のスレッドで長時間実行される操作を分割します。ただし、コアが1つしかない場合、この機能は単純なForeachループ(同期)として実行されます。また、プロセッサコアより多くのスレッドを作成している場合は、悪影響が及ぶこともあります。長時間実行しているタスクを別々のプロセスに分割してプログラムのパフォーマンスを向上

別のコンソールアプリケーションを作成することを考えていましたが、それにargsを渡して、start -WindowStyle Hidden SeparateProcess.exeのような複数のプロセスで.exeを実行します。

編集:
私はすでにPowerShellを使用して、その後、この

class Program 
{ 
    static void Main(string[] args) 
    { 
     for (int i = 0; i < 100; i++) 
     { 
      Thread.Sleep(200); 
      Console.WriteLine("" + i); 
     } 
     Console.WriteLine(); 
     Console.WriteLine(Guid.NewGuid() + ": Process finalized."); 
    } 
} 

のようなコンソールアプリケーションを作成し、それを何度も実行:単一に実行したとき

For ($i=0; $i -lt 10; $i++){ 
start -WindowStyle Normal SeparateProcess.exe 
} 

は、このプログラムのパフォーマンスが向上しますコア?

注:長時間実行されるタスクは、Emgu CV画像計算アルゴリズムです。

+0

マルチスレッドは、複数のコアを利用するだけではありません。アプリケーションとスレッドが何をするかによって、単一のコアマシン上で実行されるマルチスレッドアプリケーションは、単一のコア上で実行される単一のスレッドアプリケーションよりもパフォーマンスが向上する可能性があります。 複数のプロセスの1つの大きな欠点は、メモリやリソースを共有できないことです。一方、複数のスレッドを持つ単一のプロセスでは可能です。 – RavB

+0

あなたのプロセスはCPUバウンドではありません。ほとんどの時間はスリープします。改善されたパフォーマンスはどのように見えますか?それはまだ200ミリ秒100回スリープ状態になり、ほぼ同じ時間かかる。書き込みはすべて同じ時間がかかります。 –

+1

@RavBマルチコアコンピュータはたった10年しか共有されていませんが、シングルコアだけのマシンでは複数のスレッドを使用する理由がたくさんあります(結局のところ、何十年もの間スレッド化が一般的に使用されていました) )しかし、その理由はパフォーマンスではありません。単一のコアマシンでは、マルチスレッドコードは常にパフォーマンスが悪くなります(同じ作業をしてもスレッドオーバーヘッドを持つため)が、スレッドオーバーヘッドにもかかわらず役に立ちます。 – Servy

答えて

1

あなたは

は唯一のコアがある場合でも長時間実行タスクのパフォーマンスを改善する方法はあります...それを試みることによって自分自身をチェックしますが、必要がありますか?

はい、ただし、明らかにそれを並行して実行することではありません。コードでパフォーマンスアナライザを使用して、どのパートが最も時間を費やしていたかを調べ、より最適化された方法で書き直そうとします。

コメントに基づいてEDIT:

あなたがCVで画像処理を行うことをしようとしている、あなたがやっている事は、それが起こっていない並列化、CPUバウンド(実行中のプロセッサを出maxes)である場合単一のコア(彼らはCPUのためにお互いに競争するでしょう)に役立ちます。

I/Oが完了するまで待つ必要がある場合は、パラレル化すると、他のプロセスがI/Oを待機している間に作業を進めることができます。

これはあなたが何をしているかによって異なります。この質問を閉じて、何をしようとしているのか、そのタスクがどのようにCPUを大量に消費しているのかについて詳しく説明する必要があります。

(可能であれば、画像処理を高速化する方法の1つは、あらかじめ画像のサイズを変更することです。たとえば、顔検出)。

+0

問題は、それが完了するまでに長い時間がかかる私の書かれたコードではないということです。それはEmguCV画像計算アルゴリズムです。 – Edgar

+0

時間がかかっています(できるだけ早くそれをやっている可能性が高い - CVはかなり書かれている)。 –

関連する問題