2017-09-10 3 views
-1

std::threadを特定のコアに明示的に設定することなく別のコアで起動するにはどうすればよいですか?プロセッサアフィニティを特定のコアに設定せずに別のコアでスレッドを開始するにはどうすればよいですか?

スレッドは特定のコアに割り当てることができますが、スケジューラに別のコアでプロセスを開始するよう指示する方法はありますか?スケジューラはそのプロセスを実行するのに最適なコアを決定します。

+2

タイトルは**別のコアでスレッドを開始する方法**です。問題の本文には、**別のコアでプロセスを開始する**と記載されています**。申し訳ありませんが私はmisanderstood、あなたはより正確なことができますか? – Neb

+0

@Neb thread = process – Greg

+1

@Daveスレッド全体が別のプロセスを開始することはありません。 – user0042

答えて

0

短い答えはあなたがしていないことです。

次の2つの選択肢があります:あなたは、スレッドがその親和性を設定することにより、上で実行できるプロセッサコア(複数可)を選択し

  1. を。
  2. スレッドが実行されるコアをスケジューラに選択させます。

いずれかを選択するか、スケジューラが選択します。そのような単純な。

あなたが望むように(複数のコアで実行するようにいくつかのスレッドを開始する)、スケジューラにスケジューリングをさせたいと思うかもしれません。

プロセッサアフィニティを設定することは、基本的にスケジューラのスケジューリングよりも優れたスケジューリングを実行できるスレッドのスケジューリングについて十分な知識がある場合に適用されます。少なくとも私が見たことは、人が親和性を設定した時間のおよそ75%で、それは基本的には間違いであり、彼らはコードを遅くすることになります。別の24%は害はないが、本当の良いこともしない。そしておそらく1%の時間で、実際に何か役に立つものを達成します。

スケジューラを書く人は、1ダースのスレッドをスピンアップすると、すべてが単一のコアで実行されるという意図ではないことを一般的に認識しています。最も簡単な(そしておそらく最も一般的な)ケースは、すべての使用可能なコアでスレッドを単にスケジュールすることです。そうでない場合は、通常、ユーザが(少なくとも間接的に)システムを構成していないためです(例えば、ラップトップの電源管理の一部は、バッテリで動作しているとき、使用中のコアの数を制限したり、少なくともいくつかの状況下では)。

関連する問題