それはコンテキストスイッチOS上
- のコストに、依存、
- それはスレッドであるCPU又は異なるプロセス
- 機の負荷
- スイッチが最後に実行されたのと同じコアになります
- ワーキングセットサイズは何ですか
- 最後に実行されてからの時間
Linuxの場合、i7,1100ns、同じプロセス内のスレッド、最後に実行されたコアと同じコア、最後のスレッドとして実行され、無負荷、ワーキングセット1バイト。
悪いケース、キャッシュからフラッシュ、別のコア、別のプロセス、ちょうど30μsのCPUオーバーヘッドが必要です。
コスト行きます
:異なるプロセス、フラッシュTLBは、3〜5ページをリロードする場合
- 保存最後のプロセスコンテキスト70から400サイクル、
- 負荷新しいコンテキスト100-400サイクル
- を歩くことができます。潜在的には、それぞれ約300サイクルの記憶があります。さらに、指示やデータを含め、複数のページに触れた場合は、いくつかのページが表示されます。
- OSオーバーヘッド、私たちはすてきな統計を気に入っています。たとえば、コンテキストスイッチカウンタに1を加えます。
- スケジューリングオーバーヘッド次に実行するタスク
- 新しいコアで潜在的なキャッシュミス〜自分のL2キャッシュのキャッシュラインあたり12サイクル。そこからデータが遠く離れていくほどそこから下り坂になります。
OS(およびOSバージョン)に固有のものです。 OSスケジューラがスレッドを起動させるのにかかる時間は、C++の範囲外です。 –
@RichardCrittenシステムボードとCPUに固有のもので、システム負荷とその優先順位設定に特有のものと、さまざまな割り込みの到着などの計算の最下位桁を混乱させるリアルタイム変数と、寒さはキャッシュとそれ以外のものです。 – Kaz