インテルから直接、最近のプロセッサが一定の速度で動作する TSC を維持し、マルチソケット マザーボード上のコアとパッケージ間で同期し、プロセッサがディープ スリープ C ステートに入ったときに動作し続ける方法についての説明があります。 、特に Vipin Kumar EK (Intel) による説明を参照してください。
http://software.intel.com/en-us/articles/best-timing-function-for-measuring-ipp-api-timing/
コア間での TSC の同期について議論している Intel からの別のリファレンスを次に示します。この場合、rdtscp を使用すると、TSC とプロセッサ ID の両方をアトミックに読み取ることができるという事実に言及しています。これは、アプリケーションのトレースにおいて重要です...トレースしたいとします。あるコアから別のコアに移行する可能性のあるスレッドの実行。これを 2 つの別々の命令 (非アトミック) で実行すると、スレッドがクロックを読み取った時点でスレッドがどのコアにあったかが確実にわかりません。
http://software.intel.com/en-us/articles/intel-gpa-tip-cannot-sychronize-cpu-timestamps/
マザーボード上のすべてのソケット/パッケージは、2 つの外部共通信号を受信します。
- リセット
- 基準時計
マザーボードに電源を供給すると、すべてのソケットが同時に RESET を認識し、すべてのプロセッサ パッケージが外部の水晶発振器から基準クロック信号を受信し、プロセッサの内部クロックの位相が維持されます (ただし、通常は 25x などの高い倍率が使用されます)。 Phase Locked Loop (PLL) と呼ばれる回路。最近のプロセッサは、温度または電力管理のスロットリング (いわゆる不変 TSC) のために個々のコアが使用している可能性のある乗数に関係なく、プロセッサが定格されている最高の周波数 (乗数) で TSC をクロックします (いわゆる定数 TSC)。2008 年にリリースされた X5570 などの Nehalem プロセッサ (およびそれ以降の Intel プロセッサ) は、ディープ パワー ダウン C ステート (C6) で電力を節約している場合でも、カチカチ音をたて続ける「ノンストップ TSC」をサポートしています。
http://www.anandtech.com/show/2199
さらに調査したところ、Intel が 2009 年 12 月 22 日に提出し、2011 年 6 月 23 日に公開された「複数のコアとスレッドのタイムスタンプ カウンター (TSC) オフセットの制御」というタイトルの特許に出会いました。
http://www.freepatentsonline.com/y2011/0154090.html
この特許出願に関する Google のページ (USPTO ページへのリンクあり)
http://www.google.com/patents/US20110154090
私が収集したものから、Vipin Kumar によって指定されたマシン固有レジスタのフィールドの値によって、すべての外部バス クロックでインクリメントされるアンコア (コアを囲むパッケージ内のロジック) に 1 つの TSC があります。上記のリンク (MSR_PLATFORM_INFO[15:8])。外部バス クロックは 133.33MHz で動作します。さらに、各コアには独自の TSC レジスタがあり、すべてのコアで共有され、1 つのコアのクロックとは異なる可能性があるクロック ドメインによってクロックされます。したがって、コア TSC が RDTSC によって読み取られるときに、何らかの種類のバッファが必要です。 (または RDTSCP) 命令がコアで実行されます。たとえば、パッケージで MSR_PLATFORM_INFO[15:8] を 25 に設定すると、アンコア TSC がバス クロックごとに 25 ずつインクリメントします。バス クロックを 25 倍し、このクロックを各コアに提供してローカル TSC レジスタにクロックを供給し、すべての TSC レジスタの同期を保つ PLL があります。用語を実際のハードウェアにマッピングするには
- 定数 TSC は、MSR_PLATFORM_INFO[15:8] で指定された定数乗数で乗算される 133.33 MHz で動作する外部バス クロックを使用して実装されます。
- インバリアント TSC は、各コアの TSC を個別のクロック ドメインに保持することで実装されます。
- ノンストップ TSC は、すべてのバス クロックで MSR_PLATFORM_INFO[15:8] ティックによってインクリメントされるアンコア TSC を持つことによって実装されます。これにより、マルチコア パッケージはディープ パワー ダウン (C6 状態) になり、PLL をシャットダウンできます。 .. クロックをより高い乗数に保つ必要はありません。コアが C6 状態から再開されると、その内部 TSC は、ソフトウェアが TSC に値を書き込んだ場合にオフセット調整を使用して、アンコア TSC (スリープ状態にならなかったもの) の値に初期化されます。これは特許にあります。ソフトウェアが TSC に書き込む場合、そのコアの TSC は他のコアとは位相がずれますが、一定のオフセットになります (TSC クロックの周波数はすべて定数乗数によってバス基準クロックに結び付けられます)。