(57)【特許請求の範囲】
【請求項１】
各プロセッサ・クロック・サイクルで、各スレッドが特定のプロセッサ・サイクル状態にあるか否かを決定するステップと、
プロセッサ・リソースの相対的な使用を検出するステップと、
前記決定ステップに応答して、前記相対的な使用に合わせてそれぞれが複数のスレッドのうちの特定の１つに関連付けられた複数のリソース使用カウンタを更新するステップであって、前記更新するステップが、前記複数のスレッドのうちのいずれも前記特定のサイクル状態にない旨を決定するステップに応答して、前記複数の前記カウンタのそれぞれを均等に更新する、ステップと、
を有する、前記複数のスレッドの並列実行が可能なプロセッサ内のプロセッサ時間使用に基づいたアカウンティング方法。
【請求項２】
さらに前記決定するステップが、各スレッドが特定のサイクル状態にあるリソースの数を決定する、請求項１に記載の方法。
【請求項３】
前記更新するステップが、前記関連付けられたスレッドによって使用されるリソースの前記決定された数に合わせて、前記複数の前記カウンタのそれぞれを分数値に更新する、請求項２に記載の方法。
【請求項４】
前記特定のサイクル状態がスレッドへの命令ディスパッチを示す状態である、請求項１または２に記載の方法。
【請求項５】
前記複数のスレッドのうちの１つまたは複数が前記特定のサイクル状態にある旨を決定する前記決定ステップに応答して、前記更新するステップが前記１つまたは複数のスレッドに関連付けられた前記複数の前記カウンタのそれぞれを均等に更新する、請求項１から４のいずれか一項に記載の方法。
【請求項６】
前記更新するステップが、前記複数のスレッドのうちのいずれも前記特定のサイクル状態にない旨をさらに決定する前記決定ステップに応答して、前記定期的な間隔のうちの先行する１つからの前記関連付けられたスレッドによって使用されるリソースの前記決定された数に合わせて、前記複数の前記カウンタのそれぞれを分数値に更新する、請求項１から５のいずれか一項に記載の方法。
【請求項７】
前記更新するステップが、前記複数のスレッドのうちのいずれも前記特定のサイクル状態にない旨を決定する前記決定ステップに応答して、前記関連付けられたスレッドの優先順位レベルに合わせて、前記カウンタのそれぞれを分数値に更新する、請求項１から６のいずれか一項に記載の方法。
【請求項８】
前記プロセッサが単一スレッド・モードのオペレーションおよびマルチスレッド・モードのオペレーションを有し、
前記プロセッサが前記単一スレッド・モードであるか否かを決定するステップと、
前記プロセッサが前記単一スレッド・モードである旨の決定ステップに応答して、各プロセッサ・サイクルが前記プロセッサ内で実行する単一スレッドに属するように前記更新を実行するステップと、
をさらに有する、請求項１から７のいずれか一項に記載の方法。
【請求項９】
複数のスレッドによって使用される複数のリソースと、
前記複数のリソースに結合された命令制御ユニットであって、前記命令制御ユニットが各プロセッサ・クロック・サイクルでプロセッサによって使用されるいくつかのリソースを制御する、命令制御ユニットと、
それぞれが前記複数のスレッドのうちの特定の１つに関連付けられる、複数のプロセッサ・リソース使用サイクル・カウンタと、
前記命令制御ユニットおよび前記カウンタに結合された論理回路であって、前記論理回路が、前記関連付けられたスレッドによる前記リソースの相対的な使用の検出に合わせて前記カウンタのそれぞれを更新し、前記論理回路が、各スレッドが特定のサイクル状態にあるか否かを決定し、前記論理回路が、前記複数のスレッドのうちのいずれも前記特定のサイクル状態にない旨の決定に応答して、前記複数の前記カウンタのそれぞれを均等に更新する、論理回路と、
を有する、複数のスレッドの並列実行をサポートするプロセッサ。
【請求項１０】
さらに前記論理回路が、各スレッドが特定のサイクル状態にあるリソースの数を決定する、請求項９に記載のプロセッサ。
【請求項１１】
前記論理回路が、前記関連付けられたスレッドによって使用されるリソースの前記決定された数に合わせて、前記複数の前記カウンタのそれぞれを分数値に更新する、請求項１０に記載のプロセッサ。
【請求項１２】
前記特定のサイクル状態がスレッドへの命令ディスパッチを示す状態である、請求項９、１０、または１１に記載のプロセッサ。
【請求項１３】
前記論理回路が、前記複数のスレッドのうちの１つまたは複数が前記特定のサイクル状態にある旨の決定に応答して、前記１つまたは複数のスレッドに関連付けられた前記複数の前記カウンタのそれぞれを均等に更新する、請求項９から１２のいずれか一項に記載のプロセッサ。
【請求項１４】
前記論理回路が、前記複数のスレッドのうちのいずれも前記特定のサイクル状態にない旨の決定に応答して、前記定期的な間隔のうちの先行する１つの前記関連付けられたスレッドによって使用されるリソースの前記決定された数に合わせて、前記複数の前記カウンタのそれぞれを分数値に更新する、請求項９から１３のいずれか一項に記載のプロセッサ。
【請求項１５】
前記論理回路が、前記複数のスレッドのうちのいずれも前記特定のサイクル状態にない旨の前記決定に応答して、前記関連付けられたスレッドの優先順位レベルに合わせて、前記カウンタのそれぞれを分数値に更新する、請求項９から１４のいずれか一項に記載のプロセッサ。
【請求項１６】
前記プロセッサが単一スレッド・モードのオペレーションおよびマルチスレッド・モードのオペレーションを有し、前記論理回路が、前記プロセッサが前記単一スレッド・モードであるか否かを決定し、前記プロセッサが前記単一スレッド・モードである旨の決定に応答して、各サイクルで、前記プロセッサ内で実行する単一スレッドに関連付けられた前記カウンタを更新する、請求項９から１５のいずれか一項に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】  本発明は、一般にプロセッサおよびコンピューティング・システムに関し、とりわけ、同時マルチスレッド（ＳＭＴ）プロセッサに関する。本発明は、プロセッサの使用アカウンティング・システムにも関する。
【背景技術】
【０００２】  現在の高速プロセッサには、命令の同時実行、命令の投機的実行およびローディング、ならびにプロセッサ内の様々なリソースの同時オペレーションの機能が含まれる。特に、複数の実行スレッドがプロセッサを使用できるように、および一般に単一スレッドによる使用よりも効果的にリソースが使用できるように、プロセッサ内の１つまたは複数のスレッドの実行を管理することが望ましいことがわかってきた。【０００３】  従来のプロセッサ設計は、１つのスレッドの実行から他のスレッドの実行へとハードウェア状態を切り替えることにより、複数スレッドの管理という問題に対処してきた。こうしたプロセッサはハードウェア・マルチスレッド（ＨＭＴ）プロセッサと呼ばれ、一方または他のスレッドの実行間でのハードウェアの切り替えを提供することが可能である。ＨＭＴプロセッサは、ハードウェアが他のスレッドに実行を切り替えられることによって、機能停止スレッド上での待機という制約を克服する。他方のスレッドがキャッシュ・ミスなどの機能停止状態を経験した場合、各スレッドに実行スライスを割り振ることによって、同時ではないが、両方のスレッドを実行することができる。【０００４】  同時マルチスレッド（ＳＭＴ）プロセッサでは、複数スレッドがプロセッサ・リソースを同時に使用できるため、プロセッサ・リソースのさらに効率的な使用が提供される。複数のスレッドがＳＭＴプロセッサ内で並行して実行されるため、浮動小数点ユニット、固定小数点命令ユニット、ロード／ストア・ユニット、およびその他などの複数のプロセッサ実行ユニットが、複数のスレッドのうちの１つ（または実行ユニットの機能に応じて複数）に関するタスクを同時に実行することができる。ストレージおよびレジスタ・リソースをスレッドごとに割り振り、ＨＭＴの完全な内部状態切り替えを避けることもできる。【０００５】  たとえばいくつかのプロセッサの実行が、他の用途ではなく税金目的でハードウェアを様々な方法で資産計上（ｃａｐｉｔａｌｉｚｅ）することが可能な、研究および開発活動のためである場合、プロセッサの時間使用に関するアカウンティングは、コンピュータ・サービス販売の管理にとって、ならびに内部の原価計算（費用勘定）管理にとって必要である。サーバを区分し、プロセッサ時間を「オンデマンド」または使用ごとに複数のユーザに伝えることができる。さらにプロセッサ時間はハードウェア所有者または貸主が利用し、サービスに対する費用を支払っているエンティティに下請けに出すことも可能である。したがって、コンピュータのアーキテクチャおよびソフトウェア・モデルにおいて、プロセッサ実行時間に関する正確なアカウンティングが必要である。また、特にスレッドごとのプロセッサ時間の使用は、最適化のためのプロファイリング・プログラムにとって有用である。【０００６】  単一スレッド処理システムでは、一般にアカウンティングは簡単である。たとえ複数のプログラムで複数のスレッドが実行されている場合であっても、同時ではなく順番に実行されているので、プロセッサ・サイクルの使用カウントまたは単なる「掛け時計（ウォールクロック）」での時間測定を完全なジョブ実行用に提供することができる。サ��クル時間の計算はジョブが完了するまで維持され、合計はアカウンティング目的で提示される。測定された時間は、プロセッサ・リソースの使用に直接関連づけられる。【０００７】  ＨＭＴマシンのタスクはプロセッサ・ハードウェアでのタスクと同様であり、一度に１つだけのスレッドが実行され、関連するスレッドがアクティブな間のみカウンタを動作させることによって、複数のカウンタを使用して各スレッドのプロセッサ時間使用を追跡する。しかしながらＳＭＴプロセッサでは、２つまたはそれ以上のスレッドを単一のプロセッサ・コア内で同時に実行させることが可能であり、各スレッドによるリソースの使用（リソース・ユーセッジ）は単一の実行カウントまたは時間測定によって容易に決定されない。
【発明の開示】
【発明が解決しようとする課題】
【０００８】  したがって、ＳＭＴプロセッサにおけるプロセッサ時間使用をアカウントすることが可能な方法および装置を提供することが望ましい。さらに、こうしたプロセッサ内で実行しているスレッド間でのＳＭＴプロセッサの使用内のリソース・ユーセッジをアカウントするための方法を提供することも望ましい。
【課題を解決するための手段】
【０００９】  同時マルチスレッド（ＳＭＴ）プロセッサ内でのプロセッサ時間使用をアカウントする目的は、プロセッサの使用カウンタを有するプロセッサ、およびプロセッサ時間使用をアカウントするための方法で達成される。【００１０】  プロセッサは、プロセッサ内で実行中の各スレッドに関連付けられた複数のプロセッサ使用サイクル・カウンタを組み込むことで、スレッドごとのプロセッサ・リソース・ユーセッジに対応するカウントを提供する。リソース・ユーセッジがスレッドごとに検出され、サイクル・カウンタを更新するために使用される。リソース・ユーセッジの検出は、スレッド用のアクティブな命令処理を示す特定のサイクル状態の存在を検出することによって実行可能である。サイクル状態は、各クロック・サイクルであることが可能な定期的なサンプリングによって検出され、検出されたサイクル状態に合わせて増分（インクリメント）される（または代替方法として減分（デクリメント）される）。検出された状態は、各スレッドによるプロセッサ・リソース・ユーセッジを示すように選択される。【００１１】  検出されたサイクル状態が、スレッド用の命令のディスパッチである場合がある。どのスレッドも特定のサイクル状態にないサイクルは各スレッドに均等にチャージ（ｃｈａｒｇｅ）するか、またはそのサイクルをすべてのスレッド用の最後のディスパッチ状態に合わせてチャージすることができる。別の方法として、指示のないサイクルを順序付けされたスレッド優先順位に合わせてチャージすることも可能であり、これによって関連スレッドのリソース・ユーセッジの指示が与えられる。１つのスレッドが特定のサイクル状態にあり、他のスレッドがその状態にないサイクルは、特定のサイクル状態にあるスレッドに完全にチャージできるため、アイドル状態のスレッドを介してアクティブなスレッドへのチャージを提供する。また、スレッドごとに所与のサイクルで使用されるリソースの数を示す分数値（ｆｒａｃｔｉｏｎａｌ  ｖａｌｕｅ）に合わせてチャージすることもできる。【００１２】  プロセッサは、ＳＭＴおよび単一スレッド（ＳＴ）の両方のオペレーティング・モードとすることが可能であり、アカウンティングは選択されたモードに選択的に応答し、ＳＴモードで実行する単一スレッドにすべてのサイクルをチャージすることができる。【００１３】  米国特許公報２００１／００５６４５６号は、ＯＳ優先順位情報とスレッド・ヒューリスティックスとを組み合わせて処理のためのスレッド命令の選択に動的優先順位を与える、優先順位に基づいた同時アーキテクチャを開示している。【００１４】  本発明の前述および他の目的、特徴、および利点については、以下の、とりわけ添付の図面に示された本発明の好ましい実施形態の説明から明らかになろう。【００１５】  本発明の特徴と考えられる新規な機能は、添付の特許請求の範囲に記載されている。しかしながら、本発明それ自体、ならびにその好ましい使用方法、他の目的、および利点は、同じ参照番号が同じコンポーネントを示す添付の図面と共に以下の例示的実施形態の詳細な説明を参照することによって、最も良く理解されよう。
【発明を実施するための最良の形態】
【００１６】  次に図を参照、特に図１を参照すると、本発明の一実施形態に従ったシステムのブロック図が示されている。システムには、スーパースカラ・プロセッサを形成する、ブリッジ３７を介して他のプロセッサ・グループに接続可能なプロセッサ・グループ５が含まれる。プロセッサ・グループ５は、Ｌ３キャッシュ・ユニット３６、システム・ローカル・メモリ３８、および様々な周辺装置３４、ならびに２つのサービス・プロセッサ３４Ａおよび３４Ｂに接続される。サービス・プロセッサは障害監視、始動支援、およびテスト機能をプロセッサ・グループ５に提供し、他のプロセッサ・グループへの、ならびにプロセッサ３０Ａ〜Ｄのすべてを接続する、それら専用の相互接続パスを有することができる。【００１７】  プロセッサ・グループ５内部には複数のプロセッサ３０Ａ〜Ｄがあり、一般に単一のユニット内に形成され、Ｌ２キャッシュ３２およびメモリ・コントローラ４に結合された複数のプロセッサ・コア１０Ａおよび１０Ｂが含まれる。コア１０Ａおよび１０Ｂは、汎用処理機能に関するデータ値での命令実行およびオペレーション（演算）を提供する。ブリッジ３７ならびにシステム内の他のブリッジはワイド・バスを介した他のプロセッサ・グループとの通信を提供し、バス３５は、プロセッサ３０Ａ〜Ｄ、ブリッジ３７、周辺装置３４、Ｌ３キャッシュ３６、およびシステム・ローカル・メモリ３８の接続を提供する。他のグローバル・システム・メモリは、すべてのプロセッサ・グループによる対称アクセスのためにブリッジ３７外部に結合することができる。【００１８】  プロセッサ・コア１０Ａおよび１０Ｂは、複数のスレッドの並行（同時）実行が可能な同時マルチスレッド（ＳＭＴ）プロセッサである。さらにプロセッサ・コア１０Ａおよび１０Ｂは、プログラム実行条件が単一スレッド・オペレーションを指示している場合、たとえば、既知の時間までに優先順位の高いプログラムの実行を完了しなければならない場合、またはマルチスレッド・プロセッサ内の１つのスレッドがアイドル状態であるとわかっている場合に、単一スレッドを効率的に実行するために単一スレッド・オペレーティング・モードをサポートする。マルチスレッド化は、スレッドがしばしば他のタスクが完了するのを待ってアイドル状態であるため、全体としてシステム効率上の利点はあるが、単一スレッドのフルタイム実行を介して何らかの非効率が持ち込まれる。したがって、単一スレッド・モードとマルチスレッド・モードとの間での移行により、前述の条件のうちの１つまたは複数への適合に利点を与え、本発明の実施形態は、こうした移行に応答したプロセッサ時間アカウンティングを提供するプロセッサに適合する方法でプロセッサ時間に関するアカウンティングを提供する。【００１９】  次に図２を参照すると、プロセッサ・コア１０Ａおよび１０Ｂと同一の機能を有するプロセッサ・コア１０の細部が示されている。バス・インターフェース・ユニット２３は、プロセッサ・コア１０を他のＳＭＴプロセッサおよび周辺装置に接続し、データ値を格納するためのＬ１  Ｄキャッシュ２２、プログラム命令を格納するためのＬ１  Ｉキャッシュ２０、およびキャッシュ・インターフェース・ユニット２１を、外部メモリ、プロセッサ、および他の装置に接続する。Ｌ１  Ｉキャッシュ２０は、命令を事前に取り出し（プリフェッチし）、投機的ローディング（ｓｐｅｃｕｌａｔｉｖｅ  ｌｏａｄｉｎｇ）および分岐予測機能（ｂｒａｎｃｈ  ｐｒｅｄｉｃｔｉｏｎ）を含むことができる、命令取り出しユニットＩＦＵ１６と共に、命令ストリームのローディングを提供する。命令シーケンサ・ユニット（ＩＳＵ）１２は、一般的なオペレーションを実行するための固定小数点ユニット（ＦＸＵ）１４および浮動小数点オペレーションを実行するための浮動小数点ユニット（ＦＰＵ）１５などの、様々な内部ユニット向けに発行される命令の順序付け（ｓｅｑｕｅｎｃｉｎｇ）を制御する。グローバル完了テーブル（ＧＣＴ）１３は、命令のターゲットである特定の実行ユニットが命令の実行完了を示すまで、タグを介してＩＳＵ  １２によって発行された命令を追跡する。【００２０】  固定小数点ユニット１４および浮動小数点ユニット１５は、汎用レジスタ（ＧＰＲ）１８Ａ、浮動小数点レジスタ（ＦＰＲ）１８Ｂ、条件レジスタ（ＣＲ）１８Ｃ、リネーム・バッファ１８Ｄ、カウント・レジスタ／リンク・レジスタ（ＣＴＲ／ＬＲ）１８Ｅ、および例外レジスタ（ＸＥＲ）１８Ｆなどの、様々なリソースに結合される。ＧＰＲ  １８ＡおよびＦＰＲ  １８Ｂは、ロード・ストア・ユニット（ＬＳＵ）１９によってＬ１  Ｄキャッシュ２２からロードおよびストアされたデータ値用にデータ値ストレージを提供する。ＣＲ  １８Ｃは条件付き分岐情報を格納し、リネーム・バッファ１８Ｄ（様々な内部実行ユニットに関連付けられたいくつかのリネーム・ユニットを有することができる）は、実行ユニット用にオペランドおよび結果ストレージを提供する。ＸＥＲ  １８Ｆは分岐および固定小数点例外情報を格納し、ＣＴＲ／ＬＲ  １８Ｅはプログラム分岐実行に関する分岐リンク情報およびカウント情報を格納する。ＧＰＲ  １８Ａ、ＦＰＲ  １８Ｂ、ＣＲ  １８Ｃ、リネーム・バッファ１８Ｄ、ＣＴＬ／ＬＲ  １８Ｅ、およびＸＥＲ  １８Ｆは、プログラムの実行中に情報を格納し、各実行スレッドに対する固定セットとして提供しなければならない、いくつかの固定（設計済み）レジスタを含むリソースであり、上記リソース内の他の非設計済みレジスタはリネーム使用が自由である。制御論理（回路）１１はプロセッサ・コア１０内の様々な実行ユニットおよびリソースに結合され、実行ユニットおよびリソースのパーベイシブ制御を提供するために使用される。ＳＣＯＭ／ＸＳＣＯＭインターフェース・ユニット２５は、外部サービス・プロセッサ３４Ａ〜Ｂへの接続を提供する。【００２１】  次に図３を参照すると、プロセッサ・コア１０内の機能ブロックの細部が示されている。ＩＳＵ  １２は、プロセッサ・コア１０を使用して実行中の特定のスレッドに対して命令がディスパッチされた場合に、制御論理（制御ロジック）１１に指示する。制御論理１１は、ディスパッチ検出回路４４によって検出された所与のサイクルで所与のカウンタに関連付けられたスレッド（ハーフサイクル・カウンタ４２Ａの場合はスレッド０、ハーフサイクル・カウンタ４２Ｂの場合はスレッド１）について、命令がＩＳＵ  １２に���ってディスパッチされたかどうかに応じて、ハーフサイクル・カウンタ４２Ａおよび４２Ｂを選択的に更新する。ハーフサイクル・カウンタ４２Ａおよび４２Ｂの出力は、タイムベース・サイクル・カウンタ４７に結合されたラッチ４３Ａおよび４３Ｂによってラッチされる。タイムベース・サイクル・カウンタ４７の８番目ごとのプロセッサ・サイクルでスレッド使用カウンタ４１Ａあるいは４１Ｂまたはその両方を増分（インクリメント）するためにラッチ４３Ａおよび４３Ｂの出力が提供され、タイムベース・サイクル・カウンタ４７がアクティブな８プロセッサ・サイクルごとに、スレッド使用カウンタ４１Ａあるいは４１Ｂまたはその両方の更新を提供する。（これにより、タイムベースが非アクティブである特別なオペレーションがアクティブ・スレッドにチャージされるのを防ぐことになる）。タイムベース・サイクル・カウンタ４７は、増分した後にラッチ４３Ａおよび４３Ｂをリセットする。スレッド使用カウンタ４１Ａあるいは４１Ｂまたはその両方の出力時に、前述のアクション（動作）が、プロセッサ用のタイムベース・カウンタの数（分数）部（ｆｒａｃｔｉｏｎ）であり、「使用時間」値中のスレッド・リソース・ユーセッジを計算するために直接使用可能なカウントを提供する。【００２２】  本発明の代替実施形態によれば、制御論理１１およびＩＳＵ  １２（またはプロセッサ・コア１０内の他の実行ユニット）は、他の特定のサイクル状態を使用して各サイクル中にハーフサイクル・カウンタ４２Ａならびに４２Ｂまたはその両方の更新をトリガすることができるが、本発明の例では、命令ディスパッチがコードの効率に依存するプロセッサ・コア１０を使用する各処理活動の進行または完了ではなく開始を測定するためのメカニズムを提供するような、命令ディスパッチが選択される。たとえば、非効率的にコード化されたプログラムは、完了をほとんど生成しない間に重要なプロセッサ・リソースを使用して、多くの不正な分岐予測およびその後の事前取り出し（プリフェッチ）およびフラッシュを生成する可能性がある。したがって、命令ディスパッチではなく命令完了を使用することで、非効率コードを実行するスレッドに対してより低いプロセッサ時間使用測定値を生成することになる。したがって、ハーフサイクル・カウンタ４１Ａおよび４１Ｂを更新するための特定のトリガ・イベントとして命令ディスパッチを使用することにより、非効率コードに「報いる（ｒｅｗａｒｄ）」ことのないプロセッサ・リソース・ユーセッジの推定値が提供される。【００２３】  従来のアカウンティング・モデルでは本質的にすべてのプロセッサ・コア１０の時間を特定のスレッドに割り振ることができたが、所与のプロセッサにおいてスレッドを同時に実行できないことにより、ＳＭＴプロセッサでは、スレッドごとのプロセッサ時間使用の「請求（ｂｉｌｌｉｎｇ）」を、プロセッサ・コア１０内で同時に実行することのできる２つまたはそれ以上のスレッドにわたって分散させなければならない。ＩＳＵ  １２がプロセッサ・コア１０を使用する任意のスレッド向けの命令ディスパッチでない場合、すべてのスレッドによるプロセッサ・コア１０の使用のアカウンティングが依然として��要である。スレッドは、ディスパッチされた命令の形で新しい作業を開始していないが依然としてプロセッサ・コア１０を「拘束（ｔｉｅ  ｕｐ）」しているか、または、命令ディスパッチ以外の実行段階ではアクティブである可能性がある。たとえば、１つのスレッドが長い事前取り出し（プリフェッチ）シーケンスを発生させ、他のスレッドが冗長な浮動小数点オペレーション（演算）を実行している可能性がある。プロセッサ・リソースおよび実行ユニットは、どちらのスレッドによってもアクティブに使用されている一方で、上記の例に従って数少ない命令完了のみが処理間隔に関連付けられることになる。完了よりも好ましい他の特定の命令状態が命令取り出し（フェッチ）であり、これは命令ディスパッチの指示と同様の指示を提供するが、ＦＸＵ  １４、ＦＰＵ  １５、およびそれらの関連するリソースを含む実行ユニットの使用ではなく、ＩＦＵ  １６およびＬ１  Ｉキャッシュ２０の使用の方により偏った使用カウントを提供する。【００２４】  したがって、本明細書で説明する例示的実施形態は、たとえ所与のサイクル（または、代替実施形態では、制御論理１１によって検出された他の特定のサイクル状態またはリソース・ユーセッジ中に何のディスパッチも発生しない場合であっても、実行ユニットおよびリソース・ユーセッジの推定値に基づいて、すべてのプロセッサ・コア１０サイクルをアカウンティングするためのメカニズムを提供する。任意のスレッドに対して何の命令ディスパッチも発生しないサイクルには、そのサイクルにプロセッサ・コア１０内で実行中の各スレッド（プロセッサ・コア１０からアンロードされておらず、依然としてプロセッサ・リソースを拘束しているアイドル・スレッドを含む）に対するサイクル値の等しい分割がアカウントされる。しかし、代替実施形態または制御論理１１の選択可能な動作では、制御論理１１は最新のディスパッチ状態を記憶しておき、代わりにこれを使用してハーフサイクル・カウンタ４２Ａあるいは４２Ｂまたはその両方を更新することができる。制御論理１１に関する他の代替実施形態では、プロセッサ・コア１０内で設定された相対的なスレッド優先順位を使用して、任意のスレッドに対して何のディスパッチも発生しないサイクルを適切に割り振るために、更新されたハーフサイクル・カウンタ４２Ａあるいは４２Ｂまたはその両方に使用されるクロック・サイクル値を分数値に（ｆｒａｃｔｉｏｎａｌｌｙ）分割する。【００２５】  同様に、命令が複数スレッドに対して所与のサイクル中にディスパッチされた場合、そのサイクルには命令がディスパッチされた各スレッドのサイクル値の等しい分割がアカウントされる。あるいはまた、制御論理１１はプロセッサ・コア１０内で設定された相対的なスレッド優先順位を使用して、すべてのスレッドに対してディスパッチが発生するサイクルを適切に割り振るために、更新されたハーフサイクル・カウンタ４２Ａあるいは４２Ｂまたはその両方に使用されるクロック・サイクル値を分数値に分割することができる。【００２６】  したがって、等しく分割する（および前述の代替実施形態としてリストされた優先順位または従来のサイクル・スキームではない）方法では、１つまたは２���のスレッドの実行をサポートするプロセッサ・コアにおいて、何のディスパッチも発生しないサイクル、または各スレッドに対して命令ディスパッチが発生するサイクルの各スレッドに対して、半分の値（１／２）がアカウントされる。１つのスレッドに対してのみ命令ディスパッチが発生するサイクルでは、命令ディスパッチが発生するスレッドがサイクル全体に対して請求される。制御論理１１は、いずれのスレッドもディスパッチしていない、スレッド０がディスパッチしている、スレッド１がディスパッチしている、または両方のスレッドがディスパッチしている、という４つの潜在的状態のうちの１つを検出し、前述のサイクル請求分散（ｄｉｓｔｒｉｂｕｔｉｏｎ）に合わせて、スレッド０ハーフサイクル・カウンタ４２Ａおよびスレッド１ハーフサイクル・カウンタ４２Ｂを更新する。【００２７】  前述の最低分散値は半分の（１／２）サイクル増分の割り振り（ａｌｌｏｃａｔｉｏｎ）に関するものであるため、ハーフサイクル・カウンタ４２Ａおよび４２Ｂは、ハーフサイクルにつき１またはフルサイクルにつき２の割り振りを増分（または減分）することによって更新される。実際には、スレッド使用カウンタ４１Ａおよび４１Ｂのそれぞれが、チップの領域、パワー、およびタイミングの理由で可能な命令ディスパッチ・レートの８分の１で（または同じ理由で、プロセッサ・サイクル時間の１／８として選択されたタイムベース・サイクル・カウンタ４７のレートにより）更新されるため、「設計済み」スレッド使用カウンタの一部を形成しない４ビット・ハーフサイクル・カウンタ４２Ａおよび４２Ｂは、オーバフローあたり有効８サイクル使用カウントを提供する（２の値がハーフサイクル・カウンタ４２Ａおよび４２Ｂの合計増分に割り振られることになるため）。ハーフサイクル・カウンタ４２Ａおよび４２Ｂは、アカウンティング・ルーチン（プログラム）がプロセッサ・サイクル時間使用情報を検索（ｒｅｔｒｉｅｖｅ）する際に、固定小数点ユニット１４によって読み取られるスレッド使用カウンタ４１Ａおよび４１Ｂの一部にオーバフローする。ハーフサイクル・カウンタ４２Ａおよび４２Ｂは、フルサイクル割り振りでは２つのサブカウント、またはハーフサイクル割り振りでは１つのサブカウントを加算する、加算器として実装される。【００２８】  本発明の代替実施形態では、プロセッサ・サイクル時間使用ユニット４０は、スレッド使用カウンタ４１Ａおよび４１Ｂを増分するための加算（または減分するための減算）を使用する。加算される値は、所与のスレッドに対して複数のディスパッチが実行されていることを検出するディスパッチ検出回路４４によって決定され、関連付けられたサブカウンタは、スレッドに対してディスパッチされた命令の数と、そのサイクルのすべてのスレッドに対してディスパッチされた命令の合計数との比に比例した値だけ（それに加算して）増分される。たとえば、プロセッサ・コア１０が２つのスレッドを実行しており、所与のサイクルで第１のスレッドに対して３つの命令がディスパッチされ、第２のスレッドに対して１つの命令がディスパッチされる場合、第１のスレッド用のスレッド使用カウンタに３／４の値が割り振られ、第２のスレッド用のスレッド使用カウンタには１／４が割り振られる。所与のサイクルで何のディスパッチも実行されない場合、そのサイクルは依然としてスレッド間で均等に割り振られる。【００２９】  次に図４を参照すると、本発明の一実施形態に従った方法が流れ図に示されている。記載された方法は、ＳＭＴおよびＳＴモードを有するＳＭＴプロセッサ内でのアカウンティングに関するものであり、ＳＭＴモードで複数のスレッドを同時に実行することができる。プロセッサがＳＴモードの場合（判断ステップ５０）、実行スレッド用のスレッド・サイクル・カウンタはサイクルごとに１サイクル値だけ更新される（ステップ５１）。プロセッサがＳＭＴモードの場合（判断ステップ５０）、１スレッドだけディスパッチしていれば（判断ステップ５２）、関連するスレッド・サイクル・カウンタは１サイクル値だけ更新される（ステップ５３）。すべてのスレッドがディスパッチしている場合（判断ステップ５４）、すべてのスレッド用のスレッド・サイクル・カウンタは、スレッドの数によって決定されたサイクルの分数値（ｆｒａｃｔｉｏｎ）に従って、または各スレッドに対して発行されたディスパッチ（または使用されたリソース）の数に従って、均等に更新される（ステップ５５）。スレッドがディスパッチしていない場合、スレッド・サイクル・カウンタは均等に更新するか、あるいは最新のディスパッチ・サンプリングに比例して、またはそれらの優先順位に比例して、更新することができる（ステップ５７）。最終的にスレッドをディスパッチしていない場合、スレッド・サイクル・カウンタは同じく均等に更新するか、あるいは最新のディスパッチ・サンプリングに比例して、またはそれらの優先順位に比例して、更新することができる（ステップ５８）。【００３０】  本発明について、特にその好ましい実施形態を参照しながら図示および説明してきたが、当業者であれば、前述および他の形式および細部の変更が本発明の趣旨および範囲を逸脱することなく実行可能であることを理解されよう。
【図面の簡単な説明】
【００３１】
【図１】本発明の一実施形態に従ったシステムを示すブロック図である。
【図２】本発明の一実施形態に従ったプロセッサ・コアを示すブロック図である。
【図３】図２のプロセッサ・コア１０内にある機能ユニットの細部を示すブロック図である。
【図４】本発明の一実施形態に従った方法を示す流れ図である。
【図１】
0004536717.tif 000002
【図２】
0004536717.tif 000003
【図３】
0004536717.tif 000004
【図４】
0004536717.tif 000005