私は4つのスレッドを作成する主なプロセスを持っています。私が単純に4つのスレッドをすべて実行すると、カーネルは4つのコアすべてを利用するか、またはプログラムを単一のコアでマルチスレッド化しますか?そうでなければ、マルチコア上でどのように同期が処理されるのでしょうか。私は4core intel cpuを持っていて、私のプログラムはC++になっています4つのコアをすべてC++/cで利用
私はこれを仮想マシンのLinux上で実行しています。
私は4つのスレッドを作成する主なプロセスを持っています。私が単純に4つのスレッドをすべて実行すると、カーネルは4つのコアすべてを利用するか、またはプログラムを単一のコアでマルチスレッド化しますか?そうでなければ、マルチコア上でどのように同期が処理されるのでしょうか。私は4core intel cpuを持っていて、私のプログラムはC++になっています4つのコアをすべてC++/cで利用
私はこれを仮想マシンのLinux上で実行しています。
あなたは本当にわかりません。
一方、C++ 03標準ではスレッド、コアまたはそのようなものについてはについてはは何も分かりません。とにかくこれはプラットフォームに依存します。
プラットフォームの視点からでも、実際にはまだ分かりません。オペレーティングシステムは、スレッドとジョブをスケジュールします。 OSは、特定のスレッドに対して "processor affinity"を指定する手段を提供するかもしれませんが、これは通常、フープジャンプスルーを利用します。あなたも心に留めておくべき事柄の
一つのあなたの目標は100%が利用される各コアを維持することであるならばということで、あなたは(Nは、コア数である)以上のnスレッドがしばしば必要になります。スレッドは、ディスクに待機し、一般的には何もしないで、睡眠の多くの時間を費やしますコアの。必要なスレッドの正確な数は、実際のアプリケーションとプラットフォームに依存しますが、実験によってこれを微調整するのに役立ちます。
さて、あなたはいつも、あなたが知っていることは...それを試してみてください。 OSはスレッドスケジューリングにかなり優れていますが、あまり心配しません。 –
最初の部分は試してみましたか? – Mat
これはOSによって異なります。 Windows? Linux? BSD?コンパイラでも。 ICC? MSVC++? GCC? TCC? –