(57)【要約】  スレッドがそのままでは命令リタイアに進むことができない場合に、優先度をスレッドに割り当てる方法、装置、及びシステムの実施形態。少なくとも１つの実施形態では、スレッドは、メモリライブロックブレーカロジック及び／又は飢餓回避ロジックを備えるマルチプロセッサシステムでの複数のアクティブスレッドのうちの１つである。他の実施形態についても説明し、権利主張する。【選択図】なし
2008513894.tif 000002
【特許請求の範囲】
【請求項１】
第１の論理プロセッサ及び第２の論理プロセッサを備えるプロセッサコアと、
前記第１の論理プロセッサに結合される第１のスレッドライブロックユニットと、
前記第２の論理プロセッサに結合される第２のスレッドライブロックユニットであって、
なお、前記第１のライブロックユニットは、該第１のライブロックユニットによって実行に利用可能な命令の欠如に応答して該第２のライブロックユニットのストールを要求し、
アービトレータと
を備え、
前記第１のスレッドライブロックユニット、前記第２のスレッドライブロックユニット、及び前記アービトレータはさらに、前記第１の論理プロセッサと前記第２の論理プロセッサとに優先度を付与する、プロセッサ。
【請求項２】
前記第１のスレッドライブロック検出器はさらに、前記第１の論理プロセッサが、第１のソフトウェアスレッドの命令実行中に前進できないか否かを判断し、
前記第２のスレッドライブロック検出器は、前記第２の論理プロセッサが、第２のソフトウェアスレッドの命令実行中に前進できないか否かを判断する、請求項１に記載のプロセッサ。
【請求項３】
前記第１の論理プロセッサ及び前記第２の論理プロセッサに結合されるメモリライブロックユニットをさらに備える、請求項１に記載のプロセッサ。
【請求項４】
前記メモリライブロックユニットはさらに、メモリライブロック回避アクションを開始する、請求項３に記載のプロセッサ。
【請求項５】
前記アービトレータは、前記第１の論理プロセッサと前記第２の論理プロセッサとに優先度を付与して長待ち時間キャッシュミスを解決する、請求項１に記載のプロセッサ。
【請求項６】
前記第１のライブロックユニット及び前記第２のライブロックユニットはさらに、前記メモリライブロックユニットに優先度を譲る、請求項３に記載のプロセッサ。
【請求項７】
前記ライブロックユニットはさらに、実行に利用可能な命令の欠如に応答して飢餓回避アクションを開始する、請求項１に記載のプロセッサ。
【請求項８】
前記第１のライブロックユニットはさらに、前記第１の論理プロセッサに関連する第１のソフトウェアスレッドに、前記利用可能な命令の欠如が示されるか否かを判断し、
前記第２のライブロックユニットはさらに、前記第２の論理プロセッサに関連する第２のソフトウェアスレッドに、前記利用可能な命令の欠如が示されるか否かを判断する、請求項６に記載のプロセッサ。
【請求項９】
前記第１のライブロックユニットはさらに、前記第１の論理プロセッサが、前記第１のソフトウェアスレッドの命令実行中に前進できないとの判断に応答してアクティブになる、請求項２に記載のプロセッサ。
【請求項１０】
前記第２のライブロックユニットは、前記第１の論理プロセッサがアクティブである場合、該第１の論理プロセッサに優先度を譲る、請求項９に記載のプロセッサ。
【請求項１１】
前記第２のライブロックユニットはさらに、前記第２の論理プロセッサが、第２のソフトウェアスレッドの命令実行中に前進できないとの判断に応答してアクティブになる、請求項２に記載のプロセッサ。
【請求項１２】
前記第１のライブロックユニットは、前記第２の論理プロセッサがアクティブである場合、前記第１の論理プロセッサに優先度を譲る、請求項１１に記載のプロセッサ。
【請求項１３】
前記第１のライブロックユニットは、前記第２の論理プロセッサにより実行される高優先度ロック動作中、該第２の論理プロセッサに優先度を譲る、請求項１２に記載のプロセッサ。
【請求項１４】
前記プロセッサコアは、追加のライブロックユニットにそれぞれ結合される少なくとも１つの追加の論理プロセッサを備え、
前記少なくとも１つの追加のライブロックユニットは、前記第１のライブロックユニット、前記第２のライブロックユニット、及び前記アービトレータと共に、前記第１の論理プロセッサ、前記第２の論理プロセッサ、及び前記少なくとも１つの追加の論理プロセッサに優先度を付与する、請求項１に記載のプロセッサ。
【請求項１５】
メモリシステムと、
少なくとも第１の論理プロセッサを有する第１のプロセッサコアと、
第２のプロセッサコアと
を備え、
前記第１のプロセッサコアは、複数の条件が前記第１の論理プロセッサに存在するか否かを判断し、該複数の条件を満たすことに基づいて前記第１の論理プロセッサがライブロックされているか否かを判断する第１のライブロックユニットをさらに備え、
前記第１のライブロックユニットはさらに、前記第１の論理プロセッサがライブロックされているとの判断に応答して、前記第２のプロセッサコアのストールを要求する、システム。
【請求項１６】
前記第１のライブロックユニットはさらに、前記第１の論理プロセッサがライブロックされているとの判断に応答して、前記第２のプロセッサコアに関連する少なくとも１つのマイクロアーキテクチャ構造のフラッシュを要求する、請求項１５に記載のシステム。
【請求項１７】
前記第１のライブロックユニットはさらに、前記第１の論理プロセッサが命令に飢えているか否かを、前記複数の条件が満たされていることに基づいて判断する、請求項１５に記載のシステム。
【請求項１８】
前記第１のライブロックユニットはさらに、前記第１の論理プロセッサが命令に飢えているとの判断に応答して飢餓回避アクションを開始する、請求項１７に記載のシステム。
【請求項１９】
前記第１のプロセッサ及び前記第２のプロセッサからの優先度要求を調整するアービトレータであって、前記優先度要求はライブロック判断に基づく、アービトレータをさらに備える、請求項１５に記載のシステム。
【請求項２０】
前記メモリシステムはダイナミックランダムアクセスメモリをさらに備える、請求項１５に記載のシステム。
【請求項２１】
第１のプロセッサの第１の論理プロセッサが、少なくとも１つの命令の実行において前進できないか否かを判断すること、
前進できない場合、第２の論理プロセッサのストール動作をアサートすること、
前記ストールが前記第１の論理プロセッサの前進に繋がったか否かを判断すること、
繋がらない場合、前記第１の論理プロセッサが命令に飢えているか否かを判断し、飢えている場合、飢餓回避アクションをとること、及び
前記第２の論理プロセッサのストールを要求すること
を含む方法。
【請求項２２】
前記第２の論理プロセッサに関連するパイプラインのフラッシュを要求することをさらに含む、請求項２１に記載の方法。
【請求項２３】
第２のプロセッサのストールを要求することをさらに含む、請求項２１に記載の方法。
【請求項２４】
前記第２の論理プロセッサのストール動作は、
前記第２の論理プロセッサがアクティブライブロック回避状態にない限り、前記ストールをアサートすること
をさらに含む、請求項２１に記載の方法。
【請求項２５】
前記第２の論理プロセッサのストール動作は、
前記第２の論理プロセッサが高優先度ロック動作を実行中でない限り前記ストールをアサートすること
をさらに含む、請求項２１に記載の方法。
【請求項２６】
前記第２の論理プロセッサのストール動作は、
前記第１の論理プロセッサが、少なくとも所定の時間量にわたって前進を行うことができなかったとの判断に応答して前記ストールをアサートすること
をさらに含む、請求項２１に記載の方法。
【請求項２７】
マルチスレッドプロセッサにおいて複数のスレッド及びメモリライブロックユニットにスレッド優先度を割り当てる方法であって、
複数の条件が前記メモリライブロックユニット及び前記プロセッサの少なくとも２つのスレッドに存在するか否かを判断することであって、前記少なくとも２つのスレッドは第１のスレッド及び残りのスレッドのセットを含む、判断すること、
前記複数の条件を満たすことに基づいて、前記第１のスレッドがライブロックされているか否かを判断すること、並びに
ライブロックされている場合、前記第１のスレッドに優先度を割り当て、前記残りのスレッドのセットのいずれにも優先度を割り当てないこと
を含む、マルチスレッドプロセッサにおいて複数のスレッド及びメモリライブロックユニットにスレッド優先度を割り当てる方法。
【請求項２８】
前記第１のスレッドが少なくとも所定の時間長にわたってライブロックされていると判断することをさらに含む、請求項２７に記載のマルチスレッドプロセッサにおいて複数のスレッド及びメモリライブロックユニットにスレッド優先度を割り当てる方法。
【請求項２９】
アクションをとることであって、それによって、前記第１のスレッドの前進を刺激する、アクションをとることをさらに含む、請求項２７に記載のマルチスレッドプロセッサにおいて複数のスレッド及びメモリライブロックユニットにスレッド優先度を割り当てる方法。
【請求項３０】
アクションをとることは、
前記残りのスレッドのうちの少なくとも１つへのストールを発すること
をさらに含む、請求項２９に記載のマルチスレッドプロセッサにおいて複数のスレッド及びメモリライブロックユニットにスレッド優先度を割り当てる方法。
【請求項３１】
アクションをとることは、
命令側飢餓との判断に応答してライブロックブレーカを呼び出すこと
をさらに含む、請求項２９に記載のマルチスレッドプロセッサにおいて複数のスレッド及びメモリライブロックユニットにスレッド優先度を割り当てる方法。
【請求項３２】
リタイアキューの部分が空であるか否かを調べることをさらに含む、請求項３１に記載のマルチスレッドプロセッサにおいて複数のスレッド及びメモリライブロックユニットにスレッド優先度を割り当てる方法。
【請求項３３】
アクションをとることは、
キャッシュミスに応答してアービトレータに対して優先度要求を発すること
をさらに含む、請求項２９に記載のマルチスレッドプロセッサにおいて複数のスレッド及びメモリライブロックユニットにスレッド優先度を割り当てる方法。
【請求項３４】
アクションをとることは、
別のプロセッサに対してストール要求を発すること
をさらに含む、請求項２９に記載のマルチスレッドプロセッサにおいて複数のスレッド及びメモリライブロックユニットにスレッド優先度を割り当てる方法。
【請求項３５】
マルチコアマルチスレッドプロセッサであって、
それぞれ、複数のスレッドを実行可能なマルチスレッドプロセッサである複数のプロセッサコアと、
該複数のプロセッサコアのそれぞれに結合して通信するライブロックレデューサであって、第１のプロセッサコアから第１のスレッドについてのスレッド進行情報を受け取り、該第１のプロセッサコアからの該第１のスレッドについての該スレッド進行情報に応答して、前記複数のプロセッサコアのうちの第２のプロセッサコアの第２のスレッドのアクティビティを調整するライブロックレデューサと
を備える、マルチコアマルチスレッドプロセッサ。
【請求項３６】
前記ライブロックレデューサは複数のライブロック回路を備え、少なくとも１つのライブロック回路には前記複数のプロセッサコアのうちの１つが関連付けられる、請求項３５に記載のマルチコアマルチスレッドプロセッサ。
【請求項３７】
前記ライブロックレデューサは、
前記複数のプロセッサコアに結合されるアービトレーション制御ロジックであって、前記複数のコアからスレッド進行情報を受け取って優先度を調停し、どのスレッドを支援すべきかを判断するアービトレーション制御ロジック
を備える、請求項３５に記載のマルチコアマルチスレッドプロセッサ。
【請求項３８】
各プロセッサコアは、
前記コアに結合されてスレッドライブロックインジケータを測定するスレッドライブロックユニットと、
前記コアに結合されてメモリライブロックインジケータを測定するメモリライブロックユニットと
を備える、請求項３５に記載のマルチコアマルチスレッドプロセッサ。
【請求項３９】
前記複数のコアのそれぞれの前記スレッドライブロックユニット及び／又は前記メモリライブロックユニットからライブロック情報を受け取り、前記ライブロック情報に応答して１つのスレッドに他のスレッドに対する優先度を付与するアービトレータをさらに備える、請求項３８に記載のマルチコアマルチスレッドプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、包括的には情報処理システムに関し、特にマルチスレッド処理システムでの複数の同時スレッドの間でのライブロックを検出して修正することに関する。
【背景技術】
【０００２】
マイクロプロセッサを含むもの等の情報処理システムの性能を上げるために、ハードウェア技法及びソフトウェア技法の両方が採用されている。ハードウェア側では、マイクロプロセッサの性能を向上させるマイクロプロセッサ設計手法として、クロック速度の増大、パイプライン化、分岐予測、スーパースカラー実行、アウトオブオーダー実行、及びキャッシュがある。このような多くの手法はトランジスタ個数の増大に繋がり、場合によっては性能の向上率よりも高率でトランジスタ個数が増大することになることさえある。
【０００３】
あくまでトランジスタの追加により性能を増大させようとするのではなく、他の性能増強はソフトウェア技法を含む。プロセッサ性能を向上させるために採用されてきた１つのソフトウェア手法は「マルチスレッド化」として知られている。ソフトウェアマルチスレッド化では、命令ストリームが、並列実行できる複数の命令ストリームに分けることができる。別法として、複数の独立したソフトウェアストリームを並列に実行することができる。
【０００４】
タイムスライスマルチスレッド化又は時分割多重（「ＴＭＵＸ」）マルチスレッド化として知られる一手法では、単一のプロセッサが、一定の時間期間後にスレッドを切り替える。さらに別の手法では、単一のプロセッサが、長待ち時間キャッシュミス等のトリガイベントが発生するとスレッドを切り替える。スイッチオンイベントマルチスレッド化（「ＳｏＥＭＴ」）として知られるこの後者の手法では、一時に多くとも１つだけのスレッドがアクティブである。
【０００５】
ますます、マルチスレッド化はハードウェアでサポートされている。たとえば、一手法では、チップマルチプロセッサ（「ＣＭＰ」）システム等のマルチプロセッサシステムでのプロセッサはそれぞれ、複数のソフトウェアスレッドの１つに対して同時に動作することができる。同時マルチスレッド化（「ＳＭＴ」）と呼ばれる別の手法では、単一の物理プロセッサが、オペレーティングシステム及びユーザプログラムから複数の論理プロセッサに見えるようにする。ＳＭＴの場合、複数のソフトウェアスレッドが、単一のプロセッサ上で切り替えなしで同時にアクティブであり実行することができる。すなわち、各論理プロセッサは完全なアーキテクチャ状態セットを保持するが、キャッシュ、実行ユニット、分岐予測器、制御ロジック、及びバス等の物理プロセッサの他の多くの資源は共有される。ＳＭＴの場合ではしたがって、複数のソフトウェアスレッドからの命令は各論理プロセッサ上で同時に実行される。
【０００６】
ＳＭＴシステム及び／又はＣＭＰシステム等の、ソフトウェアスレッドの同時実行をサポートするシステムの場合、２つ以上の同時アクティブスレッド間での共有資源の競合により、スレッドの少なくとも１つが前進できなくなる危険性がある。スレッドが、別のアクティブスレッドとの資源競合により前進できなくなることは、「ライブロック」と呼ばれることがある。
【発明の開示】
【０００７】
本発明の実施の形態は、同様の要素が同様の符号で示される添付の図面を参照しつつ理解することができる。これらの図面は限定を意図せず、マルチスレッド処理システムでの複数の同時スレッド間でのライブロックを検出して修正する装置、システム、及び方法の選択された実施形態を例示するために提供される。
【発明を実施するための最良の形態】
【０００８】
以下の説明において、プロセッサタイプ、マルチスレッド化環境、及びマイクロアーキテクチャ構造等の多くの特定の詳細について述べて、本発明のより完全な理解を提供する。しかし、本発明はこのような特定の詳細なしでも実施可能なことが当業者により理解されよう。さらに、いくつかの既知の構造、回路等については、本発明を不必要に曖昧にするのを避けるために詳細に示していない。
【０００９】
本明細書において開示する方法、装置、及びシステムの実施形態は、マルチスレッド処理システムでのライブロックの検出及び回避を可能にする。開示する少なくとも１つの実施形態では、スレッドライブロックユニットは、論理プロセッサのソフトウェアスレッド命令のリタイアを追跡するメカニズムを含む。リタイアの追跡は、スレッドが前進しているか否かを追跡する単に１つの手法にすぎない。本明細書において考察する実施形態は、前進インジケータとして命令のリタイアに注目するが、他の実施形態は異なるインジケータ又は追加のインジケータを利用して、スレッドが前進しているか否かを判断できることを当業者は認めよう。たとえば、スレッド進行信号又はレジスタを評価してもよく、命令ポインタの進行を追跡してもよく、又は他の任意の進行表示信号又はインジケータを評価してもよい。
【００１０】
図１は、マルチスレッド化を行うプロセッサ１０４及びアービトレータ１８０の少なくとも１つの実施形態を示す。プロセッサ１０４及びアービトレータ１８０は単一のチップパッケージ１０３に存在してもよい。プロセッサ１０４は、複数の論理プロセッサ１５０ａ〜１５０ｎを備え、同時マルチスレッド化をサポートすることができる。少なくとも１つの実施形態では、プロセッサ１０４は複数の論理プロセッサ１５０ａ〜１５０ｎを利用してＳＭＴ処理性能を提供する。このような実施形態では、各論理プロセッサ１５０ａ〜１５０ｎはそれぞれの命令シーケンサ（たとえば、図３の３４０を参照）を有する。このような実施形態では、論理プロセッサ１５０は各自バージョンのアーキテクチャ状態を保持するが、単一のプロセッサコア１０４の実行資源はすべての同時ＳＭＴソフトウェアスレッドで共有することができる。
【００１１】
ＳＭＴの場合、複数のマルチソフトウェアスレッドを、それぞれ複数の論理プロセッサ１５０のうちの１つで同時に実行することができる。論理プロセッサ１５０ａ〜１５０ｎは、本明細書では「物理スレッド」とも同義で使用され得る。特に別記しない限り、本明細書において使用する「スレッド」という語は、「物理」又は「ソフトウェア」が前に付いていない場合、アクティブ論理プロセッサ及び論理プロセッサが実行中の関連するソフトウェア命令ストリームをまとめて指すことを意味する。
【００１２】
図１は、スレッドライブロックユニット（「ＴＬＵ」）１６５ａ〜１６５ｎに各論理プロセッサ１５０ａ〜１５０ｎのそれぞれを関連付けることができることを示す。少なくとも１つの実施形態では、ＴＬＵ１６５はしたがって、プロセッサ１０４の各物理スレッド１５０ａ〜１５０ｎについてスレッド単位で複製される。特定の物理スレッド１５０のＴＬＵ１６５は、本明細書では単に物理スレッドの「ＴＬＵ」と呼ばれることもある。
【００１３】
図１は、プロセッサ１０４がメモリライブロックユニット（「ＭＬＵ」）１６６も備えることができることを示す。メモリライブロックユニット１６６は、１）メモリライブロックインジケータに基づいて単一のプロセッサ１０４の同時スレッドからのメモリ動作間のライブロックを検出し、２）アクションをとってこのようなライブロックを解決することができる。
【００１４】
ＴＬＵ１６５の動作については図５〜図７に関連してさらに詳細に後述する。一般に、スレッドライブロックユニット１６５は、１）特定のスレッドライブロックインジケータに基づいて、関連する論理プロセッサのソフトウェアスレッドが前進に失敗した（「ライブロックされた」）ことを判断し、２）アクションをとってこのようなライブロックを解決することができる。少なくとも１つの実施形態では、スレッドライブロックユニット１６５は、論理プロセッサが命令をリタイアさせてから、又は他の様式で潜在的な前進を実行してからのサイクル数をカウントすることによって前進がないことを判断する。スレッドライブロックユニット１６５が検出することができる、数ある中でも１つの特定の状況は「命令飢餓」と呼ばれる。命令飢餓とは、第１のスレッドが、他方の別のスレッドの命令フェッチを阻止又は不当に遅らせ得る状況である。その結果として、本明細書では他方のスレッドを「命令に飢えている」又はＩ飢餓状態にあると言う。命令飢餓を受けているスレッドは、実行に利用可能な命令がなく、リタイアさせる命令がないために前進することができない。
【００１５】
スレッドライブロックユニット１６５がライブロックを解決しようとしてアクションをとるとき、そのスレッドライブロックユニット１６５は本明細書では「アクティブ」と呼ばれる。スレッドライブロックユニット１６５は「アクティブ」になって、いくつかのライブロックブレーカアクションのうちの任意のアクションを実行することができ、ライブロックブレーカアクションは、ＴＬＵ１６５が関連付けられたスレッドの前進を刺激しようとして行われる。たとえば、第１の論理プロセッサ１５０のＴＬＵ１６５は、関連する論理プロセッサ１５０が前進できないことに応答して、１つ又は複数の他の論理プロセッサ１５０をストールさせるか、又は１つ又は複数の他の論理プロセッサ１５０のマイクロアーキテクチャ状態をリセットさせる（本明細書において「削除（nuked）」と呼ばれることがある）ことを要求するというアクションをとることができる。またたとえば、アクティブＴＬＵ１６５はライブロックブレーカ（たとえば、以下の図９に関連しての共有ライブロックブレーカ９５０の考察を参照）を呼び出して、アクションをとって命令飢餓を軽減することができる。また、アクティブＴＬＵ１６５は、長待ち時間キャッシュミスが検出される場合にアービトレータ１８０から優先度を要求することができる。このようなアクションをとるいくつかの実施形態を図５〜図７に関連してさらに詳細に後述する。
【００１６】
したがって、一実施形態によれば、ＴＬＵ１６５ａ〜１６５ｎはアービトレータ１８０と共に、プロセッサ１０４の論理プロセッサ１５０ａ〜１５０ｎ及びＭＬＵ１６６に優先度を付与して、ＳＭＴソフトウェアスレッドの実行中にライブロック状況を検出して軽減する。さらに、ＴＬＵ１６５ａ〜１６５ｎはそれ自体、論理プロセッサ１５０ａ〜１５０ｎに優先度を付与して、特定のライブロック状況を検出して軽減することができる。最後に、マルチコア処理システムでは、アービトレータ１８０は複数のコアに優先度を付与してスレッドライブロックを軽減することもできる。しかし、様々な異なる実施形態では、これらの特徴のいくつか又はすべてが存在してもしなくてもよい。
【００１７】
図２は、開示する技法を実行して複数の同時スレッド間のライブロックを検出して軽減することができるマルチコアマルチスレッドコンピューティングシステム２００の少なくとも１つの実施形態を示すブロック図である。図１及び図２中の同様の要素は同様の参照符号を有する。
【００１８】
図２は、コンピューティングシステム２００が少なくとも１つのプロセッサコア１０４ａ及びメモリ２０２を含むことを示す。メモリ２０２は、データ２４０及びプロセッサ１０４ａ〜１０４ｎの動作を制御する命令２４１を記憶することができる。少なくとも１つの実施形態では、プロセッサ１０４ａは、単一のチップパッケージ１０３に存在する複数のプロセッサコア１０４ａ〜１０４ｎの１つであってもよい。追加のプロセッサは、１０４ｎを含め、オプションである。追加のプロセッサがオプションであることを図２では楕円及び破線で示す。
【００１９】
図２は、処理コア１０４ａ〜１０４ｎの他に、追加のロジック２８０がチップパッケージ１０３に存在することを示す。このような追加のロジック２８０は本明細書において「アンコア（uncore）」と呼ばれることがある。追加のロジック２８０は、キャッシュ２５１及び調停・制御ロジック２５２のうちの１つ又は複数を含み得る。キャッシュ２５１は、プロセッサ１０４ａ〜１０４ｎ間で共有される最終レベル共有統一データ・命令キャッシュであることができる。調停・制御ロジック２５２は、ポイントツーポイント通信コントローラ、グローバル通信キュー、及び／又は調停ロジック１８０（図１を参照）を含むことができる。
【００２０】
追加のロジック２８０はオプションとして、集積メモリコントローラ２５３を備えることもできる。集積メモリコントローラ２５３は、オフチップメモリ２０２へのインタフェースを提供することができる。このような実施形態では、チップセット２５５が主にグラフィックス関連機能をサポートする。チップセット２５５は、１つ又は複数の入／出力（Ｉ／Ｏ）装置２９０との接続性を提供することもできる。少なくとも１つの実施形態では、チップセット２５５は１つ又は複数のチップセット装置を含むことができ、各チップセット装置は別個のインタフェース機能を提供する。たとえば、チップセット装置の１つはグラフィックス機能をサポートし、別のチップセット装置はＩ／Ｏ接続性及び／又はファームウェアハブ（図示せず）とのインタフェースをサポートすることができる。
【００２１】
集積メモリコントローラ２５３をチップパッケージ１０３に備えない実施形態では、チップセット２５５はオフチップメモリ２０２へのインタフェースを提供することができる。このような実施形態では、チップセット２５５は、メモリ制御機能の他に、上述したグラフィックス機能、Ｉ／Ｏ機能、及び／又はファームウェア機能を提供することもできる。
【００２２】
システム２００の実施形態について、ポイントツーポイント通信コントローラを調停・制御ロジック２５２の一部として有するものとして本明細書では考察するが、このようなコントローラはすべての実施形態に必要なわけではない。実際には、本明細書において考察するライブロック検出及び修正メカニズムの実施形態が、マルチドロップバス又は他の通信トポロジを利用するシステムでも実行可能なことを当業者は認めよう。
【００２３】
図２は、図１に示すように、システム２００の１つ又は複数のプロセッサコア１０４ａ〜１０４ｎの少なくとも１つの実施形態が、各論理プロセッサ１５０ａ〜１５０ｎのＴＬＵ１６５を含むとともに、メモリライブロックユニット１６６も含むマルチスレッド化コアであり得ることを示す。
【００２４】
複数のプロセッサコア１０４ａ〜１０４ｎを含む処理システム２００の実施形態では、プロセッサコア１０４ａ〜１０４ｎ上の物理プロセッサ１５０ａ〜１５０ｎのうちの１つのＴＬＵが、修正アクションをとったが、関連する物理スレッド１５０が依然として関連するソフトウェアスレッドの命令の実行において前進を実現することができない場合、調停ロジック１８０に通知することができる。このような場合、別のプロセッサコア１０４のアクションが、第１のプロセッサコア１０４ａの前進させる能力を妨げていることがあり得る。さらに詳細に後述するように、調停ロジック１８０は要求を行っているコア１０４に優先度を認め、且つ／又はアクションをとって他のコアを「削除」することができる。
【００２５】
したがって、各コアのＭＬＵ１６６と共に各プロセッサコア１０４のＴＬＵ１６５ａ〜１６５ｎ及びアービトレータ１８０は共に、連係ライブロックレデューサを形成することができる。ライブロックレデューサはしたがって、各コア１０４のライブロック回路を含むことができ、ライブロック回路はコアのＴＬＵ１６５ａ〜１６５ｎ及びＭＬＵ１６６を含み得る。さらに詳細に後述するように、ライブロックレデューサは、第１のプロセッサ１０４ａコアからスレッドについてのスレッド進行情報を受け取り、第１のプロセッサコア１０４ａからの第１のスレッドについてのスレッド進行情報に応答して、第２のプロセッサコア１０４ｎのスレッドのアクティビティを調整することができる。
【００２６】
さらに詳細に後述するように、プロセッサ１０４の少なくとも１つの実施形態は、ＴＬＵ１６５が、物理スレッド１５０が現在の命令ストリームを前進させることができないことを検出したことに応答して、ＭＬＵ１６６のアクションロジックを呼び出すように設計することができる。ＭＬＵ１６６ロジックは、たとえば、ＴＬＵ１６５がアクションをとって命令側（Ｉ側）飢餓を軽減する場合に呼び出すことができる（図６の状態６０４についての以下の考察を参照）。
【００２７】
図３は、開示する技法を実行して複数の同時スレッド間のライブロック状況を検出して軽減することができるプロセッサ１０４の少なくとも１つの実施形態のさらなる詳細を示すブロック図である。プロセッサ１０４は、実行される可能性が高い命令をプリフェッチするフロントエンド３２０を含むことができる。
【００２８】
少なくとも１つの実施形態では、フロントエンド３２０は、１つ又は複数の論理プロセッサ１５０ａ〜１５０ｎのそれぞれに論理的に独立したシーケンサ３４０ａ〜３４０ｎを含むフェッチ／デコードユニット３２２を含む。フェッチデコードユニット３２２は、適切な命令を命令キャッシュ（たとえば、図４のＩキャッシュ４４４を参照）からフェッチすることができる。フェッチ／デコードユニット３２２は、命令をデコードして最終フォーマット又は中間フォーマットにするデコードロジックを含むこともできる。
【００２９】
したがって、物理フェッチ／デコードユニット３２２は、物理スレッド１５０にそれぞれ対応する複数の論理的に独立したシーケンサ３４０ａ〜３４０ｎを備える。物理スレッド１５０のシーケンサ１４０は、物理スレッド１５０が実行すべき、関連するソフトウェア命令ストリーム（本明細書では「ソフトウェアスレッド」とも呼ばれる）の次の命令を決定する。シーケンサ１４０ａ〜１４０ｎは分岐予測器（図４の４３２を参照）からの情報を利用して、どの命令を次に実行すべきかを決定することができる。
【００３０】
図３は、プロセッサ１０４の少なくとも１つの実施形態が、命令を実行に向けて準備し、命令を実行し、実行された命令をリタイアさせる実行コア３３０を備えることを示す。実行コア３３０は、アウトオブオーダーロジックを備え、アウトオブオーダー実行に向けて命令をスケジュールすることができる。実行コア３３０は、命令が実行パイプラインを通って流れ、実行に向けてスケジュールされるときに、命令の流れを滑らかにするとともに並び替えるために利用する１つ又は複数の資源３６２を備えることができる。これらの資源３６２は、スケジュールされていない命令を保持する命令キュー、メモリ順序付けバッファ（memory ordering buffer）、未完了ロード命令のエントリを保持するロード要求バッファ、未完了記憶命令のエントリを保持する記憶要求バッファ、ＭＬＵ（図１の１６６を参照）等のうちの１つ又は複数を備えることができる。
【００３１】
実行コア３３０は、アウトオブオーダーに実行された命令を再び元のプログラム順に並び替えるリタイアロジックを備えることができる。このようなリタイアロジックは、少なくとも１つのリタイアキュー３６４を備え、実行パイプライン中の命令についての情報を、このような命令がリタイアするまで保持することができる。少なくとも１つの実施形態では、リタイアキュー３６４を、リタイアキューの一部が各論理プロセッサ１５０ａ〜１５０ｎに割り振られるように論理プロセッサ１５０ａ〜１５０ｎに分けることができる。別法として、別個のリタイアキュー３６４を各論理プロセッサ１５０ａ〜１５０ｎに利用してもよい。
【００３２】
リタイアロジックは、実行ユニット３６０から実行済み命令の完了状態を受け取り、適切なアーキテクチャ状態がプログラム順に従ってコミット（又はリタイア）されるようにその結果を処理することができる。リタイアロジックはスレッドライブロックユニット１６５ａ〜１６５ｎを備えることもできる。少なくとも１つの実施形態では、プロセッサ１０４は、各論理プロセッサ１５０ａ〜１５０ｎに別個のＴＬＵ１６５ａ〜１６５ｎを備える。
【００３３】
もちろん、実行コア３３０は命令をプログラム順に処理してもよく、必ずしもアウトオブオーダー処理を提供する必要がないことを当業者は認めよう。このような場合、リタイアキュー３６４は並べ替えバッファではなく、単に、命令を、このような命令がリタイアするまでプログラム順に保持するバッファである。同様に、このような順序通りのプロセッサの実行資源３６２は、機能がアウトオブオーダー処理に向けて命令を並べ替えて追跡することである構造を備えない。
【００３４】
図４は、開示する技法を実施可能なマルチスレッドアウトオブオーダー処理システム４００の少なくとも１つの実施形態を示すブロック図である。図４並びに図１、図２、及び／又は図３中の同様の要素は同様の参照符号を有する。図４は、処理システムがメモリサブシステム４９０、プロセッサ４０４、及びメモリコントローラ４５３を備えることができることを示す。
【００３５】
図４は、プロセッサ４０４が、図３に関連して上述したフロントエンド３２０と同様にフロントエンド４２０を備えることができることを示す。フロントエンド４２０は、命令情報を実行コア４３０に供給する。少なくとも１つの実施形態では、フロントエンド４２０は、命令情報を実行コア４３０にプログラム順に供給することができる。
【００３６】
フロントエンド４２０は、複数の論理プロセッサ１５０ａ〜１５０ｎのそれぞれに１つずつ、複数の独立した論理シーケンサ３４０ａ〜３４０ｎを有するフェッチ／デコードユニット３２２を備えることができる。少なくとも１つの実施形態では、フロントエンド４２０は、実行される可能性の高い命令をプリフェッチする。分岐予測ユニット４３２が、分岐予測情報を供給して、フロントエンド４２０がどの命令が実行される可能性が高いかを判断するのを助けることができる。
【００３７】
少なくとも１つの実施形態では、実行コア４３０はアウトオブオーダー実行に向けて命令を準備し、命令を実行し、実行済みの命令をリタイアさせる。実行コア４３０はＴＬＵ１６５を含むことができる。プロセッサ４０４の実行資源４６２は、ＭＬＵ１６６、命令キュー、ロード要求バッファ、及び記憶要求バッファを備えることができる。
【００３８】
ＭＬＵ１６６は、以下の設計特徴：論理プロセッサ１５０ａ〜１５０ｎがメモリシステム４９０の資源を共有することができる、に関連するライブロックを軽減するように設計される。したがって、或る論理プロセッサ１５０からの（プログラム順において）より古いメモリ命令が、別の論理プロセッサ１５０からのより若いメモリ命令により阻止される場合がある。ＭＥＵ１６６は、この状況を検出して修正するように設計される。ＭＥＵは、別の論理プロセッサが１つ又は複数のメモリ動作を完了できるように、或る論理プロセッサをストールさせることができる。
【００３９】
実行コア４３０は、アウトオブオーダーで実行された命令を、並べ換えバッファ（「ＲＯＢ」）と呼ばれるリタイアキュー４６４において再び元のプログラム順に並べ替えるリタイアロジックを備えることができる。このリタイアロジックは、実行ユニット３６０から実行済み命令の完了状態を受け取る。実行コア４３０は２つ以上の並べ替えバッファ４６４を備えてもよい。すなわち、単一の分割された並べ換えバッファ４６４の一部が、すべての論理プロセッサ１５０ａ〜１５０ｎについての未リタイア命令情報を保持することができる。別法として、別個の並べ替えバッファ４６４を各論理プロセッサ１５０に保持してもよい。
【００４０】
実行コア４３０は、分岐履歴情報をプロセッサ４０４のフロントエンド４２０にある分岐予測器４３２に分岐履歴情報を報告して、分かっている最新の優良分岐履歴情報を付与することもできる。
【００４１】
本明細書において使用される場合「命令情報」という語は、実行コア４３０が理解し実行することのできる最終フォーマットでの作業の基本単位を指すことを意味する。命令情報はキャッシュ４２５に記憶することができる。キャッシュ４２５は、実行命令キャッシュ又は実行トレースキャッシュとして実施することができる。実行命令キャッシュを利用する実施形態では、「命令情報」は、命令キャッシュ４４４からフェッチされた命令を含む。このようなフェッチされた命令は、実行命令キャッシュに記憶される前にマイクロ操作にデコードされてもされなくてもよい。トレースキャッシュを利用する実施形態では、「命令情報」という語は、マイクロ命令からデコードされたマイクロ操作のトレースを含むことができる。実行命令キャッシュもトレースキャッシュも利用しない実施形態では、「命令情報」は、命令キャッシュ（Ｉキャッシュ４４４等）に記憶することができる命令の未処理バイトを含むこともできる。
【００４２】
処理システム４００は、メモリ２０２と共に１つ又は複数のキャッシュ４４２、４４４を備えることができるメモリサブシステム４９０を備える。図４には図示していないが、キャッシュ４４２、４４４のうちの一方又は両方のすべて又は部分が、プロセッサ４０４に対してローカルなダイ上キャッシュとして物理的に実装されてもよいことを当業者は認識しよう。メモリサブシステム４９０はメモリ階層として実装することができ、相互接続４５３も備えて、データ２４０及び／又は命令２４１等の情報のメモリ２０２から階層レベルへの転送を容易にすることができる。メモリ階層に、非包含階層構成を含む、様々な構成を利用してもよいことを当業者は認めよう。
【００４３】
アウトオブオーダー処理システム４００のみを図４に示すが、本明細書で考察する実施形態はインオーダー処理システムにも同様に等しく適用可能なことを当業者に理解されよう。このようなインオーダー処理システムは通常、ＲＯＢ４６４を備えない。それにもかかわらず、このようなインオーダーシステムはそれでもリタイアキュー（図３の３６４を参照）を備え、未リタイア命令を追跡することができる。
【００４４】
図５、図６、及び図７は共に、ライブロック状況が複数の同時スレッド間に存在すると判断し、アクションをとってライブロック状況を軽減する方法５００の少なくとも１つの実施形態を示す状態図を提示する。少なくとも１つの実施形態では、図１〜図４に示すＴＬＵ１６５等のスレッドライブロックユニットが方法５００を実行することができる。ＴＬＵ１６５は、方法５００を状態機械として実装するハードウェアユニットであってもよい。
【００４５】
図５について図３及び図４を参照してこれより考察する。図５の背景として、図３及び図４にそれぞれ示すプロセッサ１０４及び４０４等のＳＭＴプロセッサの少なくとも１つの実施形態では、各論理プロセッサ１５０が、完全なアーキテクチャ状態セットを保持することを理解することが有用である。さらに、リタイアキュー３６４又はＲＯＢ４６４等のプロセッサの特定の特徴及び実行資源３６２、４６２は、現在アクティブなソフトウェアスレッドのそれぞれのマイクロアーキテクチャ状態情報を保持することができる。特定の状況において、アクティブスレッドをストールさせ、そのスレッドのマイクロアーキテクチャ状態を、ＳＭＴ論理プロセッサ１５０からフラッシュ又は「削除」することができる。選択されない論理プロセッサ（おそらく前進している）のマイクロアーキテクチャ状態をストールさせて「削除」することにより、選択された論理プロセッサに、現在のビートパターンからの解放を提供することができ、選択されない論理プロセッサからの妨げなく前進できるようにすることができる。
【００４６】
図５は、方法５００がアイドル状態５０２を含むことを示す。図５は、１つ又は複数のリセット条件５０１が満たされたときにアイドル状態５０２になることができる（５５１）ことをさらに示す。図５及び図６を簡易化するために、ブロック５０１と状態５０２との間の矢印５５１は、任意のリセット条件５０１が満たされることを示す。リセット条件の１つ又は複数について、状態５０２への遷移は図５及び図６に示す他の状態５０４、５０６、５０８、６０２、６０４、６０６のうちの１つから行われてもよいことを当業者は認めよう。しかし、簡易化のために、このような遷移を示す矢印は図５及び図６に示されない。
【００４７】
図７を参照して、１つ又は複数のリセット条件５０１の少なくとも１つの実施形態を見ることができる。図７は、図４及び図５を参照して本明細書において考察される。少なくとも１つの実施形態では、リセット条件５０１は単一コア処理システム又はマルチコア処理システムに適用することができる。以下の考察では、「現在の論理プロセッサ」という語は、方法５００を実行して、リセット条件５０１が真であるか否かを判断するＴＬＵ１６５に関連する論理プロセッサ１５０を指すことを意味する。したがって、プロセッサ１０４内の他のＴＬＵ１６５ａ〜１６５ｎのうちの１つ又は複数も方法５００を同時に実行することが可能であるが、「現在の論理プロセッサ」は、プロセッサ１０４の他の論理プロセッサ１５０とは対照的に、対象の論理プロセッサである。
【００４８】
図７は、ＴＬＵ１６５が、状態５０２、５０４、５０６、５０８、６０２、６０６、及び６０４を含め、図５及び図６に示す任意の他の状態であるときに、リセット条件５０１のうちの１つ又は複数が真になり得ることを示す。リセット条件５０１のうちの１つ又は複数が真になった場合、状態５０２への遷移がトリガされる。上述したように、他の任意の状態から状態５０２への遷移は、他の任意の状態からアイドル状態５０２への遷移を示す矢印５５１に含まれる。
【００４９】
図７は、リセット条件５０１のうちの条件Ａにより、ＴＬＵ１６５がディセーブルされている場合にアイドル状態５０２に留まる／アイドル状態５０２に戻るべきであることが示されることを示す。このような条件Ａは、少なくとも１つの実施形態において、ＴＬＵ１６５がディセーブルされ得るという仮定を反映している。少なくとも１つの実施形態では、たとえば、ＴＬＵ１６５は例外処理ルーチンの実行中にディセーブルされ得る。マイクロコード又は他のファームウェアによって実行され得るこのようなルーチン中、ライブロック検出がディセーブルされ得る。ＴＬＵ１５をディセーブルさせる可能性のある例外の一例は、チップセット（たとえば、図２の２５５を参照）が、プロセッサ１０４が低電力状態に遷移することを要求したことを示す、ストップクロック信号等の信号のアサーションである。
【００５０】
図７は、リセット条件５０１のうちの条件Ｂにより、リセットトリガが検出されている場合にＴＬＵ１６５がアイドル状態５０２に留まる／アイドル状態５０２に戻るべきであることが示されることを示す。このようなリセットトリガが検出されると、ＴＬＵ１６５は、アイドル状態５０２に留まる／アイドル状態５０２に戻ることによってライブロック判断アクティビティを事実上リセットする。少なくとも１つの実施形態では、リセットトリガは、ｉｎｉｔ  ｐｉｎ又はパワーダウンリセットの起動等のユーザ開始イベントによって起動することができる。
【００５１】
図７は、リセット条件５０１のうちの条件Ｃにより、ＴＬＵ１６５に関連する論理プロセッサ１５０がアイドルであり、したがってソフトウェアスレッドの実行を現在試みていない場合、ＴＬＵ１６５がアイドル状態５０２に留まる／アイドル状態５０２に戻るべきことが示されることを示す。このような条件は、少なくとも１つの実施形態では、ＴＬＵ１６５により、ＴＬＵ１６５の「スレッドアクティブ」インジケータを保持するよりもレジスタを調べることによって検出することができる。
【００５２】
図７は、リセット条件５０１のうちの条件Ｄにより、プロセッサコア１０４の別の論理プロセッサ１５０が排他的アクセスモードにある場合、ＴＬＵ１６５がアイドル状態５０２に留まる／アイドル状態５０２に戻るべきことが示されることを示す。排他的アクセスモード中、或る論理プロセッサが、他のすべての論理プロセッサが認識する必要のあるアクションをとっている可能性がある。たとえば、或る論理プロセッサが、ＲＯＢ４６４等の共有資源の再分割に影響する命令を実行しているときがあり得る。又はたとえば、或る論理プロセッサが、制御レジスタ中のキャッシュディセーブルビットの設定等、大域的な変更を行う命令を実行し得る。このような状況では、他のすべての論理プロセッサが、排他的アクセス動作が完了するまで実行をストールすべきである。このようなときの間、ストールされたＴＬＵ１６５は、論理プロセッサが前進するものと予想すべきではなく、したがってアイドル状態５０２に留まる／アイドル状態５０２に戻るべきである。少なくとも１つの実施形態では、ＴＬＵ１６５は、共有信号（たとえば、マイクロアーキテクチャレジスタにおいて反映することができる）を調べて、プロセッサ１０４の別の論理プロセッサ１５０が排他的アクセスモードであるか否かを判断することによって条件Ｄが満たされるか否かを判断することができる。
【００５３】
図７は、リセット条件５０１のうちの条件Ｅにより、ＴＬＵ１６５の論理プロセッサ１５０がＩ側飢餓アクション状態６０４（図６）から遷移した場合、ＴＬＵ１６５がアイドル状態５０２に留まる／アイドル状態５０２に戻るべきことが示されることを示す。このような遷移は、現在の論理プロセッサ１５０でのＩ側飢餓を軽減しようとして首尾良いアクション（状態６０４に関連して後述）がとられたことを示し、したがって、ＴＬＵ１６５はアイドル状態５０２に戻って新たなライブロック検出シーケンスを開始し、飢餓回避アクションをとる時間を与えるべきである。
【００５４】
図７はさらに、リセット条件５０１のうちの条件Ｆにより、メモリライブロックユニット１６６が現在アクティブである場合、ＴＬＵ１６５がアイドル状態５０２に留まる／アイドル状態５０２に戻るべきことが示されることも示す。この条件Ｆを介して、ＴＬＵ１６５はメモリライブロックユニット１６６に優先度を譲る。このような優先度付与方式は、ＴＬＵ１６５とＭＬＵ１６６との間の競合により発生するライブロックを回避するために有用である。すなわち、上述したように、ＭＬＵ１６６は或る論理プロセッサ１５０のメモリ動作（複数可）をストールさせて、別の論理プロセッサが１つ又は複数のメモリ動作を完了できるようにする。リセット条件Ｆがなければ、ストールされた論理プロセッサは、望ましくないライブロック状況によって前進することができないと誤って判断する恐れがある。条件Ｆは、このような状況で、ＴＬＵ１６５がＭＬＵ１６６に優先度を与えることを保証する。したがって、リセット条件Ｆは、各ＴＬＵ１６５及びＭＬＵ１６６が互いを認識するとともに互いに協働することを保証する。
【００５５】
図７はさらに、リセット条件５０１のうちの条件Ｇにより、「削除」アクションが論理プロセッサにアサートされた場合、ＴＬＵ１６５がアイドル状態５０２に留まる／アイドル状態５０２に戻るべきことが示されることも示す。論理プロセッサ１５０への削除アクションは以下の結果を有する。すなわち、現在の命令及び、現在のマクロ操作を完全に実行完了するために必要な他のあらゆる命令が完了する。さらなる命令実行はすべてストールされ、論理プロセッサ１５０のすべてのパイプライン及び関連するマイクロアーキテクチャ状態はフラッシュされる。このようにして、スレスレッドの処理がストールされるのみならず、マイクロアーキテクチャ状態がフラッシュされる。
【００５６】
現在の論理プロセッサに対して条件Ｇは、たとえば、すべての「削除」アクションが別の論理プロセッサ１５０ａ〜１５０ｎによって開始された場合に真であり得る。このような条件は、たとえば、別の論理プロセッサが、状態６０６を完了した結果として全「削除」アクションを開始した場合に満たされ得る。このような場合、現在の論理プロセッサは、少なくとも１つの実施形態ではストールし、そのマイクロアーキテクチャ状態はフラッシュされ、したがって、現在の論理プロセッサのＴＬＵ１６５はアイドル状態５０２に戻るべきである。
【００５７】
別法として、条件Ｇは、別の論理プロセッサが状態６０６を完了していない場合であっても特定の論理プロセッサに対して満たされ得る。その代わり、現在の論理プロセッサ１５０の「削除」アクションは、方法５００の状態に他の形で関連しないプロセッサでのいくつかの他のイベントのいずれかによって開始することができる。たとえば、「削除」イベントは、現在の論理プロセッサ１５０での割り込みの結果としてアサートされて、アウトオブオーダープロセッサ１０４に対して厳密な例外処理を可能にすることができる。
【００５８】
図７はさらに、リセット条件５０１のうちの条件Ｈにより、別の論理プロセッサのＴＬＵ１６５が「アクティブ」になり、ライブロックブレーカアクションをとるプロセス中である場合、ＴＬＵ１６５がアイドル状態５０２に留まる／アイドル状態５０２に戻るべきことが示されることも示す。条件Ｈにより、第２のＴＬＵ１６５は、第１のＴＬＵ１６５が検出段階（５０２、５０４、５０６を参照）から、第１のＴＬＵ１６５が、ライブロック状況を軽減しようとして或る種の修正アクションをとるという意味で「アクティブ」である段階（５０８、６０２、６０６、６０４を参照）に遷移した場合に、第１のＴＬＵ１６５に譲るように設計される。条件Ｈを満たすには、各ＴＬＵ１６５がプロセッサ上の他のＴＬＵ１６５の状態を認識する必要がある（図３は、少なくとも１つの実施形態において、すべてのＴＬＵ１６５ａ〜１６５ｎが互いに通信することを示す）。
【００５９】
２つ以上のＴＬＵ１６５が同じクロックサイクル中にアクティブ状態に遷移しようとする「タイ（tie）」状況が発生し得る。このような場合、優先度を要求するＴＬＵ１６５のうちの１つのみに与えることができる。たとえば、優先度を最小番号のＴＬＵに割り当てることができる（すなわち、１６５ａが１６５ｂよりも高い優先度を有し、したがって１６５ｂはアイドル状態５０２に戻る）。別法として、他の多くの優先度選択メカニズムを利用することができる。少なくとも１つの実施形態では、優先度メカニズムはアービトレータ（たとえば、図１の１８０を参照）によって実行される。このような場合において優先度の割り当てに利用されるアービトレーションポリシーは、図８に関連して後述するブロック８０６において利用されるポリシーと同じであってもよいが、かならずしも同じである必要はない。
【００６０】
図７はさらに、リセット条件５０１のうちの条件Ｉにより、ＴＬＵ１６５が欲張り挙動を示し、したがって別の論理プロセッサ１５０でのライブロック状況の一因となる可能性が高い場合、ＴＬＵ１６５がアイドル状態５０２に留まる／アイドル状態５０２に戻るべきことが示されることも示す。このような欲張り挙動はいくつかの方法のいずれかで識別することができる。すなわち、ＴＬＵ１６５は、実行資源の１つが満杯であるためＲＯＢ３６４部分が空であるプロセッサ１５０等、論理プロセッサ１５０のＲＯＢ３６４部分がＩ側飢餓以外の理由で空である場合、非アイドル状態に必ずしも留まる必要があるわけではない。
【００６１】
たとえば、論理プロセッサ１５０は、システムのメモリ帯域幅を占有して現在の論理プロセッサ１５０の記憶バッファを記憶命令で満杯にさせる一連の記憶命令を発することによって欲張り挙動を示し得る。少なくとも１つの実施形態では、論理プロセッサ１５０の命令処理は、実行資源（たとえば、記憶バッファ等）がもはや満杯でなくなるまでストールすることができる。そうして論理プロセッサ１５０がストールしている間、現在の論理プロセッサのＲＯＢ３６４部分は空であり得るが、別の実行資源（すなわち、記憶バッファ）は満杯である。したがって、条件Ｉについて、欲張り挙動は、ＲＯＢ３６４の現在の論理プロセッサ１５０に割り当てられた部分が空であるが、記憶バッファ（又は他の任意の指定された実行資源）が、データがまだキャッシュ又はメモリにコミットされていない、リタイアした記憶命令で満杯のときに識別することができる。このような場合、現在の論理プロセッサ１５０はアイドル状態５０２に戻り、別の論理プロセッサのＴＬＵ１６５がアクティブになる必要に備えて暗黙的に優先度を譲る。
【００６２】
図７はさらに、リセット条件５０１のうちの条件Ｊにより、ＴＬＵ１６５の論理プロセッサが実行に利用可能な命令を有し、別の論理プロセッサが高優先度ロックシーケンスを実行している場合、ＴＬＵ１６５がアイドル状態５０２に留まる／アイドル状態５０２に戻るべきことが示されることも示す。高優先度ロックシーケンスはたとえば、原子命令であり得る。原子命令の場合、プロセッサのメモリロジックは、ロックされた動作が完了するまで、この完了までにどのくらい時間がかかるかに関わりなく、ロックされたスレッドに対してのみ働く。この種の高優先度ロックシーケンスは、プロセッサでの最高優先度を表し得る。したがって、リセット条件Ｊは、別の論理プロセッサが現在この種の高優先度ロック動作を処理中である場合にアイドル状態５０２に留まる／アイドル状態５０２に戻ることによってこの優先度を付与する。他のプロセッサが一連の高優先度ロック動作を実行中であり、現在の論理プロセッサ１５０がそれ自体のメモリ命令の１つを長い時間期間にわたって実行することができない場合、ＭＬＵ１６６がおそらく呼び出されて、現在の論理プロセッサがメモリ命令を実行できるようにする。したがって、２つの論理プロセッサ間で競合するメモリ命令に鑑みて、ＭＬＵ１６６は、一方の論理プロセッサでの一連の高優先度ロックによる許容できない長時間にわたってのストールから他方の論理プロセッサを保護することができる。
【００６３】
しかし、リセット条件Ｊは、現在の論理プロセッサに実行する命令がない（すなわち、現在の論理プロセッサのＲＯＢ４６４部分が空である）場合に満たされない。すなわち、別の論理プロセッサが高優先度ロック動作を現在処理中であるが、現在の論理プロセッサのＲＯＢ４６４部分が空である場合、ＴＬＵ１６５はアイドル状態５０１２に戻らない。ＲＯＢ部分４６４が空である場合、現在の論理プロセッサには処理する命令がない。従って、ＭＬＵ１６６に頼って、現在の論理プロセッサを、別の論理プロセッサが実行中の一連の高優先度ロック動作の影響を受けることから保護することができない。このような場合、ＴＬＵ１６５は、このような一連の高優先度ロック動作に直面して長すぎる時間にわたってストールすることから現在の論理プロセッサを保護する責任を負う。したがって、現在のＴＬＵ１６５は、現在の論理プロセッサ１５０が空のＲＯＢ４６４部分を有し、高優先度ロックが別のスレッドで進行中である場合、段階５０６においてＩ側飢餓回避アクションを実行すべきか否かの判断に進むべきである。
【００６４】
図７はさらに、リセット条件５０１のうちの条件Ｋにより、現在の論理プロセッサ１５０が長待ち時間データを受け取った場合、ＴＬＵ１６５がアイドル状態５０２に留まる／アイドル状態５０２に戻るべきことが示されることも示す。少なくとも１つの実施形態では、条件Ｋは、キャッシュミスによりデータ又は命令を待っていた論理プロセッサがついにデータ又は命令を受け取った場合に満たされる。このようなとき、現在の論理プロセッサはアイドル状態５０２に戻るべきである。これは、現在の論理プロセッサ１５０が条件Ｋが満たされたことに応答してアイドル状態５０２に戻らない場合に、論理プロセッサ１５０が誤ってキャッシュミス関連の優先度要求５３０をアービトレータ１８０（図１及び図２）に送ることに進む恐れがあるためである（状態５０６についての以下の考察を参照）。
【００６５】
図７はさらに、リセット条件５０１のうちの条件Ｌにより、現在の論理プロセッサ１５０が妥当な時間枠中に少なくとも１つの最終フォーマット命令をリタイアさせた場合、ＴＬＵ１６５がアイドル状態５０２に留まる／アイドル状態５０２に戻るべきことが示されることも示す。少なくとも１つの実施形態では、最終フォーマット命令はマイクロ動作であり、妥当な時間枠は単一のクロックサイクルである。条件Ｌが満たされる場合、本明細書では、現在の論理プロセッサ１５０が、スレッド命令ストリームの実行において前進したと言う。したがって、ライブロック状況は存在せず、ＴＬＵ１６５はアイドル状態５０２に戻るか又はアイドル状態５０２に留まるべきである。
【００６６】
図７はさらに、リセット条件５０１のうちの条件Ｍにより、論理プロセッサの優先度要求５３０をアービトレータ（図１及び図２の１８０）に送る能力（状態５０６についての以下の考察を参照）がディセーブルされている場合、ＴＬＵ１６５がアイドル状態５０２に留まる／アイドル状態５０２に戻るべきことが示されることも示す。論理プロセッサ１５０の優先度要求５３０をアービトレータ１８０（図１及び図２）に送る能力がディセーブルされている場合、本明細書では「デフィーチャ（defeature）」が真であると言う。条件Ｍは、１）普通ならば状態５０６からの優先度要求５３０の送信に繋がり得る任意の条件が真であり、且つ２）デフィーチャが真である場合に満たすことができる。このような場合では、優先度要求５３０を状態５０６から送る諸条件が真である場合であっても、論理プロセッサ１５０は要求を送ることができない。したがって、論理プロセッサ１５０は、特殊ケース状態５０６（後述）に遷移する／留まるのではなく、アイドル状態５０２に留まる／アイドル状態５０２に戻るべきである。
【００６７】
少なくとも１つの実施形態では、条件Ｍの最初の部分（すなわち、「１）普通ならば状態５０６からの優先度要求５３０の送信に繋がり得る任意の条件が真である」）は、論理プロセッサ１５０がオンコアキャッシュミス（データ又は命令）を受けており、オフコアソース（たとえば、オフコア共有キャッシュ２５１又はオフチップメモリ２０２等）から命令又はデータを待っている場合に満たすことができる。このようなミスはたとえば、１）キャッシュミスがロード命令で発生し、ロード命令が、リタイアするときであるが、ロードデータがプロセッサコア１０４で利用可能ではないためリタイアできない（すなわち、いずれのオンコアキャッシュでもロードバッファ（「ＬＤＲＢ」）でも利用可能ではない）場合に発生し得る。このようなミスはたとえば、２）論理プロセッサ１５０が命令フェッチでオンコアミスを受けており、オフコアソース（たとえば、オフコア共有キャッシュ２５１若しくはオフチップメモリ２０２等）から命令情報を待っている場合、又は３）論理プロセッサ１５０がＳＴＡマイクロ操作（記憶マクロ命令に関連する最終フォーマットのストア−アドレスマイクロ操作であり得る）でオンコアミスを受けており、したがってストア−アドレスマイクロ操作によって示されるメモリロケーションのオフコア検索を待っている場合にも発生し得る。
【００６８】
ここでも、このような第３の条件は、ＳＴＡマイクロ操作がリタイアするときであるが、ストア命令に関連するデータを書き込むべきメモリロケーション（ストア−アドレス）がプロセッサコア１０４のキャッシュ又はストアバッファ（「ＳＴＲＢ」）にないためリタイアできない場合に満たされる。通常、これらの３つの条件はいずれも、ＴＬＵ１６５を特殊ケース状態５０６に遷移させる。しかし、デフィーチャが真の場合、リセット条件Ｍは、論理プロセッサ１５０のこのような条件下で優先度要求５３０を送る能力がディセーブルされているため、このような遷移が発生すべきではないことを示す。
【００６９】
図５に戻ると、ＴＬＵ１６５がライブロック状況が存在するか否かを判断するためになり得る他の状態５０４、５０６を見ることができる。このような状態５０４、５０６は、アイドル状態５０２と共に、本明細書では「検出」状態と呼ばれる。ＴＬＵ１６５は、このような検出状態５０２、５０４、５０６にある間、単に特定の条件について監視しているだけであり、ライブロックを解消しようとするいずれの肯定的なアクションもとっていないため「アクティブ」であるとはみなされない。したがって、論理プロセッサ１５０は、検出状態５０２、５０４、５０６の１つにある間、図７に関連して考察したリセット条件５０１のリセット条件Ｈをトリガすることはなく、したがって他の論理プロセッサ（１５０ａ〜１５０ｎを参照）に現在の論理プロセッサ１５０に対して優先度を付与させることがない。
【００７０】
残りの２つの検出状態５０４及び５０６になることは、論理プロセッサ１５０をアイドル状態５０２から遷移させた状況が、１）最終的に優先度要求５３０をアービトレータ１８０（図１及び図２）に送ることから最終的に恩恵を受け得るものであるか、又は２）論理プロセッサ１５０がＩ側飢餓を受けている可能性があるが、別のスレッドの高優先度ロックによってアクションをとることからブロックされている（このような状況は本明細書では「特殊ケース」と呼ばれる）場合であるか否かによって差別化される。特殊ケースの場合、ＴＬＵ１６５はアイドル状態５０２から特殊ケース状態５０６に遷移する（５５２）。他の場合、ＴＬＵ１６５はアイドル状態５０２から初期カウント状態５０４に遷移する（５５３）。これらの状態５０４、５０６のそれぞれについてさらに詳細に別個に以下考察する。
【００７１】
特殊ケース状態５０６には、１）リセット条件５０１のいずれも真ではなく、且つ２）
ａ．論理プロセッサ１５０がオンコアキャッシュミスを受けているか、又は
ｂ．論理プロセッサ１５０が空のＲＯＢ４６４を有するが、高優先度（「ＨＰ」）ロックが別の論理プロセッサで進行中である
場合にアイドル状態５０２から入る（５５２）。
【００７２】
後者の場合（条件２ｂ）では、現在の論理プロセッサ１５０はＩ側飢餓を受けている可能性がある。しかし、現在の論理プロセッサ１５０は、別のスレッドが高優先度ロック動作を実行中であることからストールも受けている。したがって、高優先度ロック動作が外されるまで、現在の論理プロセッサ１５０はいかなる「アクティブ」状態にも進むべきではない。
【００７３】
前者の場合（２ａ）では、論理プロセッサ１５０はオンコアキャッシュミスを受けている。少なくとも１つの実施形態では、このようなオンコアキャッシュミスは、リセット条件５０１のうちの条件Ｍに関連して上述した３つの条件、すなわち完了できないリタイア時のロード命令、ＳＴＡ命令、又は命令フェッチを調べることによって判断することができる。もちろん、このような実施形態を限定として解釈すべきではなく、他の実施形態では、オンコアキャッシュミスの検出を他の条件又は追加の条件を調べることによって判断することができることを当業者は認識しよう。いずれにしても、論理プロセッサ１５０がオンコアキャッシュミスを受けている（且つデフィーチャが真ではない）場合、ＴＬＵ１６５は特殊ケース状態５０６に遷移して（５５２）、優先度要求信号５３０をアービトレータ１８０に送れるようにし、これは、他の論理プロセッサの処理に明示的に干渉する、ストールアサーション状態５０８等のより厳しいアクション状態に直接遷移するよりも他の論理プロセッサに対する妨害が最小である。
【００７４】
特殊ケース状態５０６中、ＴＬＵ１６５はカウンタを利用して、特殊ケース状態５０６になってから経過したクロックサイクル数をカウントすることができる。代替の実施形態では、クロックサイクルのカウントに代えて、又はこれに加えて、経過時間を測定する他の任意の手法を利用してもよい。所定数のクロックサイクル（Ｘ）が経過した後、ＴＬＵ１６５は優先度要求５３０をアサートすることができる。優先度要求５３０は、１）現在の論理プロセッサ１５０がキャッシュミスを受けている場合、且つ２）ＴＬＵ１６５がこの特殊ケース状態５０６の発生になってから所定量の時間（Ｘ）が経過した場合に発せられる。
【００７５】
優先度要求５３０はアービトレータ１８０（図１及び図２）に行き、現在の論理プロセッサ１５０のメモリ要求に他の論理プロセッサ（１５０ａ〜１５０ｎを参照）からのメモリ要求よりも高い優先度を与えるようにアービトレータ１８０に要求する。別法として、マルチコア実施形態（図２の１０４ａ〜１０４ｎを参照）では、優先度要求５３０は、アービトレータ１８０が現在のプロセッサコア１０４に他のプロセッサコアよりも高い優先度のメモリ要求を与えることを要求することができる。後者の実施形態では、優先度要求５３０は単一コアシステム（図１を参照）では有用でない。したがって、単一コア実施形態の場合にコア固有の優先度要求５３０がオプションであることを図５に破線で示す。優先度要求５３０を発した後、ＴＬＵ１６５は、後述する退出条件のうちの１つが真になるまで特殊ケース状態５０６に留まることができる。
【００７６】
論理プロセッサは、ＲＯＢ４６４の、ＴＬＵ１６５の論理プロセッサ１５０に関連する部分が空であり、プロセッサコア１０４の他の任意の論理プロセッサ（１５０ａ〜１５０ｎを参照）が高優先度ロック動作を実行中である限り特殊ケース状態５０６に留まる（５５５）。しかし、ＴＬＵ１６５が特殊ケース状態５０６中に、別の論理プロセッサのＨＰロック進行中インジケータが真から偽に遷移したと判断する場合、ＴＬＵ１６５は特殊ケース状態５０６を出て、「アクティブ」状態であるストールアサーション状態５０８に入り（５５４）、ストールアサーション状態５０８中、現在の論理プロセッサ１５０は他の論理プロセッサへのストールをアサートすることができる。したがって、初期カウント状態５０４は、ＲＯＢ４６４部分が空の場合に迂回される。状態５０６から状態５０８への遷移５５４は、ＲＯＢ４６４部分が空である場合、初期カウントダウン状態５０４の実行に時間がかからないため高優先度処理を実施する。カウントダウンは、ＲＯＢ４６４が空である場合に時間がかかりすぎ、論理プロセッサはこの場合にいかなる命令も有さず、ＴＬＵ１６５はしたがって、可能な限り速くより多くの命令をＲＯＢ４６４に入れるように設計される。
【００７７】
図５は、ＴＬＵ１６５が、コア１０４のメモリライブロックユニット１６６がトリガされたと判断する場合にも特殊ケース状態５０６から遷移し得る（５５６）ことを示す。このような場合では、ＴＬＵ１６５は、特殊ケース状態５０６から初期カウント状態５０４に遷移する（５５６）。このような動作の下で、ＴＬＵ１６５は一時的な優先度をＭＬＵ１６６に付与して、ＭＬＵ１６６ロジックが、論理プロセッサ１５０が受けている可能性のある長待ち時間オンコアキャッシュミス（上述した、特殊ケース状態５０６に入るための条件２ａを参照）の結果として出現しつつある潜在的なライブロックな解消を試みられるようにする。その処理中、ＭＬＵ１６６は優先度を特定のスレッドに割り当てることができる。遷移５５６時に優先度をＭＬＵ１６６に付与することにより、ＴＬＵ１６５は、ＴＬＵ１６６が優先度を異なる論理プロセッサ１５０に割り当てている間に優先度を現在の論理プロセッサに割り当てることを事実上回避する。このようにして、ＴＬＵ１６５及びＭＬＵ１６６は協働して、優先度を一度に１つのみのスレッドに割り当てる。ＴＬＵ１６５はしたがって、初期カウント状態５０４に遷移して（５５６）、メモリライブロックを軽減することができておらず、現在の論理プロセッサ１５０が許容できる時間量後であっても依然として前進できないと判断する前に、ＭＬＵ１６６に対して所定の全時間期間Ｙ（状態５０４についてのさらなる後述を参照）を許す。
【００７８】
図７に関連して後述したリセット条件Ｋに従い、ＴＬＵ１６５は、ＭＬＵ１６６が、ミスしたキャッシュ情報（データ又は命令）が最終的に受け取られるようにメモリライブロックの解消に成功できる場合に初期カウント状態５０４から元のアイドル状態５０２に遷移する（５５１）ことに留意されたい。
【００７９】
また、リセット条件Ｋに従い、特殊ケース状態５０６から元のアイドル状態５０２への遷移５５１は、通常のプロセッサ動作の一環として、要求されたデータ又はフェッチされた命令が最終的に受け取られる場合に、ＭＬＵ１６６からの助けなしでも行えることにも留意されたい。
【００８０】
上述したように、特殊ケースのいずれの条件も存在せず（オンコアキャッシュミス又は空のＲＯＢ＋ＨＰロック）、且つリセット条件５０１のいずれも真ではない場合、ＴＬＵ１６５はアイドル状態５０２から初期カウント状態５０４に遷移する（５５３）。初期カウント状態中、ＴＬＵ１６５はタイマを維持して、ＴＬＵ１６５が所定の時間量Ｙにわたって初期カウント状態５０４であったか否かを判断する。この所定の時間量Ｙは、この時間量Ｙ後に、現在の論理プロセッサ１５０が前進できていない場合に、現在の論理プロセッサ１５０がライブロック状況を受けていると仮定される時間量を反映するように決定することができる。
【００８１】
少なくとも１つの実施形態では、ＴＬＵ１６５は、初期カウント状態５０４中にカウントダウンタイマを維持し、ここでタイマは所定の時間量Ｙにセットされ、次いでカウンタをクロックサイクル毎に減分する。カウンタが０（又は他の或る所定の最小値）に達すると、論理プロセッサ１５０はライブロック状況にある可能性があり、「アクティブ」状態への遷移を是認することができる。所定の時間値Ｙから所定の最小値までのタイマのカウントダウンはしたがって、少なくとも１つの実施形態では、前進のないことを許容できる所定のクロックサイクル数を表す。
【００８２】
任意のリセット条件５０１が初期カウント状態５０４中に真になった場合、ＴＬＵ１６５はアイドル状態５０２に遷移し、初期カウント状態５０４中に利用されたカウンタを再初期化できることに留意されたい。このような１つのリセット条件である条件Ｌは、最終フォーマット命令のリタイアである。このようなリタイアが初期カウント段階５０４中に発生しない場合、現在の論理プロセッサは命令の実行において前進していない。他のリセット条件Ａ〜Ｋ及びＭは、前進の可能性についての他の或る表示を提供し得る。リセット条件のいずれも所定のクロックサイクル数中に発生しない場合、ＴＬＵ１６５は初期カウント状態５０４からストールアサーション状態５０８に遷移する（５５７）。
【００８３】
図５はしたがって、ストールアサーション状態５０８に、初期カウント状態５０４（遷移５５７を参照）又は特殊ケース状態５０６（遷移５５４を参照）のいずれからでも入ることができることを示す。ストールアサーション状態５０８中、ＴＬＵ１６５は、それ自体の論理プロセッサ（すなわち、現在の論理プロセッサ）を除き、プロセッサ１０４のあらゆる論理プロセッサ１５０ａ〜１５０ｎに対してストール信号をアサートする。このようなアクションは、プロセッサ１０４のすべての論理プロセッサ１５０ａ〜１５０ｎに優先度を付与する。少なくとも１つの実施形態では、ストールアサーション状態５０８中にアサートされるストール信号は、ストール信号がアサートされている間、他の論理プロセッサ（１５０ａ〜１５０ｎを参照）が実行ユニット３６０に命令を出せないようにする。ＴＬＵ１６５は、以下の退出条件のうちの１つが満たされるまで、ストールアサーション状態に留まり、プロセッサ１０４の他のあらゆる論理プロセッサ１５０に対してストール信号をアサートし続ける。
【００８４】
図５は、クロックサイクル数Ｚ１として反映できる所定の時間期間が経過し、且つＲＯＢ４６４の現在の論理プロセッサに関連する部分が空ではない場合に、ＴＬＵ１６５の少なくとも１つの実施形態がストールアサーション状態５０８を退出（５５８）できることを示す。このような場合、適切なＲＯＢ４６４部分が空ではないため、現在の論理プロセッサ１５０は命令飢餓を受けていない。それにもかかわらず、現在の論理プロセッサ１５０は、Ｚ１クロックサイクルの期間にわたって他のすべての論理プロセッサにストール信号をアサートしており、依然として前進することができないでいる。他の論理プロセッサをストールさせても現在の論理プロセッサ１５０は前進できないため、ライブロック状況を軽減するために追加のアクションが求められる。したがってＴＬＵ１６５は、このような退出条件が真の場合に図６の状態６０２に遷移する（５５８）。
【００８５】
一方、現在の論理プロセッサ１５０のＲＯＢ４６４の指定部分が空である場合、すぐ上で考察した状態５０８の第１の退出条件は真ではない。ＲＯＢ４６４部分が空であるため、現在の論理プロセッサ１５０は命令飢餓を受けている可能性がある。したがって、ＲＯＢ４６４部分が空である場合、ＴＬＵ１６５は、所定の時間量Ｚ２待ってから、論理プロセッサ１５０がアクションをとって命令飢餓を軽減できる図６の状態６０４に遷移する（５５９）。
【００８６】
図４を参照して本明細書において考察する図６を参照すると、Ｉ側飢餓アクション状態６０４に、ＲＯＢ４６４部分が少なくとも所定の時間量Ｚ２にわたって空であることに応答して、ストールアサーション状態５０８から入ることができることが分かる。Ｉ側飢餓アクション状態６０４中、ＴＬＵ１６５は１つ又は複数のアクションをとって、現在の論理プロセッサのＲＯＢ４６４部分により多くの命令を入れようとする。これらのアクションは本明細書では飢餓回避アクションと呼ばれる。状態６０４中、ＴＬＵ１６５は、状態５０８中にアサートされた、他の論理プロセッサ（複数可）１５０ａ〜１５０ｎに対するストール信号をデアサートする。このようなアサーション中、現在の論理プロセッサ１５０は前進に失敗し、ストールは助けにならず、現在の論理プロセッサ１５０は依然として命令の欠如を経験している（すなわち、ＲＯＢ４６４が依然として空である）。実際に、状態６０４に入るときに、状態５０８中にアサートされたストール信号が、別の論理プロセッサによるマクロ命令の実行完了を妨げ、これが現在の論理プロセッサ１５０が必要とする資源の解放を妨げていた可能性がある場合があり得る。
【００８７】
状態６０４に入るときに、現在の論理プロセッサが実際に命令側飢餓を受けている（すなわち、実行に利用可能な命令がない）ものと仮定する。このような飢餓は、いくつかの要因のうちのいずれかを原因とし得る。少なくとも１つの実施形態では、このような要因には、命令フェッチ要求がメモリ命令調停ロジック（図示せず）においてブロックされていること、１つ若しくは複数の他の論理プロセッサが一連の高優先度ロック動作を実行していたこと、又は現在の論理プロセッサ１５０の命令フェッチが繰り返し「否定」応答を、メモリシステムへの要求の処理に利用される任意の構造から受け取っていたことが含まれ得る。
【００８８】
Ｉ側飢餓状態６０４中、ＴＬＵ１６５は以下のアクションをとることができる。すなわち、１）プロセッサコア１０４の他のすべての論理プロセッサ１５０ａ〜１５０ｎへのストール信号をデアサートすること、及び２）現在の論理プロセッサに「スレッド優先度」を与えることを要求することである。「スレッド優先度」要求はスレッド優先度ロジック（図示せず）に対して行うことができる。現在の論理プロセッサがスレッド優先度を有する場合、ＭＬＵ１６６を呼び出すことができる。
【００８９】
図９を手短に参照しＩ側飢餓アクション状態６０４（図６）の少なくとも１つの実施形態中に協働することができるＴＬＵ１６５及びＭＬＵ１６６の特定の特徴を示す。図９について図３、図５、及び図６を参照して本明細書において考察する。図９は、各ＴＬＵ１６５ａ〜１６５ｎがライブロック検出器９２０及びライブロックブレーカ９３０を備えることができることを示す。少なくとも１つの実施形態では、ライブロック検出器９２０はリセット条件５０１を監視して、検出段階５０２、５０４、５０６を実行する。ライブロックブレーカ９３０は、少なくとも１つの実施形態では、「アクティブ」状態５０８、６０２、６０４、及び６０６のアクションを実行する責任を負う。
【００９０】
図９は、ＭＬＵ１６６がメモリライブロックブレーカ９４０を備えることを示す。メモリライブロックブレーカ９４０は、少なくとも１つの実施形態では、上述したような長引くオンコアキャッシュミス状況等のメモリライブロック状況を軽減するアクションをとる責任を負う。
【００９１】
図９は、ＭＬＵ１６６のメモリライブロックブレーカ９４０が共有ライブロックブレーカロジック９５０を備えることができることを示す。共有ライブロックブレーカロジック９５０は、現在の論理プロセッサが「スレッド優先度」を取得していることに応答してＩ側飢餓アクション状態６０４中に呼び出すことができる。共有ライブロックブレーカロジック９５０は、プロセッサコア１０４上の任意の論理プロセッサ１５０ａ〜１５０ｎのＴＬＵ１６５によって呼び出すことができる。
【００９２】
図６を再び参照すると、Ｉ側飢餓を受けている論理プロセッサ１５０が、現在の論理プロセッサに最初に「スレッド優先度」が与えられたときから連続した所定の時間Ｎ（クロックサイクル数を反映することができる）にわたってスレッド優先度を割り当てられている場合、Ｉ側飢餓アクション状態６０４を退出できることが分かる。このような場合、ＴＬＵ１６５は削除状態６０６に遷移する（６５１）。
【００９３】
遷移６５１は、Ｉ側飢餓アクション状態６０４中にとられたアクションが成功しない場合のみ行われることに留意されたい。たとえば、別の論理プロセッサによって開始される自己書き換えコード（ＳＭＣ）が繰り返し検出されることにより、飢えたスレッドに強制的に絶えず命令を破棄及びリフェッチさせ、そうしてＲＯＢ４６４部分を空の状態に保つことができる。しかし、状態６０４中にとられるＩ側飢餓回避アクションはおそらく、命令飢餓状況の軽減に成功するであろう。その場合、命令がフェッチされ、現在の論理プロセッサ１５０のＲＯＢ４６４の割り当てられた部分に送られる。このような場合、現在の論理プロセッサ１５０は、少なくとも１つの実施形態では、命令飢餓状況から遷移しているであろう。したがって、リセット条件Ｅ（図７の５０１を参照）が真になり、ＴＬＵ１６５はＩ側飢餓アクション状態６０４からアイドル状態５０２（図５を参照）に遷移する（５０１）。
【００９４】
図６は、削除カウントダウン状態６０２にストールアサーション状態５０８から入る（５５８）ことができることを示す。削除カウントダウン状態６０２中、ここでもＴＬＵ１６５は、他の論理プロセッサ（複数可）１５０ａ〜１５０ｎに対して状態５０８中にアサートされたストール信号をデアサートする。このようなアサーション中、現在の論理プロセッサ１５０は前進に失敗しており、ストールは助けにならなかった。実際に、状態６０２に入るときに、状態５０８中にアサートされたストール信号が、別の論理プロセッサ１５０によるマクロ命令の実行完了を妨げ、これが現在の論理プロセッサ１５０が必要とする資源の解放が妨げられていた場合があり得る。しかし、ストールは他の論理プロセッサのタイミングを乱した可能性があり、これは現在の論理プロセッサ１５０の前進を助けるのに有益であることを示し得る。
【００９５】
削除カウントダウン状態６０２に入ると、現在の論理プロセッサ１５０は、最終的に前進に繋がる状態にあり得る。たとえば、現在の論理プロセッサ１５０は、ＭＬＵ１６６が現在アクティブであるが、ライブロックブレーカ処理の完了にさらなる時間が必要であるメモリライブロックを受けている可能性がある。削除カウントダウン状態６０２中、ＴＬＵ１６５は、現在の論理プロセッサ１５０がリセット条件５０１のうちの１つを実現することを期待して所定の時間量（たとえば、Ｍサイクルカウントとして反映することができる）待つ。少なくとも１つの実施形態では、図６に示すＭカウント及びＮカウントは同じ数であってもよいが、このような同一性はすべての実施形態に求められるわけではない。
【００９６】
図６は、少なくとも１つの実施形態において、ＴＬＵ１６５が以下の条件で、すなわち、現在の論理プロセッサに「スレッド優先度」が割り当てられており、スレッド優先度を連続した時間枠Ｍにわたって保持している場合に削除カウントダウン状態６０２から削除状態６０６に遷移する（６５２）ことを示す。この時間中、現在の論理プロセッサ１５０は、スレッド優先度にもかかわらず、スレッド前進を行うことができていない。上述したように、ＴＬＵ１６５はまた、現在の論理プロセッサが命令飢餓状態にある場合、すなわち状態６０４中にとられたＩ側飢餓アクションが成功しなかった場合にも削除状態６０６に遷移する（６５１）ことができる。
【００９７】
状態６０６中、ＴＬＵ１６５はコア内部「削除」信号を、プロセッサコア１０４の他の各論理プロセッサ（１５０ａ〜１５０ｎを参照）に発する。このようなアクションの結果、現在の論理プロセッサ１５０が前進できるようになることが期待される。図１に示すもの等の単一コアの実施形態では、方法５００を処理することは、状態６０６からアイドル状態５０２への遷移（６５４）であり得る（コネクタ「Ｃ」を参照）。
【００９８】
図６は、上述した状態遷移のうちの１つの結果としてではなく外部イベントに応答しても、削除状態６０６になり得る（６５５）ことを示す。このような外部イベントはたとえば、オプション状態６０８（後述）にある別のコア上のＴＬＵ１６５により生成された全スレッド削除要求の受信であり得る。
【００９９】
状態６０６から、状態６０６中に発せられたコア内部全スレッド「削除」信号が、所定の時間量Ｐ以内に現在の論理プロセッサ１５０の前進に繋がらなかった場合にオプションの状態遷移６５３が発生し得る。状態６０８が図６では破線で示されることに留意されたい。これは、遷移６５３及び状態６０８が、図２に示す実施形態２００等のマルチコアの実施形態にのみ当てはまるという意味でオプションであるためである。状態６０８において、全コア削除要求がアービトレータ１８０（図１及び図２）に送られる。状態６０８において生成される要求に応答して、アービトレータ１８０の少なくとも１つの実施形態は以下のアクションを開始する。すなわち、アービトレータ１８０が保持しているすべてのキューが、すべてのコア１０４ａ〜１０４ｎ上のすべてのスレッド１５０ａ〜１５０ｎ（現在の論理プロセッサを除く）について空になる。また、すべての新しい全コア削除要求は、現在の論理プロセッサ１５０から発せられるもの以外はブロックされる（図８のブロック８０６を参照）。最後に、全スレッド削除要求（状態５０８の上記考察を参照）は他のあらゆるプロセッサコア１０４ａ〜１０４ｎに発せられるとともに、現在の論理プロセッサ１５０に関連するプロセッサコア１０４上の他のあらゆるスレッド１５０ａ〜１５０ｎ（現在の論理プロセッサを除く）にも発せられる（上述したように、このような削除要求は、他のプロセッサコアの論理プロセッサによって受け取られた場合、そのような論理プロセッサのＴＬＵ１６５を状態６０６にさせることができる−ブロック６２０の上記考察を参照）。状態６０８から、ＴＬＵ１６５はアイドル状態に戻る（コネクタ「Ｄ」を参照）。
【０１００】
図８は、マルチコアの実施形態の場合に状態６０８中に発せられるもの等の全コア削除要求を処理する方法８００を示すフローチャートである。少なくとも１つの実施形態では、方法８００は、図１及び図２に示すアービトレータ１８０等のアービトレータによって実行することができる。アービトレータは、少なくとも１つの実施形態では、本明細書では「アンコア」と呼ばれるロジックのオフコア部分２８０（図２）の一部として備えることができる。
【０１０１】
図８は、方法８００がブロック８０２において始まり、ブロック８０４に進むことを示す。単一の全コア削除要求が（すなわち、第１のプロセッサコア１０４ａ上のＴＬＵ１６５から）生成された場合、処理はブロック８０６に進む。状態６０８に関連する処理に関連して上述したように、要求するコア１０４ａにはブロック８０６において優先度が割り当てられ、残りのコア１０４ａ〜１０４ｎからの後続するすべての全コア削除要求は無視される。
【０１０２】
処理はブロック８０６からブロック８０８に進む。ブロック８０８において、全スレッド削除要求が、元々の全コア削除要求が発せられたコアを除き、他のすべてのコア１０４ａ〜１０４ｎに対して開始される。このような要求は他のコアによって受け取られ、他のコアを削除状態６０６（図６のブロック６２０を参照）に遷移させる。次いで、処理はブロック８１４において終了する。
【０１０３】
しかし、２つ以上の同時の全コア削除要求が複数のコアから受け取られる場合、処理はブロック８０４からブロック８１０に進む。ブロック８１０において、方法８００はアービトレーションポリシーを適用して、複数の要求するコアのうちの１つを優先コアとして選択する。少なくとも１つの実施形態では、要求するコアは、削除要求と共にコアＩＤをアービトレータに供給することができる。次いで、アービトレータ１８０は、最高ＩＤ又は最低ＩＤを有するコアを優先コアとして選択する等の単純な選択アルゴリズムを適用することができる。ブロック８１０から、処理は、前の段落において述べたようにブロック８０８に進み、次いでブロック８１４に進む。
【０１０４】
上記考察は、複数のスレッド間でスレッド優先度を調整して、ライブロックブレーカロジック、Ｉ側飢餓回避ロジック、及び高優先度ロック処理の間の優先度も保持しながらスレッド命令の実行を前進できるようにする方法、システム、及び装置の選択された実施形態を説明する。本明細書において説明したメカニズムは、単一コア又はマルチコアのマルチスレッド化システムと併せて利用することができる。上記説明では、方法、システム、及び装置の各種態様について説明した。説明のために、特定の数、例、システム、及び構成についてはより完全な理解を提供するために記さなかった。しかし、説明した方法及び装置を特定の詳細なしで実施可能なことが当業者には明らかである。他の場合では、本方法及び本装置を曖昧にしないように既知の特徴を省くか、又は簡易化した。
【０１０５】
本明細書において説明した方法の実施形態は、ハードウェア、ハードウェアエミュレーションソフトウェア若しくは他のソフトウェア、ファームウェア、又はこのような実施手法の組み合わせで実施することができる。本発明の実施形態は、少なくとも１つのプロセッサ、データ記憶システム（揮発性メモリ及び不揮発性メモリ、並びに／又は記憶素子を含む）、少なくとも１つの入力装置、及び少なくとも１つの出力装置を備えるプログラマブルシステムに対して実施することができる。本願では、処理システムは、プロセッサ、たとえば、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、又はマイクロプロセッサ等を有する任意のシステムを含む。
【０１０６】
プログラムは、汎用プログラマブル処理システム又は特定用途向けプログラマブル処理システムにより可読の記憶媒体又は記憶装置（たとえば、ハードディスクドライブ、フロッピーディスクドライブ、読み取り専用メモリ（ＲＯＭ）、ＣＤ−ＲＯＭ装置、フラッシュメモリ装置、デジタル多用途ディスク（ＤＶＤ）、又は他の記憶装置）に記憶することができる。処理システムのプロセッサがアクセス可能な命令は、記憶媒体又は記憶装置が処理システムに読み取られて本明細書に述べた手続きを実行するときに処理システムの構成及び動作を可能にする。本発明の実施形態は、処理システムと併せて使用するように構成された機械可読記憶媒体として実施されるものとして考えることもでき、この場合、記憶媒体は、処理システムに本明細書に述べた機能を特定の規定された様式で実行するように動作させるように構成される。
【０１０７】
このような処理システムの例の少なくとも１つの実施形態を図４に示す。サンプルシステム４００を使用して、たとえば、ライブロック状況を検出し、このような状況を軽減するために修正アクションをとることができる。サンプルシステム４００は、Intel Corporationから入手可能なＰｅｎｔｉｕｍ（登録商標）マイクロプロセッサ、Ｐｅｎｔｉｕｍ（登録商標）Ｐｒｏマイクロプロセッサ、Ｐｅｎｔｉｕｍ（登録商標）ＩＩマイクロプロセッサ、Ｐｅｎｔｉｕｍ（登録商標）ＩＩＩマイクロプロセッサ、Ｐｅｎｔｉｕｍ（登録商標）４マイクロプロセッサ、Ｉｔａｎｉｕｍ（登録商標）マイクロプロセッサ、及びＩｔａｎｉｕｍ（登録商標）２マイクロプロセッサに基づく処理システムを表すが、他のシステム（他のマイクロプロセッサを有するパーソナルコンピュータ（ＰＣ）、エンジニアリングワークステーション、個人情報端末、及び他のハンドヘルド装置、セットトップボックス等を含む）を使用することも可能である。一実施形態では、サンプルシステムはMicrosoft Corporationから入手可能な、或るバージョンのＷｉｎｄｏｗｓ（商標）オペレーティングシステムを実行することができるが、たとえば、他のオペレーティングシステム及びグラフィカルユーザインタフェースを使用することも可能である。
【０１０８】
図４を参照すると、サンプル処理システム４００はメモリシステム４９０及びプロセッサ４０４を備えることができる。メモリシステム４９０は、プロセッサ４０４の動作を制御するための命令２４１及びデータ２４０を記憶することができる。
【０１０９】
メモリシステム４９０はメモリの一般化された表現として意図され、ハードドライブ、ＣＤ−ＲＯＭ、ランダムアクセスメモリ（ＲＡＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、フラッシュメモリ、及び関連回路等の様々な形態のメモリを含むことができる。メモリシステム４９０は、プロセッサ４０４が実行可能なデータ信号で表される命令２４１及び／又はデータ２４０を記憶することができる。命令２４１及び／又はデータ２４０は、本明細書において考察した技法の任意のもの又はすべてを実行するコードを含むことができる。
【０１１０】
本発明の特定の実施形態を図示し説明したが、変更及び変形を本発明の広義の態様において本発明から逸脱することなく行えることが当業者には明らかであろう。たとえば、上述したカウンタ値Ｘ、Ｙ、Ｚ１、Ｚ２、Ｍ、Ｎ、Ｐはカウントアップカウンタ値として利用してもカウントダウンカウンタ値として利用してもよい。このような各カウンタ値は異なる値であってもよいが、そうである必要はない。たとえば、少なくとも１つの実施形態では、Ｐ＞＞Ｍ、Ｐ＞＞Ｎ、Ｚ１＞Ｙ、Ｚ２＞Ｙ、Ｐ＞Ｚ１、Ｐ＞Ｚ２、且つＸ＞Ｚ１である。このようなカウンタ値のデフォルトをハードウェアにセットすることができる。いくつかの実施形態では、デフォルトカウンタ値は、たとえば、マイクロコード、他のファームウェアコード又はソフトウェアコードで変更可能なようにプログラム可能であり得る。
【０１１１】
したがって、変更及び変形を本発明の広義の態様で本発明から逸脱することなく行えることを当業者は認めよう。添付の特許請求の範囲はその範囲内に、本発明の真の範囲内にあるこのような変更及び変形をすべて包含するものである。
【図面の簡単な説明】
【０１１２】
【図１】複数の論理プロセッサの１つのスレッド前進をそれぞれ判断する複数のスレッドライブロックユニットを含むプロセッサの少なくとも１つの実施形態のブロック図である。
【図２】開示する技法を実行可能なマルチスレッド化システムの少なくとも１つの実施形態を示すブロック図である。
【図３】複数の論理プロセッサのそれぞれにスレッドライブロックユニットを含むプロセッサの少なくとも１つの実施形態のフロントエンド及び実行コアを示すブロック図である。
【図４】複数の論理プロセッサのそれぞれにスレッドライブロックユニットを含む処理システムの少なくとも１つの実施形態のメモリ階層を示すブロック図である。
【図５】複数の同時スレッド間でのライブロックを検出して軽減する方法の少なくとも１つの実施形態を示す状態図である。
【図６】複数の同時スレッド間でのライブロックを検出して軽減する方法の少なくとも１つの実施形態を示す状態図である。
【図７】図５及び図６に示す方法のアイドル状態に入るためのリセット条件を示すブロック図である。
【図８】複数のプロセッサ間でのライブロック優先要求を調停する方法の少なくともオン実施形態を示すフローチャートである。
【図９】スレッドライブロックユニットとメモリライブロックユニットの間で共有されるライブロックブレーカロジックの少なくとも１つの実施形態を示すブロック図である。
【図１】
2008513894.tif 000003
【図２】
2008513894.tif 000004
【図３】
2008513894.tif 000005
【図４】
2008513894.tif 000006
【図５】
2008513894.tif 000007
【図６】
2008513894.tif 000008
【図７】
2008513894.tif 000009
【図８】
2008513894.tif 000010
【図９】
2008513894.tif 000011
【国際調査報告】
2008513894.tif 000012
2008513894.tif 000013
2008513894.tif 000014