(57)【特許請求の範囲】
【請求項１】
バスクロック周波数に応じてカウントする第１のタイムスタンプカウント（ＴＳＣ）カウンタ、スナップショットストレージ、および、前記スナップショットストレージに結合されているスナップショットコントローラを有する第１のロジックと、
コアクロック周波数に応じてカウントする第２のＴＳＣカウンタ、および、第１のスレッドについての第１のスレッドオフセット値を格納する第１のスレッドオフセットストレージを有し、前記第１のスレッドを実行する第１のコアと
を備え、
前記スナップショットコントローラは、前記第２のＴＳＣカウンタがリセットされると、前記第１のＴＳＣカウンタの値を前記スナップショットストレージに格納させ、
前記第１のスレッドオフセット値は、前記第１のスレッドにおける前記第２のＴＳＣカウンタの値および格納した前記第１のＴＳＣカウンタの値の間のオフセットに対応し、システム一時停止の発生前に記録された前記第１のＴＳＣカウンタの値に対応する同期値で直接、更新が実行される装置。
【請求項２】
前記第１のコアはさらに、前記第１のコアで実行される第２のスレッドについて第２のスレッドオフセット値を格納する第２のスレッドオフセットを有し、
前記第２のスレッドオフセット値は、前記第２のスレッドにおける前記第２のＴＳＣカウンタの値および格納した前記第１のＴＳＣカウンタの値の間のオフセットに対応し、前記同期値で直接、更新が実行される請求項１に記載の装置。
【請求項３】
前記第２のスレッドオフセット値は、前記第１のスレッドオフセット値とは異なるタイミングで、且つ、同じ前記同期値で更新が実行される請求項２に記載の装置。
【請求項４】
前記第１のスレッドオフセット値および前記第２のスレッドオフセット値の前記更新は、前記第１のスレッドと前記第２のスレッドとの間で同期処理を行うことなく実行される請求項３に記載の装置。
【請求項５】
前記第１のコアはさらに、第１の調整値を格納する第１の調整ストレージ、および、第２の調整値を格納する第２の調整ストレージを有し、前記第１の調整ストレージおよび前記第２の調整ストレージは、前記第２のＴＳＣカウンタに結合されている加算器に結合されており、
前記加算器は、前記第１の調整値または前記第２の調整値を前記第２のＴＳＣカウンタの値に加算する請求項１から４のいずれか一項に記載の装置。
【請求項６】
システム一時停止の前に、プロセッサの非コアＴＳＣカウンタのタイムスタンプカウンタ（ＴＳＣ）値をメモリに格納する段階と、
前記システム一時停止の後に、前記メモリに格納されている前記ＴＳＣ値にアクセスする段階と、
前記プロセッサの複数のコアの間で同期を実行することなく、前記格納されているＴＳＣ値を用いて前記プロセッサの第１のコアで実行されている第１のスレッドにおける前記プロセッサのコアＴＳＣカウンタの値および前記ＴＳＣ値の間のオフセットに対応付けられている第１のスレッドオフセット値を直接更新する段階と
を備える方法。
【請求項７】
前記メモリに格納する段階は、さらに、前記プロセッサを含むシステムについて低電力状態の開始を要求するユーザ要求に応じて、前記ＴＳＣ値を前記メモリに格納する請求項６に記載の方法。
【請求項８】
前記ＴＳＣ値にアクセスする段階の前で、かつ、前記システム一時停止の終了後に、複数の前記コアＴＳＣカウンタおよび前記非コアＴＳＣカウンタをリセットする段階と、
前記ＴＳＣ値にアクセスする段階の後に、前記第１のコアで実行されている第２のスレッドにおける前記コアＴＳＣカウンタの値および前記ＴＳＣ値の間のオフセットに対応付けられている第２のスレッドオフセット値を直接更新する段階と
をさらに備え、
前記第２のスレッドオフセット値を直接更新する段階は、前記第１のスレッドオフセット値を直接更新する段階とは異なるタイミングで実行される請求項６または７に記載の方法。
【請求項９】
前記格納されているＴＳＣ値で、前記プロセッサの第２のコアで実行されている第２のスレッドと対応付けられている第２のスレッドオフセット値を、前記第１のコアと前記第２のコアとの間で同期を実行することなく、直接更新する段階をさらに備える請求項６に記載の方法。
【請求項１０】
前記システム一時停止が終了すると、前記ＴＳＣ値にアクセスする段階の前に、複数のコアＴＳＣカウンタおよび前記非コアＴＳＣカウンタをリセットする段階と、
前記リセットする段階と同時に、前記プロセッサの非コアの対応するコアオフセットストレージに、前記複数のコアのそれぞれのコアＴＳＣカウンタの値をコアオフセット値として記録する段階と
をさらに備える請求項６に記載の方法。
【請求項１１】
第１のスレッドオフセット値を直接更新する段階の後に、前記複数のコアの間で同期処理を実行することなく、前記複数のコアＴＳＣカウンタを同期させる段階をさらに備える請求項１０に記載の方法。
【請求項１２】
記録される前記コアオフセット値はそれぞれ、前記リセット時にゼロである請求項１０に記載の方法。
【請求項１３】
第１のスレッドオフセット値を直接更新する段階の後に、
前記第１のコアについて周波数を更新することに応じて、複数の前記コアオフセット値のうち前記第１のコアに対応する第１のコアオフセット値を更新する段階と、
更新した前記第１のコアオフセット値を前記第１のコアに提供する段階と
をさらに備える請求項１２に記載の方法。
【請求項１４】
前記更新した第１のコアオフセット値を用いて、前記第１のスレッドに対応付けられている前記第１のスレッドオフセット値を更新する段階をさらに備える請求項１３に記載の方法。
【請求項１５】
バスクロック周波数に応じてカウントする第１のタイムスタンプカウント（ＴＳＣ）カウンタと、
コアクロック周波数に応じてカウントする第２のＴＳＣカウンタ、および、第１のコアで実行される第１のスレッドについて第１のスレッドオフセット値を格納する第１のスレッドオフセットストレージを有する第１のコアと
を備えるプロセッサであって、
前記第１のスレッドオフセット値は、前記第１のスレッドにおける前記第２のＴＳＣカウンタの値および前記第１のＴＳＣカウンタの値の間のオフセットに対応し、前記プロセッサを含むシステムの一時停止の前に記録される前記第１のＴＳＣカウンタの値で、直接更新されるプロセッサ。
【請求項１６】
前記第１のＴＳＣカウンタと、前記第１のコアに対応付けられているスナップショットストレージとに結合されているスナップショットコントローラをさらに備え、
前記スナップショットコントローラは、前記第２のＴＳＣカウンタがリセットされると、前記第１のＴＳＣカウンタの値を前記スナップショットストレージに格納させる請求項１５に記載のプロセッサ。
【請求項１７】
前記第１のコアは、ＴＳＣ読出命令に応じて、前記第２のＴＳＣカウンタの値と、前記第１のスレッドオフセット値と、前記スナップショットストレージに格納されている値とを合計した総計に対応するＴＳＣ値を算出する第１のロジックを有する請求項１６に記載のプロセッサ。
【請求項１８】
前記第１のコアは、ＴＳＣ書込命令に応じて、前記スナップショットストレージに格納されている値と、前記第２のＴＳＣカウンタの値と、ユーザが定義した書込値とに基づいて、前記第１のスレッドオフセット値を更新する第２のロジックを有する請求項１７に記載のプロセッサ。
【請求項１９】
前記プロセッサは、前記システムの一時停止が終了した後、前記第１のＴＳＣカウンタおよび前記第２のＴＳＣカウンタをリセットして、記録されている前記第１のＴＳＣカウンタの値で、前記第１のコアで実行される第２のスレッドに対応付けられている第２のスレッドオフセット値を直接更新して、
前記第２のスレッドオフセット値は、前記第２のスレッドにおける前記第２のＴＳＣカウンタの値および前記第１のＴＳＣカウンタの値の間のオフセットに対応し、
前記第２のスレッドオフセット値を直接更新することは、前記第１のスレッドオフセット値を直接更新することとは異なるタイミングで実行される請求項１５から１８のいずれか一項に記載のプロセッサ。
【請求項２０】
プロセッサと、
前記プロセッサに結合されているダイナミックランダムアクセスメモリ（ＤＲＡＭ）と
を備えるシステムであって、
前記プロセッサは、
バスクロック周波数に応じてカウントする第１のタイムスタンプカウント（ＴＳＣ）カウンタと、
第１のスレッドについての第１のスレッドオフセット値を格納する第１のスレッドオフセットストレージ、および、コアクロック周波数に応じてカウントする第２のＴＳＣカウンタを含む第１のコアと、
第２のスレッドについての第２のスレッドオフセット値を格納する第２のスレッドオフセットストレージ、および、前記コアクロック周波数に応じてカウントする第３のＴＳＣカウンタを含む第２のコアと
を有し、
前記第１のスレッドオフセット値は、前記第１のスレッドにおける前記第２のＴＳＣカウンタの値および前記第１のＴＳＣカウンタの値の間のオフセットに対応し、
前記第２のスレッドオフセット値は、前記第２のスレッドにおける前記第３のＴＳＣカウンタの値および前記第１のＴＳＣカウンタの値の間のオフセットに対応し、
前記第１のスレッドオフセット値および前記第２のスレッドオフセット値は、前記システムの一時停止の発生前に記録された前記第１のＴＳＣカウンタの値で直接更新され、
前記第１のスレッドオフセット値を直接更新することは、前記第２のスレッドオフセット値を直接更新することとは異なるタイミングで行うシステム。
【請求項２１】
前記プロセッサはさらに、スナップショットストレージと、前記スナップショットストレージに結合されているスナップショットコントローラとを有し、
前記スナップショットコントローラは、前記第２のＴＳＣカウンタがリセットされると、前記第１のＴＳＣカウンタの値を前記スナップショットストレージに格納させる請求項２０に記載のシステム。
【請求項２２】
前記第１のコアはさらに、第１の調整値を格納する第１の調整ストレージおよび第２の調整値を格納する第２の調整ストレージを含み、
前記第１の調整ストレージおよび前記第２の調整ストレージは、前記第２のＴＳＣカウンタに結合されている加算器に結合されており、
前記加算器は、前記第１の調整値または前記第２の調整値を前記第２のＴＳＣカウンタの値に加算する請求項２１に記載のシステム。
【請求項２３】
前記第１のスレッドオフセット値および前記第２のスレッドオフセット値のそれぞれを直接更新することは、前記第１のコアと前記第２のコアとの間で同期を実行することなく、行われる請求項２０から２２のいずれか一項に記載のシステム。
【発明の詳細な説明】
【背景技術】
【０００１】
多くのプロセッサは、固定レートでインクリメントされるカウンタとして通常実現されるタイムスタンプカウント（ＴＳＣ）カウンタを備えている。一部の公知のＴＳＣカウンタは、バスクロックレートをクロックとして、バスクロックサイクル毎に乗算値が追加される。つまり、バスクロックが１００メガヘルツ（ＭＨｚ）で、且つ、プロセッサの動作が２０００ＭＨｚでスタンプを記録する場合、バスクロック毎にＴＳＣカウントには「２０」の値が追加される。一般的に、マルチコアプロセッサの場合、当該プロセッサ内に含まれている複数のコアについて、１つのハードウェアＴＳＣカウンタを用意している。一の所与のコアについての当該ＴＳＣの値は、このＴＳＣカウンタ値にコアオフセットを加算した結果となる。
【０００２】
マルチソケットシステム、マルチコアシステム、および、マルチスレッドシステムにおいて各コアのＴＳＣ値を同期させておくことは、ソフトウェアにとって重要な点であり得る。特定のソフトウェアでは、例えば、データベーストランザクションにおいて、イベントの順序を記録するためのスタンプとしてＴＳＣ値を利用する。２つのプロセッサの間で時間軸を逆戻りすると、問題となり得る場合があり、一部の処理では致命的な影響も発生し得る。また、複数のコアの間でＴＳＣ値を同期させるのは非常に複雑になってしまう可能性がある。
【０００３】
ソフトウェアが所与のコアについてのＴＳＣ値を更新する場合、プロセッサがＴＳＣカウンタを読み出して新しい値を算出する。つまり、ハードウェアＴＳＣカウンタに書き込みが行われることは決してない。この処理で書き込みを行う対象は変化するので、ソフトウェアは受信する値が何であるか決して保証されない。つまり、所与のコアについてＴＳＣ値を更新する複数のソフトウェア処理は、無限に遅延させられる可能性がある。ソフトウェアが新しい値を算出する処理と、この値を書き込む処理との間で遅延が発生すると、算出結果は無効となり、再度処理を行う必要がある。このような処理は、単一プロセッサシステムでは一般的である。
【０００４】
複数のプロセッサのＴＳＣ値を更新する際にはより複雑になり、特に、ソフトウェア処理を正しく行うためには複数のプロセッサのＴＳＣ値を同期させる必要がある場合には、複雑になってしまう。マルチプロセッサシステムのコアのＴＳＣ値に対してこのように書き込みを行う場合には、バリアおよび同期を含むより複雑なフロー、例えば、対単位での同期が必要となり、さらに複雑になるとともに時間がかかってしまう可能性がある。
【図面の簡単な説明】
【０００５】
【図１】本発明の一実施形態に係るプロセッサの一部分を示すブロック図である。
【図２】コアのタイムスタンプカウント（ＴＳＣ）カウンタと実際の時刻とを比較した様子を示すタイミング図である。
【図３】本発明の一実施形態に係る方法を説明するためのフローチャートである。
【図４】本発明の一実施形態に係るプロセッサコアを示すブロック図である。
【図５】本発明の一実施形態に係るプロセッサを示すブロック図である。
【図６】本発明の別の実施形態に係るプロセッサを示すブロック図である。
【図７】本発明の一実施形態に係るシステムを示すブロック図である。
【発明を実施するための形態】
【０００６】
さまざまな実施形態において、所与のコア（および／または当該コアで実行されている１以上のスレッド）についてのタイムスタンプカウント（ＴＳＣ）値は、他のコアとは無関係に算出することが可能である。このようなコアのＴＳＣ値は、以下で説明するように、さまざまなオフセットと共に、独立したコアＴＳＣカウンタに部分的に基づいて算出され得る。このため、コアオフセットを直接読み書きできることになり、マルチコアプロセッサの複数のコアを同期させる必要がなくなる。ソケット内の全てのコア／スレッドは単一のハードウェアカウンタを共有するので、コアについてのオフセットに直接書き込みを行うことによって、ソフトウェアは、自由時間に、コアのオフセットを更新できるようになる。尚、以下で詳細に説明するが、このように直接書き込みを行う対象は、１以上のコアで実行されている複数のスレッドのそれぞれのスレッドオフセットであってよい。また、コアのＴＳＣ値は、例えば、トランザクションの順序を決定する、または、現在時刻を決定する軽量スタンプ記録機構として利用され得る。
【０００７】
図１には、本発明の一実施形態に係るプロセッサの一部分のブロック図を示している。図１に示すように、プロセッサ１００は、非コアロジック１１０およびコアロジック１５０を備えるとしてよい。一般的に、非コアロジック１１０は、電力管理、他の構成要素とのインターフェース処理、クロック等に関する一般的なプロセッサ処理を実行するさまざまな回路、ロジック等を有するとしてよい。一方、コアロジック１５０は、プロセッサのうち、さまざまな命令を実行するための主要実行ユニットを有するとしてよい。多くの実施例では、プロセッサ１００は、コアロジック１５０が複数設けられるが、非コアロジックは１つのみであるマルチコアプロセッサであってよい。
【０００８】
図１を参照しつつ説明すると、タイムスタンプカウント処理に関するクロック動作のために用いられる構成要素を主に図示しており、プロセッサのその他の回路およびロジックの大半は便宜上、図示を省略している。非コアロジック１１０については、非コアＴＳＣカウンタ１２０が設けられているとしてよい。一般的に、非コアＴＳＣカウンタ１２０は、例えば、バスクロック、つまり、プロセッサが結合されているバスのレートで、インクリメント部１２５によってインクリメントされるとしてよい。一実施形態によると、このバスはフロントサイドバス（ＦＳＢ）であってよいが、本発明の範囲はこれに限定されない。つまり、「バス」という用語は一般的に、任意の種類のインターコネクトを意味するために用いられ、ポイント・ツー・ポイント・インターコネクト等のシリアルインターコネクトを含む。一例を挙げると、プロセッサは、ポイント・ツー・ポイント・インターコネクトで結合されるとしてよく、非コアＴＳＣカウンタは、本明細書ではバスクロックレートと見なす、通常のクロックレートに従ってカウントする。非コアＴＳＣカウンタ１２０が出力する値は、非コア内のさまざまな処理で利用されるとしてよい。また、以下でさらに説明するが、非コアＴＳＣカウンタ１２０からの値は、複数のコアおよび／または当該複数のコアで実行されるスレッドを同期させるために各コアで利用されるとしてよい。
【０００９】
さらに図１を参照して説明を続けると、非コアロジック１１０には他の回路がさらに設けられているとしてよい。具体的には、スナップショットコントローラ１３０が設けられるとしてよく、１以上のコアのスナップショットを取得するために用いられるとしてよい。以下で説明するが、このスナップショットは、対応するコアＴＳＣカウンタのリセット時の非コアＴＳＣカウンタの値であってよい。同図から分かるように、複数のスナップショットストレージ１４００−１４０ｎが設けられているとしてよく、各スナップショットストレージはプロセッサの所与のコアと対応付けられている。スナップショットコントローラ１３０の制御下で、これらのスナップショットストレージは、スナップショットコントローラ１３０によってイネーブルされると、非コアＴＳＣカウンタ１２０の現在の値を格納するとしてよい。所与のコアについて格納されたこの値は、対応するコアロジック自体のＴＳＣカウンタがリセットされたタイミングに対応するとしてよい。つまり、スナップショットコントローラ１３０は、スナップショットストレージ１４０に対する非コアＴＳＣカウンタ値を取得するための信号と同時に、対応するコアのＴＳＣカウンタをリセットするリセット信号を生成するとしてよい。このため、所与のスナップショットストレージ１４０に格納されている値は、所与のコアＴＳＣカウンタ１８０のリセット時の非コアＴＳＣカウンタ値に対応するとしてよい。つまり、非コアＴＳＣカウンタは、基準であり、スナップショットはコアＴＳＣカウンタがゼロにリセットされるのと同時に取得される。このスナップショット値は、非コアＴＳＣカウンタからＴＳＣ値を取得するためのクリーンポイントを示すとしてよい。そして、所与のコアのスナップショット値は、中間タイミングでアクセス可能であり、コアＴＳＣ値に加算される。これは、非コアＴＳＣ値とコアＴＳＣ値とを一致させるための時間軸上の基準となる。
【００１０】
非コアＴＳＣカウンタ１２０は、コアの状態に関係なく、所定の比率および周波数でカウントを継続する。複数のコアがさまざまな低電力状態（例えば、いわゆるアドバンスド・コンフィギュレーション・アンド・パワー・インターフェース（ＡＣＰＩ）仕様書、修正第４版（２００９年６月１６日）のＣ状態）またはその他の別の周波数状態を開始および終了する場合、スナップショット制御機構はコアの周波数を更新するために用いられるとしてよい。
【００１１】
一実施形態によると、プロセッサのマイクロコードを用いてレジスタに書き込みを行ってスナップショット処理を発生させるとしてよく、その後、スナップショット値を読み出してスナップショット処理が発生したことを確認するべくポーリングを行う。図１から分かるように、一実施形態によると、このレジスタは、非コアロジック１１０に設けられている複数のコアレジスタ１３５のうちの１つのコアレジスタであってよい。このため、プロセッサマイクロコードで実装するこのＴＳＣ書込命令は、非コアロジックに設けられているこのコアの対応するレジスタの値を更新するとしてよい。一方、この更新によって、スナップショットコントローラ１３０による、対応するコアスナップショットの更新の実行がトリガされるとしてよい。このため、スナップショットコントローラ１３０に対するこの制御信号によって、非コアＴＳＣカウンタ１２０の現在のＴＳＣ値を、対応するコアスナップショットストレージ１４０へと書き込ませる。（可能性として）これより後のタイミングにおいて、読み出された値がコアにローカルに書き込まれる。この値は、スナップショットストレージから、コア内の対応するストレージに書き込まれるとしてよい。このため、このスナップショット値は静的な値である。さらに以下で説明するように、あるコアの有効なＴＳＣ値は、コアＴＳＣ値、コアオフセット（つまり、このコアスナップショット値）、および、現在実行されているスレッドのスレッドオフセットの合計値である。
【００１２】
さらに図１を参照して説明を続けて、次にコアロジック１５０について説明する。一般的に、コアロジック１５０は、命令を実行するために設けられている全ての構成要素を含むとしてよく、さまざまなストレージ、順序決定ロジック、実行ユニット、退避ロジック等を含む。図１の上位図面では、このような構成要素は、コアパイプライン１９０と総称して図示しているとしてよい。一般的に、アウト・オブ・オーダ型の機械のコアパイプラインは、命令をフェッチしてデコードするフロントエンド部と、パイプラインの１以上の実行ユニットでの実行のために命令を並び替えるアウトオブオーダエンジンとを有するとしてよい。結果はこの後、命令を並び替えて退避させるバックエンド部に供給されるとしてよい。実行されるタイミング処理については、パイプライン１９０は算術論理演算ユニット（ＡＬＵ）１９２を含むものとして図示されている。しかし、コアパイプライン１９０にはより多くの同様の実行ユニットおよびロジックが設けられ得ると理解されたい。また、コアロジックに設けられている同様のストレージの１つは、マイクロコードによって利用されるレジスタをベースとするストレージを提供するために用いられるスクラッチパッドストレージ１９５であってよい。例えば、上述したようなプロセッサマイクロコードによるコアレジスタ１３５への書込みを参照して説明すると、当該書込みはスナップショットコントローラ１３０によるスナップショットをトリガするが、対応するコアスナップショットストレージ１４０へ書き込まれる値はコアロジック１５０に書き戻され、より具体的には、スクラッチパッドストレージ１９５に格納され得るものと理解されたい。
【００１３】
また、コアロジック１５０はコアＴＳＣカウンタ１８０を有するとしてよい。このカウンタは、プロセッサに対してスタンプで記録された周波数で実行されているように見えるように制御されるとしてよい。このカウンタは、制御可能な加算器１６０で更新されるとしてよい。一般的に、コアＴＳＣカウンタ１８０は、所与のレートのコアクロック周波数をクロックとするとしてよい。また、コアが実際にはスタンプで記録される周波数とは異なる周波数で実行されている場合には、所定の間隔で、調整ストレージ１６５および１７０に格納されている大調整値および／または小調整値のうちいずれか一方をカウント値に加算して、コアＴＳＣカウンタ１８０をインクリメントして、調整を行なうとしてよい。
【００１４】
つまり、プロセッサには、特定の周波数、例えば、２ギガヘルツ（ＧＨｚ）または３ＧＨｚがスタンプで記録される。コアＴＳＣカウンタは、この特定の周波数で実行されているように見える。しかし、コアは、ターボモードおよび低電力状態等、実装時に考慮すべき事項のために、別の周波数、例えば、１ＧＨｚ、４ＧＨｚ等の値で実行される場合がある。さまざまなソフトウェアのために、スタンプで記録された周波数でコアが実行されているという「幻想」を維持する必要がある。コアが実行されている比率とスタンプで記録されている周波数に対応する比率とは、互いに倍数の関係にはないので、上記のような小調整値および大調整値をコアＴＳＣ値に加算することができる。一実施形態によると、小調整値はＸコアクロック毎に加算することができ、大調整値は、例えば、一のＸコアクロックがバスクロックに並ぶ最小公倍数として加算されるとしてよい。このため、コアＴＳＣの出力は一般的に、階段状パターンとなる。一実施形態によると、大調整値および小調整値は、プログラムで所定値として算出されるとしてよく、例えば、周波数が変化するとプロセッサマイクロコードで算出されるとしてよい。一実施形態によると、この計算は以下の数１に従って行なわれるとしてよい。
【数１】
0005438215.tif 000002
式中、ＳｔａｍｐｅｄＲａｔｉｏは、スタンプで記録されたプロセッサの周波数であり、ＣｕｒｒｅｎｔＲａｔｉｏはコアが動作している周波数である。
【００１５】
数１を用いた結果として得られる整数の商が小調整値であり、整数の剰余が大調整値である。分かりやすく説明すると、これらの値は数２に従ってやや簡潔な方法で算出することもできる。
【数２】
0005438215.tif 000003
【００１６】
どちらの式でも、「４」はコアＴＳＣカウンタのアーチファクトであり、４クロック毎に加算を行なう。このレートは単に、コアＴＳＣカウンタを読み出されるレートより高いレートでクロッキングすることを回避することによって電力を節約するためである。修正期間は、４（カウントを取るのは４Ｍｃｌｋ毎なので）および現在の比率の最小公倍数を現在の比率で除算した結果であり、４および現在の比率の最大公約数（ＧＣＤ）を現在の比率で乗算した結果である。尚、この実施例では「４」という数値を用いたが、ＴＳＣカウンタを読み出す分解能に応じて、クロックレートを下げることで節約される電力との兼ね合いも図りながら、他の値を用いることも可能である。以下に示す表１は、本発明の一実施形態に係る大調整値および小調整値を算出するための擬似コードの一例を示す。
【表１】
0005438215.tif 000004
【００１７】
尚、小調整値および大調整値は、一部の実施形態によると、スナップショットコントローラ１３０によってリセット信号に応じて調整されるとしてもよい。
【００１８】
一実施形態によると、制御可能な加算器１６０は、４コアクロック毎にストレージ１７０に格納されている小インクリメント値を加算して、バスクロックと並ぶ４コアクロック毎にストレージ１６５に格納されている大調整値を加算する。図２には、コアＴＳＣカウンタと実際の時間とを比較した様子を示す。同図に示すように、スタンプで記録された周波数の奇数倍でコアが実行されている場合、大調整値が用いられるバスクロックと並ぶ時点まで全クロックにおいて小インクリメント値を用いる。
【００１９】
さまざまな実施形態によると、ストレージ１６５および１７０に格納されているこれら２つの調整値は、ＯＳが時間軸上で長時間にわたって断続することなくわずかに高速化できるように、ソフトウェアに公開することができる。つまり、ＯＳまたはその他のスーパーバイザソフトウェアは、小調整量または大調整量をプログラムすることができ、ソフトウェアはコアＴＳＣカウンタが徐々に実際の時間に追いつくように調整することができる。
【００２０】
さらに図１を参照して説明を続けると、コアロジック１５０には複数のスレッドオフセットストレージ１８５０および１８５１が設けられており、各スレッドオフセットストレージはスレッドオフセット値を格納するとしてよい。これらのスレッドオフセット値は、所与のスレッドについての、コアＴＳＣカウンタ値と対応するコアオフセットとの間のオフセットに対応するとしてよい。対応するコアオフセットは、対応するコアスナップショットストレージ１４０から取得される。一般的に、コアＴＳＣカウンタ１８０は、電力がコアに対して維持されてきたリセット以降の時間の長さを（コアオフセットを加算することによって）示すために用いることができる。スレッドオフセットは、スリープ状態での期間を考慮するために、または、時刻の値を調整するために、コアで実行されているアプリケーションに対して異なる時間の見方を提示するようにソフトウェア制御され得る。尚、図１に具体的な実施形態を示しているが、本発明の範囲はこれに限定されない。例えば、以下で説明するような同期処理は、コアスナップショットストレージを設けることなく実行することができる。
【００２１】
一実施形態によると、ＴＳＣ読出命令が実行されると、マイクロコードによってコアＴＳＣ値を読み出して、コアＴＳＣ値、スレッドオフセット、および、コアスナップショットの合計を算出して、このスレッドについての有効ＴＳＣ値を取得する。一部の実施形態によると、ＴＳＣ書込命令は、特権命令であってよく、マイクロコードに、コアスナップショットとコアＴＳＣカウンタとの合計を算出させて、スレッドが所望している任意の値、つまり、ユーザが定める値をスレッドオフセットとして書き込むためにはスレッドオフセットの値が何であればよいかを算出するとしてよい。このため、スレッドオフセット値は、正の数でも負の数であってもよい。例えば、コアスナップショットが１０００で、コアＴＳＣは２０００で、プログラムが５０００という書込値を指示した場合、スレッドオフセット値は２０００となる。尚、このＴＳＣ書込処理は、スレッドオフセット値に対する直接書込処理となる。さまざまな実施形態によると、所望のコアＴＳＣ値の書込を実行した後にソフトウェアが可能な場合にスレッドオフセット値を生成する代わりに、スレッドオフセット値への直接アクセスは、所望値をスレッドオフセット値ストレージに直接書き込むように行なうことができる。一実施形態によると、スレッドオフセット値は、モデル固有レジスタ（ＭＳＲ）に格納されているとしてよい。このため、これらの実施形態では、スレッドオフセットストレージ１８５はＭＳＲとして実現されるとしてよい。したがって、このＭＳＲへの書込みは、ＭＳＲ命令への書込みを用いて実行されるとしてよい。一部の実施形態によると、スーパーバイザソフトウェア、例えば、ＯＳ、ＶＭＭまたはその他の特権ソフトウェアを用いてこのＭＳＲへの書込みを実行するとしてよい。
【００２２】
このため、さまざまな実施形態では、このスレッドオフセット値は直接書き込まれるので、複数のスレッド間で複雑且つ時間のかかる同期処理を実行する必要がなくなるとしてよい。図３には、本発明の一実施形態に係る、スレッドオフセット値を更新する方法のフローチャートを示す。尚、さまざまな実施形態によると、図３に示す方法は、バリア処理または同期処理を一切必要とすることなくスレッド間およびコア間でのコンシステンシの実現を可能とするべく実行され得る。方法２００は、例えば、ＯＳまたはＶＭＭ等のスーパーバイザソフトウェアを用いて実現されるとしてよいが、本発明の範囲はこれに限定されない。具体的な一実施例によると、１つの命令、例えば、ＴＳＣ更新命令によって、図３に示す複数の処理が実行されるとしてよい。
【００２３】
同図に示すように、方法２００は、ＴＳＣ値を記録することから開始されるとしてよい（ブロック２１０）。一部の実施形態によると、図３の方法は、低電力状態に対するユーザ要求に応じて開始されるとしてよい。例えば、ユーザは、（例えば、ラップトップキーボードのＦ４ファンクションキーによって）冬眠処理を選択して、システムのスタンバイ状態または冬眠状態を開始するとしてよい。この選択に応じて、ＯＳまたはその他のスーパーバイザソフトウェアは、所与の低電力状態に応じて、システムメモリまたは大容量ストレージ（例えば、ディスク）に現在の非コアＴＳＣ値を記録するとしてよい。そして、当該システムを一時停止するとしてよい（ブロック２２０）。例えば、ＯＳは、いわゆるＳ状態を開始して、当該システムを、ＡＣＰＩのＳ３状態またはＳ４状態等の一時停止状態とするとしてよい。Ｓ３状態またはＳ４状態では、コアロジックおよび非コアロジックの両方を含むさまざまなプロセッサエンティティを、プロセッサへの電力供給が完全にオフにされるスリープ状態とする。
【００２４】
所定時間が経過した後（ブロック２３０）、当該システムは一時停止状態から再開されるとしてよい（ブロック２４０）。この所定時間は、ユーザが処理を再開した場合、または、プラットフォームタイマが切れることに応じて、終了するとしてよい。この時点において、非コアおよびコアの両方のさまざまなタイムスタンプカウンタは、リセット時に、ゼロに初期化されるとしてよい。さまざまな実施形態によると、全てのＴＳＣカウンタが初期化されるとしてよい（例えば、全てのＴＳＣカウンタが同時にリセットされる）。さらにマルチソケットシステムでは、全てのソケットが同時にリセットされるとしてよい。
【００２５】
一時停止前に実行されていたソフトウェアはＴＳＣカウンタを読み出しており、時間が経過することで値が増加していると推測するので、ＯＳは、ＴＳＣカウンタを一時停止前の値または現在の実測時間へと復元することができる。この判断は、例えば制御値に基づき、ＯＳによって行われるとしてよい。一実施形態によると、実測時間は、システムの実際の時間のクロックから取得されるとしてよい。このため、記録されたＴＳＣ値を読み出すとしてよい（ブロック２５０）。そして、この記録されていたＴＳＣ値（前から格納されていた値または取得された実際の時間のクロックの値）をスレッドオフセット値に直接書き込むとしてよい（ブロック２６０）。一実施形態によると、このスレッドオフセット値は、リセット時においてアクティブな全てのコアで実行中のアクティブな全てのスレッドについて、各スレッドオフセットストレージに直接書き込まれるとしてよい。尚、この書込処理を実行する際には、複数のスレッド間および／または複数のコア間で同期させる必要はないとしてよい。
【００２６】
このように、バリア処理またはその他の同期処理を必要とすることなく、スレッドの同期を効率的に実行し得る（ブロック２７０）。このようにスレッドオフセット値を記録する場合、所与のスレッドはこの後コアにおいて実行される際には、コアＴＳＣカウンタ（および非コアＴＳＣカウンタ）に関してスレッドから見た時間を反射するべく、当該スレッドオフセット値が利用され得る。このため、この時点において、通常のカウント処理は非コアＴＳＣカウンタおよびアクティブなコアＴＳＣカウンタの両方で継続して行なわれ、ゼロからカウントを開始する。一実施形態によると、同じくこの時点において、コアスナップショットストレージ１４０もまたゼロにリセットされるとしてよい。このため、同期値およびコアＴＳＣカウンタ値に関して上述したさまざまな計算結果を受信すること、および、スレッドオフセット値（および、所与のコアについて周波数が更新される場合には更新された任意のスナップショット値）によって、さまざまなスレッドから見た時間を維持するとしてよい。システムと同時には電力供給を受けないコアまたはその他のスレッドオフセット値については、記録されたＴＳＣ値は後に当該スレッド／コアの実行が開始されると書き込まれるとしてよい。このため、このように記録されたＴＳＣ値は、複数の異なるスレッド／コアのオフセットの更新について、発生するタイミングを異ならせるが同じ同期値を受信させるための同期値として扱われる。さらに、この同期値は、同期処理／バリア処理を必要とすることなく、複数の異なるタイミングで供給することができる。図３の実施形態で具体的な実施例を図示するが、本発明の範囲はこれに限定されない。
【００２７】
図４には、本発明の一実施形態に係るプロセッサコアのブロック図を示す。図４に示すように、プロセッサコア３００は、マルチステージ・パイプライン方式のアウト・オブ・オーダ・プロセッサであってよい。プロセッサコア３００は、本発明の一実施形態に係るプロセッサ待機状態に関連付けて用いられるさまざまな特徴を説明するべく、図４では比較的簡略化して図示している。
【００２８】
図４に示すように、コア３００は、実行すべき命令をフェッチして、後にプロセッサで利用できるように準備するべく用いられるフロントエンドユニット３１０を備える。例えば、フロントエンドユニット３１０は、フェッチ部３０１、命令キャッシュ３０３、および、命令デコーダ３０５を有するとしてよい。一部の実施例では、フロントエンドユニット３１０はさらに、マイクロコードストレージおよびマイクロ演算ストレージと共に、トレースキャッシュを有するとしてよい。フェッチ部３０１は、例えば、メモリまたは命令キャッシュ３０３からマクロ命令をフェッチして、命令デコーダ３０５に供給してプリミティブ、つまり、プロセッサが実行するマイクロ演算にデコードさせるとしてよい。フロントエンドユニット３１０で処理されるべき命令の１つに、本発明の一実施形態に係るＴＳＣ更新命令があるとしてよい。この命令によって、フロントエンドユニットは、同期処理／バリア処理を必要とすることなくスレッドオフセット値を直接更新する技術に対応付けられて上述したような処理の実行を可能とするさまざまなマイクロ演算にアクセスできるようになるとしてよい。
【００２９】
フロントエンドユニット３１０と実行ユニット３２０との間には、マイクロ命令を受信して実行のために用意するアウト・オブ・オーダ（ＯＯＯ）エンジン３１５が結合されている。より具体的に説明すると、ＯＯＯエンジン３１５は、マイクロ命令フローを並び替えて実行のために必要なさまざまなリソースを割り当てると共に、レジスタファイル３３０および拡張レジスタファイル３３５等のさまざまなレジスタファイル内の格納位置に論理レジスタをリネームするためのさまざまなバッファを有するとしてよい。レジスタファイル３３０は、整数処理および浮動小数点処理について別々のレジスタファイルを有するとしてよい。拡張レジスタファイル３３５は、ベクトルサイズのユニットについて、例えば、１レジスタにつき２５６ビットまたは５１２ビットを格納するとしてよい。
【００３０】
実行ユニット３２０にはさまざまなリソースが設けられているとしてよく、例えば、さまざまな整数ロジックユニット、浮動小数点ロジックユニット、および、単一命令多重データ処理（ＳＩＭＤ）ロジックユニット等の専用ハードウェアを含む。例えば、このような実行ユニットは、１以上の算術論理演算ユニット（ＡＬＵ）３２２を含むとしてよい。また、本発明の一実施形態に係るタイミングロジック３２４が設けられているとしてよい。このようなタイミングロジックは、ＴＳＣの更新を実行するために用いられる処理のうち所定のものを実行するために、そして、スレッドオフセット値を直接更新するためのさまざまな処理を実行するために用いられるとしてよい。ＴＳＣの更新には、１以上のＡＬＵ３２２を制御することを含む。以下でさらに説明するが、このような更新を処理するロジックをさらに、プロセッサの別の部分、例えば非コア等に設けるとしてよい。図４にはさらに、タイマ群３２６を図示している。本明細書における分析に関連するタイマには、コアＴＳＣタイマおよびタイマ値を調整するためのさまざまなストレージがある。結果は、退避ロジック、つまり、リオーダバッファ（ＲＯＢ）３４０に供給されるとしてよい。より具体的には、ＲＯＢ３４０は、実行される命令に対応付けられている情報を受信するためのさまざまなアレイおよびロジックを含むとしてよい。この情報はこの後、ＲＯＢ３４０によって分析されて、命令が有効に退避させられて結果のデータがプロセッサのアーキテクチャ状態にコミットされているか否か、または、命令を適切に退避させることを妨げるような１以上の例外が発生したか否かを判断する。言うまでも無く、ＲＯＢ３４０は退避に対応付けられている他の処理も実行するとしてよい。
【００３１】
図４に示すように、ＲＯＢ３４０は、キャッシュ３５０に結合されている。キャッシュ３５０は、一実施形態によると、低レベルキャッシュ（例えば、Ｌ１キャッシュ）であってよいが、本発明の範囲はこれに限定されない。また、実行ユニット３２０は、キャッシュ３５０に直接結合され得る。キャッシュ３５０からは、高位レベルのキャッシュ、システムメモリ等との間でデータ通信が実行されるとしてよい。図４の実施形態ではこのような上位図が図示されているが、本発明の範囲はこれに限定されないと理解されたい。
【００３２】
図５には、本発明の一実施形態に係るプロセッサのブロック図を示している。図５に示すように、プロセッサ４００は、複数のコア４１０ａから４１０ｎを備えるマルチコアプロセッサであってよい。一実施形態によると、各コアは、図４を参照して上述したコア３００として構成されているとしてよい。さまざまな構成要素から構成されている非コア４２０には、インターコネクト４１５を介して、さまざまなコアが結合されているとしてよい。同図に示すように、非コア４２０は、共有キャッシュ４３０を有するとしてよい。共有キャッシュ４３０は、最終レベルキャッシュであってよい。また、非コアは、集積化されているメモリコントローラ４４０、さまざまなインターフェース４５０、および、タイミング制御部４５５を有するとしてよい。コアＴＳＣの更新に対応付けられている機能のうち少なくとも一部は、タイミング制御部４５５で実現されるとしてよい。例えば、タイミング制御部４５５は、図１を参照しつつ上述したような非コアＴＳＣカウンタ、スナップショットコントローラ、および、スナップショットストレージを含むとしてよい。同図に示すように、プロセッサ４００は、例えば、メモリバスを介して、システムメモリ４６０と通信を行うとしてよい。また、インターフェース４５０によって、周辺デバイス、大容量格納装置等のさまざまなチップ外素子との間で接続を行うことができる。図５の実施形態でこの具体的な実施例を図示しているが、本発明の範囲はこれに限定されない。
【００３３】
他の実施形態によると、プロセッサアーキテクチャは、ターゲットＩＳＡと呼ばれる第２のＩＳＡに準拠しており、プロセッサがソースＩＳＡと呼ばれる第１のＩＳＡの命令を実行できるようにエミュレーションフィーチャを含むとしてよい。一般的に、ＯＳおよびアプリケーションプログラムの両方を含むソフトウェアが、ソースＩＳＡにコンパイルされて、ハードウェアが、特別な性能および／またはエネルギー効率を特徴とする所与のハードウェア実装用に特別に設計されたターゲットＩＳＡを実装する。
【００３４】
図６は、本発明の別の実施形態に係るプロセッサのブロック図を示す。図６に示すように、システム５００は、プロセッサ５１０およびメモリ５２０を備える。メモリ５２０は、システムソフトウェアおよびアプリケーションソフトウェアの両方を保持する従来のメモリ５２２と、ターゲットＩＳＡを備えるソフトウェアを保持する隠しメモリ５２４とを有する。同図に示すように、プロセッサ５１０は、ソースコードをターゲットコードに変換するエミュレーションエンジン５３０を有する。エミュレーションは、インタープリテーションまたはバイナリトランスレーションで実行するとしてよい。インタープリテーションは通常、最初にコードを発見した場合にコードに対して用いられる。その後、頻繁に実行されるコード領域（例えば、ホットスポット）がダイナミックプロファイリングによって発見されると、ターゲットＩＳＡに変換されて、隠しメモリ５２４内のコードキャッシュに格納される。当該変換プロセスの一環として最適化が行なわれ、利用が非常に多いコードは後に、さらに最適化されるとしてよい。変換後のコードブロックは、コードキャッシュ５２４に保持されて、繰り返し再利用され得る。
【００３５】
さらに図６を参照して説明を続けると、プロセッサ５１０は、マルチコアプロセッサのコアの１つであってよいが、命令キャッシュ（Ｉキャッシュ）５５０に対して命令ポインタアドレスを供給するプログラムカウンタ５４０を有する。同図に示すように、Ｉキャッシュ５５０はさらに、所与の命令アドレスについてミスすると、隠しメモリ部分５２４からターゲットＩＳＡ命令を直接受信するとしてよい。したがって、Ｉキャッシュ５５０は、入力命令を受信するターゲットＩＳＡのデコーダであるデコーダ５６０に供給され得るターゲットＩＳＡ命令を格納しているとしてよい。デコーダ５６０は、マクロ命令レベルのデコーダであってよく、当該命令をプロセッサパイプライン５７０内で実行するためのマイクロ命令に変換する。本発明の範囲はこれに限定されないが、パイプライン５７０は、命令を実行および退避させるためのさまざまなステージを含むアウト・オブ・オーダ・パイプラインであってよい。上述したものと同様のさまざまな実行ユニット、タイマ、カウンタ、およびストレージをパイプライン５７０内に設けて、ＴＳＣ更新処理を実行するとしてよい。
【００３６】
実施形態は多くの異なる種類のシステムで実現するとしてよい。図７には、本発明の一実施形態に係るシステムのブロック図を示す。図７に示すように、マルチプロセッサシステム７００は、ポイント・ツー・ポイント・インターコネクト・システムであり、ポイント・ツー・ポイント・インターコネクト７５０を介して結合されている第１のプロセッサ７７０および第２のプロセッサ７８０を備える。図７に示すように、プロセッサ７７０およびプロセッサ７８０はそれぞれ、マルチコアプロセッサであってよく、第１のプロセッサコアおよび第２のプロセッサコア（つまり、プロセッサコア７７４ａおよび７７４ｂ、ならびに、プロセッサコア７８４ａおよび７８４ｂ）を有する。しかし、プロセッサが備えるコアの数はこれより多くするとしてもよい。プロセッサコアはそれぞれ、同期／バリア処理を必要とすることなく所与の実行中のスレッドについて更新可能なコアＴＳＣカウンタを含むとしてよい。
【００３７】
さらに図７を参照しつつ説明を続けると、第１のプロセッサ７７０はさらに、メモリコントローラハブ（ＭＣＨ）７７２、ならびに、ポイント・ツー・ポイント（Ｐ−Ｐ）インターフェース７７６および７７８を有する。同様に、第２のプロセッサ７８０は、ＭＣＨ７８２、ならびに、Ｐ−Ｐインターフェース７８６および７８８を有する。図７に示すように、ＭＣＨ７７２および７８２はそれぞれ、プロセッサを対応するメモリ、つまり、メモリ７３２およびメモリ７３４に結合する。メモリ７３２およびメモリ７３４は、メインメモリ（例えば、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ））のうち対応するプロセッサにローカルに取り付けられている一部分であってよい。第１のプロセッサ７７０および第２のプロセッサ７８０はそれぞれ、Ｐ−Ｐインターコネクト７５２および７５４を介してチップセット７９０に結合されているとしてよい。図７に示すように、チップセット７９０は、Ｐ−Ｐインターフェース７９４および７９８を有する。
【００３８】
チップセット７９０はさらに、チップセット７９０をＰ−Ｐインターコネクト７３９を介して高性能グラフィクスエンジン７３８に結合するインターフェース７９２を有する。また、チップセット７９０は、インターフェース７９６を介して第１のバス７１６に結合されるとしてよい。図７に示すように、さまざまな入出力（Ｉ／Ｏ）デバイス７１４は、第１のバス７１６を第２のバス７２０に結合しているバスブリッジ７１８と共に、第１のバス７１６に結合されているとしてよい。一実施形態によると、第２のバス７２０には、例えば、キーボード／マウス７２２、通信デバイス７２６、および、コード７３０を含むディスクドライブ等の大容量格納装置であるデータ格納部７２８を含むさまざまなデバイスが結合されているとしてよい。また、オーディオＩ／Ｏ７２４が第２のバス７２０に結合されているとしてよい。
【００３９】
限られた数の実施形態を参照しつつ本発明を説明してきたが、当業者であれば、多くの点で変形および変更し得ることに想到するであろう。特許請求の範囲では、このような変形例および変更例も全て本発明の真の意図および範囲に入るものとする。
【図１】
0005438215.tif 000005
【図２】
0005438215.tif 000006
【図３】
0005438215.tif 000007
【図４】
0005438215.tif 000008
【図５】
0005438215.tif 000009
【図６】
0005438215.tif 000010
【図７】
0005438215.tif 000011