(57)【要約】【課題】アウトオブオーダ・プロセッサ内の１つまたは複数のサマリー・ビットを使用して拡張可能な依存関係行列のためのコンピュータ実装方法、システム、およびコンピュータ・プログラム製品を提供する。【解決手段】本発明の態様は、発行キュー内の命令間の依存関係を追跡することを含む。この追跡することは、発行キュー内の命令ごとに、命令が、この命令の前に発行キューに追加されたしきい値の数の命令の各々に依存するかどうかを識別することを含む。この追跡することは、命令が、しきい値の数の命令の各々に含まれていない、この命令の前に発行キューに追加された１つまたは複数の他の命令に依存するかどうかを識別することも含む。命令と他の命令の各々との間の依存関係が追跡される。命令は、追跡することに少なくとも部分的に基づいて、発行キューから発行される。【選択図】図１
2021504791.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータ実装方法であって、
発行キュー内の命令間の依存関係を追跡することを含んでおり、前記追跡することは、前記発行キュー内の命令ごとに、
前記命令が、前記命令の前に前記発行キューに追加されたしきい値の数の命令の各々に依存するかどうかを識別することであって、前記命令と前記しきい値の数の命令の各々との間の依存関係が個別に追跡される、前記識別することと、
前記命令が、前記しきい値の数の命令の前記各々に含まれていない、前記命令の前に前記発行キューに追加された１つまたは複数の他の命令に依存するかどうかを識別することと
を含んでおり、
前記命令と前記他の命令の各々との間の依存関係は、前記命令と前記他の命令のうちの少なくとも１つまたは複数のグループのうちの１つ内の少なくとも１つの命令との間の依存関係を識別することに基づいて、前記命令と１つのグループまたは前記複数のグループのうちの前記１つとの間に依存関係が存在することを示すことによって、前記１つのグループまたは前記複数のグループとして追跡され、他の命令の前記１つのグループは、個別に追跡される前記しきい値の数の命令に含まれていない前記発行キュー内のすべての命令を含んでおり、前記他の命令の各々は、前記複数のグループのうちグループの少なくとも１つに割り当てられ、
前記コンピュータ実装方法はさらに、
前記追跡することに少なくとも部分的に基づいて、前記発行キューから命令を発行することを含んでいる、
コンピュータ実装方法。
【請求項２】
前記命令が、しきい値の数の命令の前記各々に含まれていない、前記命令の前に前記発行キューに追加された１つまたは複数の他の命令に依存するかどうかを識別することを含んでおり、前記命令と前記他の命令との間の依存関係は、前記命令と前記他の命令のうちの少なくとも１つとの間の依存関係を識別することに基づいて、前記命令と他の命令の単一のグループとの間に依存関係が存在することを示すことによって、前記単一のグループとして追跡され、前記他の命令の単一のグループは、個別に追跡される前記しきい値の数の命令に含まれていない前記発行キュー内のすべての命令を含んでいる、請求項１に記載のコンピュータ実装方法。
【請求項３】
前記命令が、前記しきい値の数の命令の前記各々に含まれていない、前記命令の前に前記発行キューに追加された１つまたは複数の他の命令に依存するかどうかを識別することを含んでおり、前記命令と前記他の命令の各々との間の依存関係は、前記命令と複数のグループのうちの１つ内の少なくとも１つの命令との間の依存関係を識別することに基づいて、前記命令と前記複数のグループのうちの前記１つとの間に依存関係が存在することを示すことによって、前記複数のグループとして追跡され、前記他の命令の各々は、前記グループのうちの少なくとも１つに割り当てられる、請求項１に記載のコンピュータ実装方法。
【請求項４】
前記命令と前記他の命令の単一のグループとの間の前記依存関係が、単一のサマリー・ビットを使用して追跡される、請求項１または２に記載のコンピュータ実装方法。
【請求項５】
前記命令と前記グループの各々との間の依存関係が、前記グループの各々に対して異なるサマリー・ビットを使用して追跡される、請求項１または３に記載のコンピュータ実装方法。
【請求項６】
前記単一のサマリー・ビットが、前記命令と前記他の命令の単一のグループ内の少なくとも１つの命令との間に依存関係が存在することを示すように設定され、前記単一のサマリー・ビットが設定された後に、前記他の命令の単一のグループ内の前記他の命令のすべてが前記発行キューから発行されたことを検出することに少なくとも部分的に基づいて、前記命令と前記他の命令のグループとの間に前記依存関係が存在しなくなったことを示すように、前記単一のサマリー・ビットがリセットされる、請求項４に記載のコンピュータ実装方法。
【請求項７】
前記グループの各々の前記サマリー・ビットが、前記命令と前記グループ内の少なくとも１つの命令との間に依存関係が存在することを示すように設定され、前記サマリー・ビットが設定された後に、前記グループに割り当てられた前記命令のすべてが前記発行キューから発行されたことを検出することに少なくとも部分的に基づいて、前記命令と前記グループとの間に前記依存関係が存在しなくなったことを示すように、前記サマリー・ビットがリセットされる、請求項５に記載のコンピュータ実装方法。
【請求項８】
前記命令と前記しきい値の数の命令の各々との間の依存関係が、前記しきい値の数の命令の各々に対して別々のビットを使用して追跡される、請求項１に記載のコンピュータ実装方法。
【請求項９】
前記発行キューが先入れ先出し（ＦＩＦＯ）キューであり、前記発行キュー内の前記命令が、前記発行キューに追加された順序に基づいて順序付けられる、請求項１に記載のコンピュータ実装方法。
【請求項１０】
前記発行キュー内の前記命令が、アウトオブオーダ・プロセッサによって実行されている単一のスレッドから来る、請求項１に記載のコンピュータ実装方法。
【請求項１１】
前記発行キューがＮ個の命令を保持し、前記しきい値の数の命令がＮ／２個である、請求項１に記載のコンピュータ実装方法。
【請求項１２】
前記しきい値の数の命令の前記各々内の前記命令が、マルチスレッド環境内の単一のスレッドに対応する前記発行キュー内の命令のすべてを含んでいる、請求項１に記載のコンピュータ実装方法。
【請求項１３】
前記しきい値の数がプログラム可能である、請求項１に記載のコンピュータ実装方法。
【請求項１４】
システムであって、
アウトオブオーダ・プロセッサの発行キュー内の依存関係行列と、
コンピュータ可読命令を含んでいるメモリと、
前記コンピュータ可読命令を実行するための１つまたは複数のプロセッサと
を備えており、前記コンピュータ可読命令が、動作を実行するように前記１つまたは複数のプロセッサを制御し、前記動作は、
発行キュー内の命令間の依存関係を追跡することを含んでおり、前記追跡することは、前記発行キュー内の命令ごとに、
前記命令が、前記命令の前に前記発行キューに追加されたしきい値の数の命令の各々に依存するかどうかを識別することであって、前記命令と前記しきい値の数の命令の各々との間の依存関係が個別に追跡される、前記識別することと、
前記命令が、前記しきい値の数の命令の前記各々に含まれていない、前記命令の前に前記発行キューに追加された１つまたは複数の他の命令に依存するかどうかを識別することと
を含んでおり、
前記命令と前記他の命令の各々との間の依存関係は、前記命令と前記他の命令のうちの少なくとも１つまたは複数のグループのうちの１つ内の少なくとも１つの命令との間の依存関係を識別することに基づいて、前記命令と１つのグループまたは前記複数のグループのうちの前記１つとの間に依存関係が存在することを示すことによって、前記１つのグループまたは前記複数のグループとして追跡され、他の命令の前記１つのグループは、個別に追跡される前記しきい値の数の命令に含まれていない前記発行キュー内のすべての命令を含んでおり、前記他の命令の各々は、前記複数のグループのうちグループの少なくとも１つに割り当てられ、
前記動作はさらに、
前記追跡することに少なくとも部分的に基づいて、前記発行キューから命令を発行することを含んでいる、
システム。
【請求項１５】
前記命令が、しきい値の数の命令の前記各々に含まれていない、前記命令の前に前記発行キューに追加された１つまたは複数の他の命令に依存するかどうかを識別することを含んでおり、前記命令と前記他の命令との間の依存関係は、前記命令と前記他の命令のうちの少なくとも１つとの間の依存関係を識別することに基づいて、前記命令と他の命令の単一のグループとの間に依存関係が存在することを示すことによって、前記単一のグループとして追跡され、前記他の命令の単一のグループは、個別に追跡される前記しきい値の数の命令に含まれていない前記発行キュー内のすべての命令を含んでいる、請求項１４に記載のシステム。
【請求項１６】
前記命令が、前記しきい値の数の命令の前記各々に含まれていない、前記命令の前に前記発行キューに追加された１つまたは複数の他の命令に依存するかどうかを識別することを含んでおり、前記命令と前記他の命令の各々との間の依存関係は、前記命令と複数のグループのうちの１つ内の少なくとも１つの命令との間の依存関係を識別することに基づいて、前記命令と前記複数のグループのうちの前記１つとの間に依存関係が存在することを示すことによって、前記複数のグループとして追跡され、前記他の命令の各々は、前記グループのうちの少なくとも１つに割り当てられる、請求項１４に記載のシステム。
【請求項１７】
前記命令と前記他の命令の単一のグループとの間の前記依存関係が、単一のサマリー・ビットを使用して追跡される、請求項１４または１５に記載のシステム。
【請求項１８】
前記命令と前記グループの各々との間の依存関係が、前記グループの各々に対して異なるサマリー・ビットを使用して追跡される、請求項１４または１６に記載のシステム。
【請求項１９】
前記単一のサマリー・ビットが、前記命令と前記他の命令の単一のグループ内の少なくとも１つの命令との間に依存関係が存在することを示すように設定され、前記単一のサマリー・ビットが設定された後に、前記他の命令のグループ内の前記他の命令のすべてが前記発行キューから発行されたことを検出することに少なくとも部分的に基づいて、前記命令と前記他の命令のグループとの間に前記依存関係が存在しなくなったことを示すように、前記単一のサマリー・ビットがリセットされる、請求項１７に記載のシステム。
【請求項２０】
前記グループの各々の前記サマリー・ビットが、前記命令と前記グループ内の少なくとも１つの命令との間に依存関係が存在することを示すように設定され、前記サマリー・ビットが設定された後に、前記グループに割り当てられた前記命令のすべてが前記発行キューから発行されたことを検出することに少なくとも部分的に基づいて、前記命令と前記グループとの間に前記依存関係が存在しなくなったことを示すように、前記サマリー・ビットがリセットされる、請求項１８に記載のシステム。
【請求項２１】
前記命令と前記しきい値の数の命令の各々との間の依存関係が、前記しきい値の数の命令の各々に対して別々のビットを使用して追跡される、請求項１４に記載のシステム。
【請求項２２】
前記発行キューが先入れ先出し（ＦＩＦＯ）キューであり、前記発行キュー内の前記命令が、前記発行キューに追加された順序に基づいて順序付けられる、請求項１４に記載のシステム。
【請求項２３】
前記発行キュー内の前記命令が、アウトオブオーダ・プロセッサによって実行されている単一のスレッドから来る、請求項１４に記載のシステム。
【請求項２４】
前記発行キューがＮ個の命令を保持し、前記しきい値の数の命令がＮ／２個である、請求項１４に記載のシステム。
【請求項２５】
前記しきい値の数の命令の前記各々内の前記命令が、マルチスレッド環境内の単一のスレッドに対応する前記発行キュー内の命令のすべてを含んでいる、請求項１４に記載のシステム。
【請求項２６】
前記しきい値の数がプログラム可能である、請求項１４に記載のシステム。
【請求項２７】
プログラム命令が具現化されているコンピュータ可読記憶媒体を備えているコンピュータ・プログラム製品であって、前記プログラム命令は、プロセッサに動作を実行させるように、前記プロセッサによって実行可能であり、前記動作は、
発行キュー内の命令間の依存関係を追跡することを含んでおり、前記追跡することは、前記発行キュー内の命令ごとに、
前記命令が、前記命令の前に前記発行キューに追加されたしきい値の数の命令の各々に依存するかどうかを識別することであって、前記命令と前記しきい値の数の命令の各々との間の依存関係が個別に追跡される、前記識別することと、
前記命令が、前記しきい値の数の命令の前記各々に含まれていない、前記命令の前に前記発行キューに追加された１つまたは複数の他の命令に依存するかどうかを識別することと
を含んでおり、
前記命令と前記他の命令の各々との間の依存関係は、前記命令と前記他の命令のうちの少なくとも１つまたは複数のグループのうちの１つ内の少なくとも１つの命令との間の依存関係を識別することに基づいて、前記命令と１つのグループまたは前記複数のグループのうちの前記１つとの間に依存関係が存在することを示すことによって、前記１つのグループまたは前記複数のグループとして追跡され、他の命令の前記１つのグループは、個別に追跡される前記しきい値の数の命令に含まれていない前記発行キュー内のすべての命令を含んでおり、前記他の命令の各々は、前記複数のグループのうちグループの少なくとも１つに割り当てられ、
前記動作はさらに、
前記追跡することに少なくとも部分的に基づいて、前記発行キューから命令を発行することを含んでいる、
コンピュータ・プログラム製品。
【請求項２８】
前記命令が、しきい値の数の命令の前記各々に含まれていない、前記命令の前に前記発行キューに追加された１つまたは複数の他の命令に依存するかどうかを識別することを含んでおり、前記命令と前記他の命令との間の依存関係は、前記命令と前記他の命令のうちの少なくとも１つとの間の依存関係を識別することに基づいて、前記命令と他の命令の単一のグループとの間に依存関係が存在することを示すことによって、前記単一のグループとして追跡され、前記他の命令の単一のグループは、個別に追跡される前記しきい値の数の命令に含まれていない前記発行キュー内のすべての命令を含んでいる、請求項２７に記載のコンピュータ・プログラム製品。
【請求項２９】
前記命令が、前記しきい値の数の命令の前記各々に含まれていない、前記命令の前に前記発行キューに追加された１つまたは複数の他の命令に依存するかどうかを識別することを含んでおり、前記命令と前記他の命令の各々との間の依存関係は、前記命令と複数のグループのうちの１つ内の少なくとも１つの命令との間の依存関係を識別することに基づいて、前記命令と前記複数のグループのうちの前記１つとの間に依存関係が存在することを示すことによって、前記複数のグループとして追跡される、請求項２７に記載のコンピュータ・プログラム製品。
【請求項３０】
前記命令と前記他の命令の単一のグループとの間の前記依存関係が、単一のサマリー・ビットを使用して追跡され、
前記単一のサマリー・ビットが、前記命令と前記他の命令の単一のグループ内の少なくとも１つの命令との間に依存関係が存在することを示すように設定され、
前記単一のサマリー・ビットが設定された後に、前記他の命令の単一のグループ内の前記他の命令のすべてが前記発行キューから発行されたことを検出することに少なくとも部分的に基づいて、前記命令と前記他の命令のグループとの間に前記依存関係が存在しなくなったことを示すように、前記単一のサマリー・ビットがリセットされる、
請求項２７または２８に記載のコンピュータ・プログラム製品。
【請求項３１】
前記他の命令の各々が、前記グループのうちの少なくとも１つに割り当てられ、前記命令と前記グループの各々との間の依存関係が、前記グループの各々に対して異なるサマリー・ビットを使用して追跡され、
前記グループの各々の前記サマリー・ビットが、前記命令と前記グループ内の少なくとも１つの命令との間に依存関係が存在することを示すように設定され、
前記サマリー・ビットが設定された後に、前記グループに割り当てられた前記命令のすべてが前記発行キューから発行されたことを検出することに少なくとも部分的に基づいて、前記命令と前記グループとの間に前記依存関係が存在しなくなったことを示すように、前記サマリー・ビットがリセットされる、
請求項２７または２９に記載のコンピュータ・プログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、一般に、アウトオブオーダ（ＯｏＯ：out-of-order）プロセッサに関し、特に、ＯｏＯプロセッサの発行キュー内の１つまたは複数のサマリー・ビットを使用して拡張可能な依存関係行列に関する。
【背景技術】
【０００２】
ＯｏＯプロセッサでは、命令順序付けユニット（ＩＳＵ：instructionsequencing unit）が、命令をさまざまな発行キューにディスパッチし、ＯｏＯ実行のサポートにおいてレジスタ名を変更し、さまざまな発行キューから実行パイプラインに命令を発行し、実行された命令を完了し、例外条件を処理する。レジスタ名の変更は、通常、命令が各発行キューに配置される前に、ＩＳＵ内のマッパー論理によって実行される。
【０００３】
ＩＳＵは、命令間の依存関係を追跡するための依存関係行列を含んでいる１つまたは複数の発行キューを含む。依存関係行列は、通常、発行キュー内の命令ごとに１行および１列を含む。発行キュー内の命令の数が増え続けるにつれて、依存関係行列の各々によって消費される空間および電力の量が増大している。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
したがって、そのような増大することに対処する必要がある。
【課題を解決するための手段】
【０００５】
本発明の実施形態は、アウトオブオーダ（ＯｏＯ）プロセッサの発行キュー内の１つまたは複数のサマリー・ビットを使用して拡張可能な依存関係行列を実装するための方法、システム、およびコンピュータ・プログラム製品を含む。非限定的な例示的方法は、発行キュー内の命令間の依存関係を追跡することを含む。この追跡することは、発行キュー内の命令ごとに、命令が、この命令の前に発行キューに追加されたしきい値の数の命令の各々に依存するかどうかを識別することを含む。
【０００６】
複数のサマリー・ビットを含んでいる１つの実施形態では、この追跡することは、命令が、しきい値の数の命令の各々に含まれていない、この命令の前に発行キューに追加された１つまたは複数の他の命令に依存するかどうかを識別することも含む。命令と他の命令の各々との間の依存関係は、命令と複数のグループのうちの１つ内の少なくとも１つの命令との間の依存関係を識別することに基づいて、命令と複数のグループのうちの１つとの間に依存関係が存在することを示すことによって、複数のグループとして追跡される。他の命令の各々は、複数のグループのうちの少なくとも１つに割り当てられる。命令は、追跡することに少なくとも部分的に基づいて、発行キューから発行される。
【０００７】
単一のサマリー・ビットを含んでいるさらに別の実施形態では、命令としきい値の数の命令の各々との間の依存関係が、個別に追跡される。この追跡することは、発行キュー内の命令ごとに、命令が、しきい値の数の命令の各々に含まれていない、この命令の前に発行キューに追加された１つまたは複数の他の命令に依存するかどうかを識別することも含む。命令と他の命令との間の依存関係は、命令と他の命令のうちの少なくとも１つとの間の依存関係を識別することに基づいて、命令と他の命令の単一のグループとの間に依存関係が存在することを示すことによって、単一のグループとして追跡される。単一のグループは、個別に追跡されるしきい値の数の命令に含まれていない、発行キュー内のすべての命令を含む。命令は、追跡することに少なくとも部分的に基づいて、発行キューから発行される。
【０００８】
その他の特徴および利点が、本発明の技術によって実現される。本発明のその他の実施形態および態様は、本明細書において詳細に説明され、請求される発明の一部と見なされる。本発明を利点および特徴と共によく理解するために、説明および図面を参照されたい。
【０００９】
本明細書に記載された専有権の詳細は、本明細書の最後にある特許請求の範囲において具体的に指摘され、明確に請求される。本発明の各実施形態の前述およびその他の特徴と利点は、添付の図面と併せて行われる以下の詳細な説明から明らかになる。
【図面の簡単な説明】
【００１０】
【図１】本発明の１つまたは複数の実施形態に従って、発行キュー内のサマリー・ビットを使用して拡張可能な依存関係行列を実装するための、アウトオブオーダ（ＯｏＯ）プロセッサの命令順序付けユニット（ＩＳＵ）を含んでいるシステムのブロック図である。
【図２】本発明の１つまたは複数の実施形態に従う、ＯｏＯプロセッサのＩＳＵ内の発行キューのブロック図である。
【図３】本発明の１つまたは複数の実施形態に従って、サマリー・ビットを使用して拡張可能な依存関係行列を実装するための、ＯｏＯプロセッサのＩＳＵ内の発行キューのブロック図である。
【図４】本発明の１つまたは複数の実施形態に従う、拡張可能な依存関係行列の論理ビューのブロック図である。
【図５】本発明の１つまたは複数の実施形態に従う、台形依存関係行列（trapezoidaldependency matrix）のブロック図である。
【図６】本発明の１つまたは複数の実施形態に従う、垂直に圧縮された台形依存関係行列のブロック図である。
【図７】本発明の１つまたは複数の実施形態に従う、水平に圧縮された台形依存関係行列のブロック図である。
【図８】本発明の１つまたは複数の実施形態に従って実装され得る、拡張可能な依存関係行列のブロック図である。
【図９】本発明の１つまたは複数の実施形態に従って、シングルスレッド（ＳＴ：single-thread）モードおよび同時マルチスレッド（ＳＭＴ：simultaneous multi-threading）モードで動作する依存関係行列のブロック図である。
【図１０】本発明の１つまたは複数の実施形態に従って、ＳＴモードおよびＳＭＴモードで動作する依存関係行列のブロック図である。
【図１１】本発明の１つまたは複数の実施形態に従って、ＯｏＯプロセッサ内のサマリー・ビットを使用して拡張可能な依存関係行列の一部または全部の態様を実装するための、コンピュータ・システムのブロック図である。
【発明を実施するための形態】
【００１１】
本明細書において示される図は、実例である。本発明の思想から逸脱することなく、本明細書に記載された図または動作の多くの変形が存在することが可能である。例えば、動作は異なる順序で実行されることが可能であり、あるいは動作は追加、削除、または変更されることが可能である。また、「結合される」という用語およびその変形は、２つの要素間に通信経路が存在することを表しており、それらの要素間に要素／接続が介在しない要素間の直接的接続を意味していない。これらのすべての変形は、本明細書の一部であると見なされる。
【００１２】
添付の図および開示された実施形態に関する以下の詳細な説明では、図に示されたさまざまな要素が、２桁または３桁の参照番号付きで提供されている。わずかな例外を除いて、各参照番号の左端の数字は、その要素が最初に示された図に対応している。
【００１３】
前述したように、現在の発行キューに格納される命令の数は増え続けている。現在の発行キューは、命令の数の二乗に比例して増大する依存関係行列を含み、ある時点で、依存関係行列の拡大し続けるサイズが、タイミングに影響を与える可能性がある。本明細書に記載された本発明の１つまたは複数の実施形態は、アウトオブオーダ（ＯｏＯ）プロセッサの命令順序付けユニット（ＩＳＵ）の発行キュー内の縮小されたサイズの依存関係行列を提供する。サイズの縮小は、互いに近接した時間枠内で発行キューに追加されている命令間に依存関係が通常は存在するということの認識に基づく。本発明の１つまたは複数の実施形態に従って、発行キューに追加されている命令の近接した時間枠内にある命令に対する命令の依存関係が、個別に追跡される。本発明の１つまたは複数の実施形態に従って、発行キューに追加されている命令の近接した時間枠外にある命令に対する命令の依存関係が、サマリー・ビットを使用して単一のグループとして追跡される。
【００１４】
本発明の１つまたは複数の実施形態に従って、６４個の命令（Ｎ＝６４）を保持する発行キューを使用するシングルスレッド（ＳＴ）モードで実行されるプロセッサの場合、前の３２（Ｎ／２）個の命令に対する命令の依存関係が、発行キュー内の特定性を使用して（例えば、正確な命令を識別して）追跡され得る。命令が、Ｎ／２個より前のいずれかの命令に依存することを示すために、サマリー・ビットが使用され得る。サマリー・ビットが設定された発行キューの依存関係行列内のエントリ（命令）は、命令が発行される準備ができたことを示す前に、最も古いＮ／２個のエントリが消去されるまで待つ必要がある。正確な追跡（前のＮ／２個）および不正確な追跡（Ｎ／２個より前のサマリー・ビット）のこの組み合わせは、発行キューを先入れ先出し（ＦＩＦＯ：first-in-first-out）キューとして実装することと併せて、依存関係行列を拡張可能にし、ストレージ空間を節約する方法で物理的に格納され得る台形として論理的に実装できようにする。加えて、発行キューをＦＩＦＯキューとして実装し、古さの配列（age array）を発行キューに含める必要をなくすことによって、追加のストレージ空間を節約する。本発明の１つまたは複数の実施形態に従って、プロセッサが同時マルチスレッド（ＳＭＴ）モードで実行している場合、サマリー・ビットが利用されず、正確な追跡の量は、特定のスレッドに属する前のＮ／２−１個の命令をすべて追跡する現在の実装と同じままである。
【００１５】
本発明の１つまたは複数の実施形態に従って、発行キューに追加されている命令の近接した時間枠外にある命令（すなわち、特定性を使用して追跡されていない命令）のグループが、１つまたは複数のサブグループに分割され、これらの各サブグループが、それ自身のサマリー・ビットを使用して追跡される。これらの実施形態では、命令のグループ内の命令に対する命令の依存関係を追跡するために、複数のサマリー・ビットが利用される。
【００１６】
本発明の１つまたは複数の実施形態に従って、特定性を使用して追跡される前の命令の数は、選択可能／プログラム可能であり、前のＮ／２個の命令に限定されない。
【００１７】
ここで図１を参照すると、本発明の１つまたは複数の実施形態に従って、発行キュー内のサマリー・ビットを使用して拡張可能な依存関係行列を実装するための、アウトオブオーダ（ＯｏＯ）プロセッサの命令順序付けユニット（ＩＳＵ）を含んでいるシステムのブロック図が、一般的に示されている。図１に示されているシステムは、ＩＳＵのマッパー１１０に入力するためのデコードされた命令を準備する設定ブロック１０８に入力するための命令をフェッチしてデコードする、命令フェッチ・ユニット／命令デコード・ユニット（ＩＦＵ／ＩＤＵ：instruction fetch unit/instruction decode unit）１０６を含んでいる。１つまたは複数の実施形態に従って、ＩＦＵ／ＩＤＵ１０６によって、スレッドから一度に６つの命令がフェッチされ、デコードされ得る。本発明の１つまたは複数の実施形態に従って、設定ブロック１０８に送信される６つの命令は、６つの非分岐命令、５つの非分岐命令および１つの分岐命令、または４つの非分岐命令および２つの分岐命令を含むことができる。１つまたは複数の実施形態に従って、設定ブロック１０８は、フェッチされた命令をＩＳＵ内のそれらのブロックに送信する前に、発行キュー内のエントリ、完了テーブル、マッパー、およびレジスタ・ファイルなどの十分なリソースが存在することをチェックする。
【００１８】
図１に示されているマッパー１１０は、プログラマの命令（例えば、論理レジスタ名）をプロセッサの物理リソース（例えば、物理レジスタ・アドレス）にマッピングする。図１には、条件レジスタ（ＣＲ：condition register）マッパー、リンク／カウント（ＬＮＫ／ＣＮＴ：link/count）レジスタ・マッパー、整数例外レジスタ（ＸＥＲ：exception register）マッパー、汎用レジスタ（ＧＰＲ：generalpurpose registers）およびベクトル−スカラ・レジスタ（ＶＳＲ：vector-scalarregister）をマッピングするための統合マッパー（Ｕマッパー：UMapper）、ＧＰＲおよびＶＳＲをマッピングするための設計済みマッパー（ＡＲＣＨマッパー：architected mapper）、ならびに浮動小数点状態および制御レジスタ（ＦＰＳＣＲ：floating point status and control register）マッパーを含む、さまざまなマッパー１１０が示されている。
【００１９】
設定ブロック１０８からの出力が、現在のＩＳＵ内のすべての命令を追跡するためのグローバル完了テーブル（ＧＣＴ：global completion table）１１２にも入力される。設定ブロック１０８からの出力が、命令を発行キューにディスパッチするためのディスパッチ・ユニット１１４にも入力される。図１に示されているＩＳＵの実施形態は、ＣＲ発行キュー（ＣＲ  ＩＳＱ：CR issue queue）１１６を含んでおり、ＣＲ発行キュー１１６は、ＣＲマッパーから命令を受信して追跡し、それらの命令を命令フェッチ・ユニット（ＩＦＵ）１２４に発行（１２０）して、ＣＲ論理命令および移動命令を実行する。図１には分岐発行キュー（分岐ＩＳＱ：branch issue queue）１１８も示されており、分岐発行キュー１１８は、分岐命令およびＬＮＫ／ＣＮＴ物理アドレスをＬＮＫ／ＣＮＴマッパーから受信して追跡する。分岐ＩＳＱ１１８は、予測された分岐アドレスまたは方向あるいはその両方が正しくなかった場合、命令をＩＦＵ１２４に発行（１２２）して、命令フェッチをリダイレクトすることができる。
【００２０】
ディスパッチ論理およびＬＮＫ／ＣＮＴマッパーからの名前が変更されたレジスタ、ＸＥＲマッパー、ＵＭａｐｐｅｒ（ＧＰＲ／ＶＳＲ）、ＡＲＣＨマッパー（ＧＰＲ／ＶＳＲ）、ならびにＦＰＳＣＲマッパーから出力された命令が、発行キュー１０２に入力される。図１に示されているように、発行キュー１０２は、ディスパッチされた固定小数点命令（Ｆｘ：fixed point instructions）、読み込み命令（Ｌ：loadinstructions）、格納命令（Ｓ：store instructions）、およびベクトルおよびスカラ・ユニット（ＶＳＵ：vector-and-scaler unit）命令を追跡する。図１の実施形態に示されているように、発行キュー１０２は、２つの部分ＩＳＱ０  １０２０およびＩＳＱ１  １０２１に分割されており、各部分がＮ／２個の命令を保持する。プロセッサがＳＴモードで実行している場合、発行キュー１０２が、単一のスレッドのすべての命令（この例では、Ｎ個すべての命令）を処理するために、ＩＳＱ０  １０２０およびＩＳＱ１  １０２１の両方を含んでいる単一論理の発行キューとして使用され得る。
【００２１】
プロセッサがＳＭＴモードで実行している場合、ＩＳＱ０  １０２０が、第１のスレッドからのＮ／２個の命令を処理するために使用可能であり、ＩＳＱ１  １０２１が、第２のスレッドＩＳＱ１  １０２１からのＮ／２個の命令を処理するために使用される。
【００２２】
図１に示されているように、発行キュー１０２は、実行ユニットの２つのグループ（１０４０、１０４１）に分割されている実行ユニット１０４に、命令を発行する。図１に示されている実行ユニットの両方のグループ（１０４０、１０４１）は、完全固定小数点実行ユニット（full fixed point execution unit）（完全ＦＸ０、完全ＦＸ１）、読み込み実行ユニット（ＬＵ０、ＬＵ１）、簡易固定小数点（simple fixed point）、格納データ、および格納アドレス実行ユニット（簡易ＦＸ０／ＳＴＤ０／ＳＴＡ０、簡易ＦＸ１／ＳＴＤ１／ＳＴＡ１）、ならびに浮動小数点、ベクトル・マルチメディア実行、１０進浮動小数点、および格納データ実行ユニット（ＦＰ／ＶＭＸ／ＤＦＰ／ＳＴＤ０、ＦＰ／ＶＭＸ／ＤＦＰ／ＳＴＤ１）を含んでいる。図１に示されているように、プロセッサがＳＴモードで実行している場合、実行ユニットの第１のグループ１０４０が、ＩＳＱ０  １０２０から発行された命令を実行し、実行ユニットの第２のグループ１０４１が、ＩＳＱ１  １０２１から発行された命令を実行する。プロセッサがＳＴモードで実行している場合の代替の実施形態では、発行キュー１０２内のＩＳＱ０  １０２０およびＩＳＱ１  １０２１の両方から発行された命令が、実行ユニットの第１のグループ１０４０および実行ユニットの第２のグループ１０４１内の実行ユニット１０４０のいずれかに含まれる実行ユニットに発行され得る。
【００２３】
１つまたは複数の実施形態に従って、プロセッサがＳＭＴモードで実行している場合、実行ユニットの第１のグループ１０４０が、ＩＳＱ０  １０２０から発行された第１のスレッドの命令を実行し、実行ユニットの第２のグループ１０４１が、ＩＳＱ１  １０２１から発行された第２のスレッドの命令を実行する。
【００２４】
本発明の実施形態が、さまざまな異なるサイズの発行キューおよびその他の要素に関して実装され得るため、図１に示されている発行キュー１０２内のエントリの数およびその他の要素のサイズ（例えば、バス幅、キュー・サイズ）は、実際は例示的であるよう意図されている。本発明の１つまたは複数の実施形態に従って、サイズが選択可能であるか、またはプログラム可能である。
【００２５】
ここで図２を参照すると、本発明の１つまたは複数の実施形態に従って、発行キュー２００のブロック図が一般的に示されている。図２に示されている発行キュー２００は、発行されるのを待っている命令を追跡するための行列、テーブル、およびベクトルを含んでいる。行列およびテーブルはそれぞれ、追跡されている命令ごとに対応する行を含んでおり、ベクトルは、追跡されている命令のエントリを含んでいる。発行キュー内の命令の数が増え続けるにつれて、行列、テーブル、およびベクトルの各々によって消費される空間および電力の量が増大している。本明細書に記載された本発明の実施形態は、古い命令に対する依存関係の追跡にサマリー・ビットを使用することによって、発行キュー２００内の依存関係行列２０２のサイズを縮小するために使用され得る。加えて、受信された順序で命令を発行キュー２００に格納することによって、古さの配列２１６を発行キュー２００から除去することができる。
【００２６】
発行キュー２００は、実行ユニットによる実行を待っている命令を追跡する。命令が発行キュー２００（例えば、ＣＲ  ＩＳＱ１１６、分岐ＩＳＱ１１８、発行キュー１０２）にディスパッチされて割り当てられる。依存関係が満たされたとき、すなわち各命令が発行されて、それらに対応する結果が使用可能になったときに、命令を発行キュー２００から発行する準備ができる。発行キュー２００は、命令を実行ユニット（例えば、実行ユニット１０４）に発行する。命令を発行した後に、発行キュー２００は、少なくとも命令が棄却点を通過するまで、命令の追跡を続行する。棄却点は、異なる命令では異なっており、命令が再発行される必要がなくなることが知られている点のことを指している（例えば、メモリ読み取り動作では、読み取られるデータに関してキャッシュがアクセスされた後に、棄却点が通過され得る）。命令が棄却点を通過した後に、その命令の割り当てを発行キューから解除することができ、新しい命令による再利用のために、発行キュー内のエントリが消去される。実行ユニットによる命令の実行が完了した後に、命令が終了する。
【００２７】
図２に示されている発行キュー２００は、発行キュー２００内の命令間の依存関係を追跡するための依存関係行列２０２と、命令の実行が棄却点を通過したこと、および命令の割り当てを発行キュー２００から解除できることを示すための完了テーブル２０４と、発行キューに追加する命令を受信するための命令ディスパッチ・ユニット２０６（例えば、図１のディスパッチ・ユニット１１４）と、命令が依存するすべての命令が発行されたことを示すための結果使用可能ベクトル２０８と、有効かつ発行可能な命令を示すＩＶベクトル２１４と、依存関係行列の出力とＩＶベクトルの論理積を実行するＡＮＤ論理２１０と、命令が依存するすべての命令からの結果が使用可能であり、命令が有効かつ発行可能であることを示すための準備完了ベクトル２１２と、２つ以上の命令の実行の準備ができたときに、より新しい命令の前により古い命令を選択できるように、命令が発行キューに入れられた順序を追跡するための古さの配列２１６と、選択された命令の再発行を防ぐため、または棄却後の再発行を許可するために、ＩＶ状態を更新するためのＩＶリセット制御２１８と、発行のために選択された命令に対応する読み取られるインデックスとして使用されるアドレス２２０と、命令を実行するために実行ユニットによって使用される命令のテキスト（例えば、オペコード、レジスタ・ファイルのアドレスへのポインタ、即値データ）を含んでいるデータ配列２２２とを含んでいる。
【００２８】
発行キュー内で待っているＮ個の命令を追跡できる図２の依存関係行列２０２に示されているように、位置「ｕ」にある命令は、位置「ｖ」および「ｗ」にある命令に依存している。図２に示されている依存関係行列２０２は、Ｎ個の行およびＮ個の列（発行キュー内の命令ごとに１つの行および列）を含んでいる。図２の古さの配列２１６に示されているように、位置「ｊ」、「ｋ」、および「ｌ」にある命令は、位置「ｉ」にある命令より古い。
【００２９】
ここで図３を参照すると、本発明の１つまたは複数の実施形態に従って、サマリー・ビット部分３６０を使用して拡張可能な依存関係行列を実装するためのＯｏＯのＩＳＵ内の発行キュー３００のブロック図が、一般的に示されている。図３に示されている発行キュー３００は、図２を参照して上で説明された発行キュー２００に類似しているが、命令がＦＩＦＯの順序で行列、テーブル、およびベクトルに挿入され、命令が受信された順序で行列、テーブル、およびベクトルに挿入されるため、図２に示されている古さの配列２１６に関連する論理および回路が不要であるという点が異なる。図２の古さの配列２１６の代わりに、図３に示されている発行キュー３００は、発行キュー２００内の命令の相対位置に基づいて２つ以上の準備ができた命令から選択するための優先度選択論理３２４を含んでいる。したがって、依存関係行列３０２、完了テーブル３０４、ＡＮＤベクトル３１０、準備完了ベクトル３１２、アドレス３２０、およびデータ配列３２２は、命令ディスパッチ・ユニット２０６から受信された順序で、対応するエントリを含んでいる。加えて、古い命令に対する依存関係を追跡するために、依存関係行列３０２内のエントリごとにサマリー・ビット部分３６０が提供される。サマリー・ビット部分３６０は、１つまたは複数のサマリー・ビットを含むことができる。
【００３０】
ここで図４を参照すると、本発明の１つまたは複数の実施形態に従って、拡張可能な依存関係行列４００の論理ビューのブロック図が一般的に示されている。図４に示されている拡張可能な依存関係行列４００は、Ｎ個の命令を保持し、特定性を使用して４つ（この例におけるしきい値）の他の命令に対する命令の依存関係を追跡する、発行キューを表している。拡張可能な依存関係行列４００内のエントリは、ＦＩＦＯの順序で挿入されるため、例えば行５内の命令は、行６内の命令の直前に発行キューに受信されている。
【００３１】
本発明の１つまたは複数の実施形態に従って、拡張可能な依存関係行列４００は、循環することができるため、例えば行Ｎ−１内の命令は、行０内の命令の直前に発行キューに受信されている。循環キューの循環が利用される場合、先頭ポインタおよび末尾ポインタを使用して最も古いエントリおよび最も新しいエントリを追跡することができ、先頭ポインタ（最も古いエントリ）が前進するときにサマリー・ビットが消去される。その結果、エントリの割り当てが解除されるときに先頭ポインタのみが前進するため（前進するには、対応する命令が発行され、それらの棄却点を通過している必要がある）、現在しきい値（例えば、４）より先頭に近いすべてのサマリー・ビットが消去される。
【００３２】
１つまたは複数の実施形態では、循環行列を使用する代わりに、キューの位置の割り当てが解除されたときに、上方にシフトするための空間が使用可能になった場合、常に、命令が最上位の行に向かってキュー内でシフトされる。行列の内容は、上および左に同じ量だけシフトすることができる。この場合、行列が台形状であるため、図４の空いている（斜線のない）ボックスのみが必要である。
【００３３】
図４に示されているように、命令と、発行キュー内のこの命令の直前に挿入されている４つの命令との間の依存関係が、特定性を使用して追跡され、依存関係行列４００の第１の部分（特定性部分４０４）で個別に識別され、一方、命令と、発行キュー内の他の命令のいずれかとの間の依存関係が、依存関係行列４００のサマリー・ビット部分４０２を使用して追跡される。
【００３４】
図４に示されている依存関係行列４００の特定性部分４０４を使用して、例えば、行６内の命令が行５内の命令に依存しているかどうか、行６内の命令が行４内の命令に依存しているかどうか、行６内の命令が行３内の命令に依存しているかどうか、および行６内の命令が行２内の命令に依存しているかどうかを判定することができる。行６内の命令が行３内の命令に依存しており、行５、４、および２内の命令に依存していない（かつ、サマリー・ビットが設定されていない）場合、行６内の命令が発行される準備ができる前に、行３内の命令のみが発行される必要がある。依存関係行列４００のサマリー・ビット部分４０２を使用して、行６内の命令が行０〜１および行７〜Ｎ−１内の命令のいずれかに依存しているかどうかを判定することができる。単一のサマリー・ビットは、行０〜１および行７〜Ｎ−１のいずれかに対する行６の依存関係を表すことができ、したがって、サマリー・ビットによって依存関係が識別された場合、行６内の命令が発行可能になる前に、行１および行７〜Ｎ−１内の命令のすべてが発行されなければならない。本明細書において説明されているように、対応する命令の割り当てが解除されるときに、サマリー・ビットまたは特定性ビットが消去される。
【００３５】
本発明の１つまたは複数の実施形態に従って、サマリー・ビット部分４０２またはその他のラッチは、行６内の命令に関して、命令が行０〜１および行７〜Ｎ−１内の命令のいずれかに依存している場合に設定され、命令６がディスパッチされたときに発行キュー内に存在していた行１および行７〜Ｎ−１内の命令のすべてが発行され、それらの各棄却点を通過し、割り当て解除されている場合にリセットされる。同様に、対応するビットまたはその他のラッチは、特定性部分４０４内で、特定の前の命令に対する行６内の命令の依存関係を示すように設定され、命令が発行され、その棄却点を通過し、エントリが割り当て解除されている場合にリセットされる。行６内の命令の依存関係のすべてが満たされ（例えば、各命令が発行され）、その命令が必要とするリソースのすべてが使用可能になった後に、行６内の命令が発行される準備ができている。
【００３６】
図４に示されているサマリー・ビット部分４０２は、命令と、この命令の直前に発行キューに挿入されたしきい値を超える数の命令のいずれかとの間の依存関係を追跡するために使用される、単一のサマリー・ビットを含むことができる。図４に示されている本発明の実施形態では、しきい値が４であり、この命令の直前に発行キューに挿入された４つの命令以外の発行キュー内の命令が、単一のサマリー・ビットを使用して単一のグループとして追跡される。この単一のグループは、この命令およびこの命令の直前に発行キューに挿入された４つの命令（この例では、しきい値が４である）を除く、発行キュー内のすべての命令を含む。したがって、命令が単一のグループ内の命令のうちの１つに依存する場合、この命令は、依存関係が満たされる前に、単一のグループ内のすべての命令が発行される（かつ、棄却点を通過する）まで待たなければならない。その後、他のすべての依存関係満たされている場合に、命令が発行され得る。単一のグループ内のすべての命令が発行キューから発行されている（かつ、それらの命令の棄却点を通過している）場合にのみ、単一のサマリー・ビットがリセットされる。
【００３７】
本発明の１つまたは複数の実施形態に従って、図４に示されているサマリー・ビット部分４０２は、命令と、この命令の直前に発行キューに挿入されたしきい値を超える数の命令のいずれかとの間の依存関係を追跡するために使用される、複数のサマリー・ビットを含む。本発明の実施形態では、この命令の直前に発行キューに挿入されたしきい値を超える数の命令以外の発行キュー内の命令が、複数のサマリー・ビットを使用して複数のグループとして追跡される。この命令およびこの命令の直前に発行キューに挿入されたしきい値の数の命令以外の発行キュー内の他の命令の各々が、複数のグループのうちの少なくとも１つに含まれる。複数のグループの内容は、相互に排他的であるか、または重複することができる。複数のグループに対して複数のサマリー・ビットを使用することによって、特定性を使用して追跡されないすべての命令に単一のサマリー・ビットを使用することよりも、細かい粒度を実現できる。
【００３８】
説明を簡単にするために簡略化された例を挙げると、Ｎ＝１６の場合、しきい値がＮ／２＝８であり、命令が、行０〜１５を含んでいる発行キュー内の行１５に挿入される。行１５内の命令の直前に発行キューに挿入された８つの命令（すなわち、行１４、１３、１２、１１、１０、９、８、および７内の命令）に対する行１５内の命令のすべての依存関係が、特定性を使用して追跡される。したがって、行１５内の命令が依存している発行キューの行１４、１３、１２、１１、１０、９、８、および７内の命令のうちの１つまたは複数が、もしあれば、それを正確に決定することができる。行０、１、２、３、４、５、および６にある命令のグループ内の命令に対する依存関係を表す複数のサマリー・ビットが、本発明の実施形態例によって実装され得る。例えば、第１のグループは、発行キュー内の行３、４、５、および６内の命令を含むことができ、第２のグループは、発行キュー内の行０、１、および２内の命令を含むことができる。第１のグループ内の命令に対する行１５内の命令の依存関係は、第１のサマリー・ビットを使用して追跡され、第２のグループ内の命令に対する行１５内の命令の依存関係は、第２のサマリー・ビットを使用して追跡され得る。代替として、第１のグループは、発行キュー内の行３、４、５内の命令を含むことができ、第２のグループは、発行キュー内の行６および２にある命令を含むことができ、第３のグループは、発行キュー内の行０および１にある命令を含むことができる。第１のグループ内の命令に対する行１５内の命令の依存関係は、第１のサマリー・ビットを使用して追跡され、第２のグループ内の命令に対する行１５内の命令の依存関係は、第２のサマリー・ビットを使用して追跡され、第３のグループ内の命令に対する行１５内の命令の依存関係は、第３のサマリー・ビットを使用して追跡され得る。別の代替では、例えば、発行キュー内の行０、１、２、３、４、５、および６内の命令を含んでいる第１のグループ、ならびに発行キュー内の行０、１、および２内の命令を含んでいる第２のグループなど、各グループは重複することができる。
【００３９】
本発明の実施形態例によって命令の任意の数のグループおよび対応するサマリー・ビットが実装され得るため、前述の内容は例にすぎない。一般に、グループおよびサマリー・ビットの数が大きいほど、追跡するためのビット数に関するコストが高くなり、スループットに関するコストが低くなる。本発明の実施形態例は、実装の要件に合わせて、粒度を調整することができる。２つの極端な例としては、最も粗い粒度を提供する単一のサマリー・ビット、および最も細かい粒度を提供する命令ごとのサマリー・ビットが挙げられる。
【００４０】
ここで図５を参照すると、本発明の１つまたは複数の実施形態に従って、台形依存関係行列５００のブロック図が一般的に示されている。図５に示されているように、拡張可能な依存関係行列は、例えば図４に示されている依存関係行列４００の特定性部分４０４内のように、依存関係行列内に空いている空間をもたらす可能性がある。特定性部分５０８Ａ、５０８Ｂ、５０８Ｃ、および５０８Ｄは、図５に示されている台形依存関係行列５００の不連続な部分に含まれている。図５には、命令のすべての依存関係が満たされている（例えば、特定の命令のすべてが発行された）かどうかを示すために各命令に対応するエントリを含んでいる、準備完了ベクトルも示されている。図５に示されている準備完了ベクトルは、準備完了状態ベクトル５０６Ａおよび準備完了状態ベクトル５０６Ｂに分割されている。図５は、命令が依存している前に発行された命令からの結果のすべてがこの命令によって使用可能になっているかどうかを示すために各命令に対応するエントリを含んでいる、使用可能ベクトルも示している。図５に示されている使用可能ベクトルは、使用可能ベクトル５０２Ａおよび使用可能ベクトル５０２Ｂに分割されている。図５に示されていないビットの追加の列がサマリー・ビットを保持し、サマリー・ビットが設定された場合、追加の論理が、準備完了ベクトルが命令の準備ができたことを示すのを防ぐ。
【００４１】
ここで図６を参照すると、本発明の１つまたは複数の実施形態に従って、垂直に圧縮された台形依存関係行列６００のブロック図が一般的に示されている。図６に示されているように、図５の台形依存関係行列５００が垂直的な方法でマージされ、特定性部分５０８Ａ、５０８Ｂ、５０８Ｃ、および５０８Ｄの間の空いている空間を除去する。垂直に圧縮された台形依存関係行列６００は、空間の要求を減らすように、本発明の１つまたは複数の実施形態に従って拡張可能な依存関係行列を物理的に格納する１つの方法である。５０２Ａに含まれた使用可能性情報は、５０８Ａ内のビットによって特定性を使用して示された依存関係が満たされているかどうかを判定するために使用され、それに応じて、準備完了状態５０６Ａ１が更新される。同時に、５０２Ａに含まれた使用可能性情報は、５０８Ｃ内のビットによって特定性を使用して示された依存関係が満たされているかどうかを判定するために使用され、それに応じて、準備完了状態５０６Ｂ１が更新される。同様に、５０２Ｂ内の使用可能性情報は、準備完了状態５０６Ａ２および５０６Ｂ２をそれぞれ更新できるように、５０８Ｂおよび５０８Ｄ内のビットによって示された依存関係が満たされているかどうかを判定するために使用される。すべての依存関係が満たされていることを示すには、準備完了状態（５０６Ａ１および５０６Ａ２または５０６Ｂ１および５０６Ｂ２）の両方の構成要素の対応する要素が、特定の依存関係が満たされていることを示さなければならない。
【００４２】
ここで図７を参照すると、本発明の１つまたは複数の実施形態に従って、水平に圧縮された台形依存関係行列７００のブロック図が一般的に示されている。図７に示されているように、図５の台形依存関係行列５００が水平的な方法でマージされ、特定性部分５０８Ａ、５０８Ｂ、５０８Ｃ、および５０８Ｄの間の空いている空間を除去する。水平に圧縮された台形依存関係行列７００は、空間の要求を減らすように、本発明の１つまたは複数の実施形態に従って拡張可能な依存関係行列を物理的に格納する１つの方法である。５０２Ａ１に含まれた使用可能性情報は、５０８Ｄ内のビットによって特定性を使用して示された依存関係が満たされているかどうかを判定するために使用され、それと同時に、５０２Ｂ１に含まれた使用可能性情報は、５０８Ｃ内のビットによって特定性を使用して示された依存関係が満たされているかどうかを判定するために使用され、それに応じて、結合された結果を使用して準備完了状態ベクトル５０６Ａが更新される。５０２Ａ２に含まれた使用可能性情報は、５０８Ｂ内のビットによって特定性を使用して示された依存関係が満たされているかどうかを判定するために使用され、それと同時に、５０２Ｂ２に含まれた使用可能性情報は、５０８Ａ内のビットによって特定性を使用して示された依存関係が満たされているかどうかを判定するために使用され、それに応じて、結合された結果を使用して準備完了状態ベクトル５０６Ｂが更新される。
【００４３】
図６に示されている垂直に圧縮された台形依存関係行列６００または図７に示されている水平に圧縮された台形依存関係行列７００のいずれかが、例えばシステム・ワークフローの期待される種類に基づく実装に対して、選択され得る。
【００４４】
ここで図８を参照すると、本発明の１つまたは複数の実施形態に従って、依存関係行列８００のブロック図が一般的に示されている。図８に示されているように、プロセッサがＳＭＴモードで実行している場合、第１のスレッドが論理的依存関係行列８０２の部分８０２０を使用し、第２のスレッドが論理的依存関係行列８０２の部分８０２１を使用する。論理的依存関係行列８０２は、部分８０２０の内容を格納するための行列８０４０および部分８０２１の内容を格納するための行列８０４１を含んでいる物理的依存関係行列８０４として物理的に格納され得る。
【００４５】
本明細書において説明されているように、ＯｏＯプロセッサがＳＴモードで実行している場合、発行キュー内の依存関係行列全体が、命令間の依存関係を追跡するために使用される。これは、ＯｏＯプロセッサが、通常は依存関係行列の半分のみが利用されるＳＭＴモードで実行している場合とは対照的である。本明細書において説明されているように、本発明の実施形態に従って、発行キュー内の依存関係行列が、論理的に台形になるように再編成される。ＳＴモードでは、エントリは、前のＮ／２個のエントリに対する依存関係を直接追跡することができ、Ｎ／２個を超えるエントリに対しては、サマリー・ビットを介して集合的依存関係のみを追跡することができる。サマリー・ビットが設定されたエントリ（命令）は、最も古い（最大）Ｎ／２個のエントリが消去されるまで待つ必要がある。同じ概念が、特定性を使用してＮ／２個未満のエントリを追跡することに使用され得る。本発明の実施形態例は、プロセッサがＳＭＴモードで実行していて、発行キューの各半分内のＮ／２個のエントリの完全な依存関係を（すなわち、特定性を使用して）追跡する場合にも使用され得る。プロセッサがＳＴモードで実行している場合、プロセッサはＮ個のエントリを追跡できるが、可視性が、より古い半分のエントリに制限される。そのような実施形態が図９に示されており、図９は、本発明の１つまたは複数の実施形態に従って、ＳＴモードおよびＳＭＴモードで動作する依存関係行列９００のブロック図を一般的に示している。
【００４６】
ここで図９を参照すると、図９に示されている依存関係行列９００は、前述したように、第１の半分の行列９０３および第２の半分の行列９０４を含んでおり、前のＮ／２個の命令に対するＮ個の命令の各々の正確な依存関係を追跡する。図９の本発明の実施形態に示されているように、使用可能性情報のソースは、行０〜Ｎ／２−１内の命令が発行された後に設定される使用可能ビット・ベクトル９０１Ａ内、および行Ｎ／２〜Ｎ−１内の命令が発行された後に設定される使用可能ビット・ベクトル９０１Ｂによって、維持される。使用可能性情報は、各行列上のＮ本のワイヤによって依存関係行列９０３および９０４に伝達される。行列９０３Ａの示されている下側の三角形領域内で依存関係ビットが設定された第１の半分の行列９０３内の行に対応する命令が、使用可能性情報をビット・ベクトル９０１Ａから直接受信する。示されている上側の三角形領域９０３Ｂ内で依存関係ビットが設定されたそのような命令が、マルチプレクサ９０２を介して使用可能性情報を受信する。マルチプレクサ９０２は、ビット・ベクトル９０１Ａおよび９０１Ｂから選択することができ、ＳＴモードでは、マルチプレクサ９０２は、使用可能性情報をビット・ベクトル９０１Ｂから領域９０３Ｂにルーティングする。
【００４７】
同様に、示されている下側の三角形領域９０４Ａ内で依存関係ビットが設定された第２の半分の行列９０４の行に対応する命令が、使用可能性情報を使用可能ビット・ベクトル９０１Ｂから受信する。示されている上側の三角形領域９０４Ｂ内で依存関係ビットが設定されたそのような命令が、マルチプレクサ９０２内の第２のマルチプレクサから使用可能性情報を受信する。マルチプレクサ９０２は、ビット・ベクトル９０１Ａおよび９０１Ｂから選択することができ、ＳＴモードでは、その情報を使用可能ビット・ベクトル９０１Ａから領域９０４Ｂにルーティングする。マルチプレクサ９０２が前述したように動作して、依存関係行列の各行が、前のＮ／２個の行内の命令によって生成された結果の使用可能性に対応する情報を受信する。命令がＦＩＦＯの順序で発行キューに追加されるため、この情報は、キューに追加された前のＮ／２個の命令に対応する。図９の右側は、ＳＭＴモードでの拡張可能な依存関係行列の実施形態例の動作を示している。この条件下で、マルチプレクサ９０２が、使用可能ビット・ベクトル９０１Ａおよび９０１Ｂに含まれている使用可能性情報を、右上の三角形部分９０３Ｂおよび９０４Ｂにそれぞれ伝達する。図９には、状態ベクトル９０５Ａおよび９０５Ｂも示されている。
【００４８】
したがって、依存関係情報が依存関係行列の行に含まれている特定のスレッドに対応する命令が、発行キューの同じ半分内の命令によって生成された結果に対応する使用可能性情報を受信し、この情報は、同じスレッドのすべての命令に対応する。したがって、図９に示されている本発明の実施形態例は、ＳＭＴモードでは、特定のスレッドのすべての命令にわたって正確な依存関係の追跡を行い、ＳＴモードでは、前のＮ／２個の命令にわたって正確な依存関係の追跡を行い、さらに古い依存関係の不正確な追跡が、サマリー・ビットによって行われる。
【００４９】
本明細書に記載された本発明の１つまたは複数の実施形態は、拡張可能な依存関係行列を提供し、Ｎ行×Ｎ例を含んでいる依存関係行列を必要とすることの代わりに、Ｎ行×Ｍ（例えば、Ｍ＝Ｎ／２）列の依存関係行列が提供され、ＭはＮ未満である。加えて、命令をＦＩＦＯの順序で発行キューに挿入することによって、古さの配列によって使用される領域を省き、発行キューの性能を改善することができる。
【００５０】
ここで図１０を参照すると、本発明の１つまたは複数の実施形態に従って、ＳＴモードおよびＳＭＴモードで動作する依存関係行列１０００のブロック図が一般的に示されている。図１０に示されている依存関係行列１００３、１００４は、図９に示されている依存関係行列に類似しているが、行の並べ替えが異なっている。この図は、ＳＴモードおよびＳＭＴモードでの望ましい動作を可能にする図９に示された接続のトポロジであり、マルチプレクサ制御のモード間の単純な切り替えを含んでいる。接続のトポロジを変更しない図９の行の並べ替えが可能である。接続のトポロジを変更しない図９の行の多くの例示的な並べ替えのうちの１つが、図１０に示されている。
【００５１】
ここで図１１を参照すると、本発明の１つまたは複数の実施形態に従って、ＯｏＯプロセッサ内のサマリー・ビットを使用して拡張可能な依存関係行列の一部または全部の態様を実装するためのコンピュータ・システム１１００のブロック図が、一般的に示されている。本明細書に記載された処理は、ハードウェア、ソフトウェア（例えば、ファームウェア）、またはハードウェアとソフトウェアの組み合わせにおいて実装されてよい。実施形態例では、記載された方法は、少なくとも一部においてハードウェアに実装されてよく、モバイル・デバイス、パーソナル・コンピュータ、ワークステーション、マイクロコンピュータ、またはメインフレーム・コンピュータなどの、専用または汎用コンピュータ・システム１１００のマイクロプロセッサの一部であってよい。
【００５２】
実施形態例では、図１１に示されているように、コンピュータ・システム１１００は、プロセッサ１１０５、メモリ・コントローラ１１１５に結合されたメモリ１１１２、および１つもしくは複数の入力デバイス１１４５、またはローカルＩ／Ｏコントローラ１１３５を介して通信によって結合された周辺機器などの出力デバイス１１４７、あるいはその組み合わせを含む。これらのデバイス１１４７および１１４５は、例えば、プリンタ、スキャナ、マイクロホンなどを含んでよい。従来のキーボード１１５０およびマウス１１５５は、Ｉ／Ｏコントローラ１１３５に結合されてよい。Ｉ／Ｏコントローラ１１３５は、例えば、１つまたは複数のバスあるいは従来技術において知られたその他の有線接続または無線接続であってよい。Ｉ／Ｏコントローラ１１３５は、簡単にするために省略されている、通信を可能にするためのコントローラ、バッファ（キャッシュ）、ドライバ、リピータ、およびレシーバなどのその他の要素を含んでよい。
【００５３】
Ｉ／Ｏデバイス１１４７、１１４５は、例えばディスク・ストレージおよびテープ・ストレージ、ネットワーク・インターフェイス・カード（ＮＩＣ：network interface card）または変調器／復調器（他のファイル、デバイス、システム、またはネットワークにアクセスするため）、無線周波（ＲＦ：radio frequency）またはその他のトランシーバ、電話インターフェイス、ブリッジ、ルータなどの、入力および出力の両方と通信するデバイスをさらに含んでよい。
【００５４】
プロセッサ１１０５は、ハードウェア命令またはソフトウェア、具体的には、メモリ１１１２に格納されたハードウェア命令またはソフトウェアを実行するためのハードウェア・デバイスである。プロセッサ１１０５は、カスタム・メイドであるか、または市販されたプロセッサ、中央処理装置（ＣＰＵ：central processing unit）、コンピュータ・システム１１００に関連付けられた複数のプロセッサ間の補助プロセッサ、（マイクロチップまたはチップ・セットの形態での）半導体ベースのマイクロプロセッサ、マクロプロセッサ、もしくは命令を実行するためのその他のデバイスであってよい。プロセッサ１１０５は、実行可能命令のフェッチを高速化するための命令キャッシュ、データのフェッチおよび格納を高速化するためのデータ・キャッシュ、および実行可能命令とデータの両方の仮想アドレスから物理アドレスへの変換を高速化するために使用されるトランスレーション・ルックアサイド・バッファ（ＴＬＢ：translation look-aside buffer）などのキャッシュを含むことができるが、これらに限定されない。キャッシュは、さらに多くのキャッシュ・レベル（Ｌ１、Ｌ２など）の階層として構造化されてよい。
【００５５】
メモリ１１１２は、揮発性メモリ素子（例えば、ＤＲＡＭ、ＳＲＡＭ、ＳＤＲＡＭなどのランダム・アクセス・メモリ（ＲＡＭ：random access memory））および不揮発性メモリ素子（例えば、ＲＯＭ、消去可能プログラマブル読み取り専用メモリ（ＥＰＲＯＭ：erasable programmable read only memory）、電子的消去可能プログラマブル読み取り専用メモリ（ＥＥＰＲＯＭ：electronically erasable programmable read only memory）、プログラマブル読み取り専用メモリ（ＰＲＯＭ：programmable read only memory）、テープ、コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ：compact disc read only memory）、ディスク、フロッピー（Ｒ）・ディスク、カートリッジ、カセットなど）のうちの１つまたは組み合わせを含んでよい。さらに、メモリ１１１２は電子、磁気、光、またはその他の種類のストレージ媒体を組み込んでよい。メモリ１１１２が、さまざまなコンポーネントが互いに遠く離れた位置にあるが、プロセッサ１１０５によってアクセスされてよい、分散アーキテクチャを含むことができるということに注意する。
【００５６】
メモリ１１１２内の命令は、１つまたは複数の別々のプログラムを含んでよく、それらのプログラムの各々は、論理的機能を実装するための実行可能命令の順序付けられたリストを含む。図１１の例では、メモリ１１１２内の命令は、適切なオペレーティング・システム（ＯＳ：operating system）１１１１を含む。オペレーティング・システム１１１１は、基本的に他のコンピュータ・プログラムの実行を制御することができ、スケジューリング、入出力制御、ファイルおよびデータの管理、メモリ管理、ならびに通信制御および関連するサービスを提供する。
【００５７】
例えば、プロセッサ１１０５の命令またはその他の取り出し可能な情報を含む追加データが、ストレージ１１２７に格納されてよく、ストレージ１１２７はハード・ディスク・ドライブまたは半導体ドライブなどのストレージ・デバイスであってよい。メモリ１１１２またはストレージ１１２７に格納される命令は、プロセッサが本開示のディスパッチ・システムおよび方法の１つまたは複数の態様を実行できるようにする命令を含んでよい。
【００５８】
コンピュータ・システム１１００は、ディスプレイ１１３０に結合されたディスプレイ・コントローラ１１２５をさらに含んでよい。実施形態例では、コンピュータ・システム１１００は、ネットワーク１１６５に結合するためのネットワーク・インターフェイス１１６０をさらに含んでよい。ネットワーク１１６５は、コンピュータ・システム１１００と、外部サーバ、クライアントなどとの間での、ブロードバンド接続を介した通信用のＩＰベースのネットワークであってよい。ネットワーク１１６５は、コンピュータ・システム１１００と外部システムの間で、データを送受信する。実施形態例では、ネットワーク１１６５は、サービス・プロバイダによって管理された管理ＩＰネットワークであってよい。ネットワーク１１６５は、例えば、ＷｉＦｉ、ＷｉＭａｘなどの無線プロトコルおよび無線技術を使用して、無線方式で実装されてよい。ネットワーク１１６５は、ローカル・エリア・ネットワーク、広域ネットワーク、メトロポリタン・エリア・ネットワーク、インターネット、またはその他の類似する種類のネットワーク環境などの、パケット交換ネットワークであってもよい。ネットワーク１１６５は、固定無線ネットワーク、無線ローカル・エリア・ネットワーク（ＬＡＮ：local area network）、無線広域ネットワーク（ＷＡＮ：wide areanetwork）、パーソナル・エリア・ネットワーク（ＰＡＮ：personal area network）、仮想プライベート・ネットワーク（ＶＰＮ：virtual private network）、インターネット、またはその他の適切なネットワーク・システムであってよく、信号を送受信するための機器を含んでよい。
【００５９】
本明細書において説明されているように、拡張可能な依存関係行列を提供するためのシステムおよび方法が、コンピュータ・プログラム製品において、または図１１に示されているようなコンピュータ・システム１１００において、全体的または部分的に具現化され得る。
【００６０】
本明細書では、関連する図面を参照して、本発明のさまざまな実施形態が説明される。本発明の範囲を逸脱することなく、本発明の代替の実施形態が考案され得る。以下の説明および図面において、要素間のさまざまな接続および位置関係（例えば、上、下、隣接など）が示される。それらの接続または位置関係あるいはその両方は、特に規定されない限り、直接的または間接的であることができ、本発明はこの点において限定するよう意図されていない。したがって、各実体の結合は、直接的結合または間接的結合を指すことができ、各実体間の位置関係は、直接的位置関係または間接的位置関係であることができる。さらに、本明細書に記載されたさまざまな作業および工程段階は、本明細書に詳細に記載されない追加の段階または機能を含んでいるさらに包括的な手順または工程に組み込まれ得る。
【００６１】
以下の定義および略称が、特許請求の範囲および本明細書の解釈に使用される。本明細書において使用されているように、「備える」、「備えている」、「含む」、「含んでいる」、「有する」、「有している」、「含有する」、「含有している」という用語、またはこれらの任意のその他の変形は、非排他的包含をカバーするよう意図されている。例えば、要素のリストを含んでいる組成、混合、工程、方法、製品、または装置は、それらの要素のみに必ずしも限定されず、明示されていないか、またはそのような組成、混合、工程、方法、製品、もしくは装置に固有の、その他の要素を含むことができる。
【００６２】
さらに、「例示的」という用語は、本明細書では「例、事例、または実例としての役割を果たす」ことを意味するために使用される。「例示的」として本明細書に記載された実施形態または設計は、必ずしも他の実施形態または設計よりも好ましいか、または有利であると解釈されるべきではない。「少なくとも１つ」および「１つまたは複数」という用語は、１以上の任意の整数（すなわち、１、２、３、４など）を含んでいると理解されてよい。「複数」という用語は、２以上の任意の整数（すなわち、２、３、４、５など）を含んでいると理解されてよい。「接続」という用語は、間接的「接続」および直接的「接続」の両方を含んでよい。
【００６３】
「約」、「実質的に」、「近似的に」、およびこれらの変形の用語は、本願書の出願時に使用できる機器に基づいて、特定の量の測定に関連付けられた誤差の程度を含むよう意図されている。例えば、「約」は、特定の値の±８％または５％、あるいは２％の範囲を含むことができる。
【００６４】
簡潔さの目的で、本発明の態様の作成および使用に関連する従来技術は、本明細書に詳細に記載されることもあれば、記載されないこともある。具体的には、本明細書に記載されたさまざまな技術的特徴を実装するためのコンピューティング・システムおよび特定のコンピュータ・プログラムのさまざまな態様は、よく知られている。したがって、簡略にするために、多くの従来の実装に関する詳細は、本明細書では、既知のシステムまたは工程あるいはその両方の詳細を提供することなく、簡潔にのみ述べられるか、または全体的に省略される。
【００６５】
本発明は、システム、方法、またはコンピュータ・プログラム製品、あるいはその組み合わせであってよい。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を含んでいるコンピュータ可読記憶媒体を含んでよい。
【００６６】
コンピュータ可読記憶媒体は、命令実行デバイスによって使用するための命令を保持および格納できる有形のデバイスであることができる。コンピュータ可読記憶媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、またはこれらの任意の適切な組み合わせであってよいが、これらに限定されない。コンピュータ可読記憶媒体のさらに具体的な例の非網羅的リストは、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ：random access memory）、読み取り専用メモリ（ＲＯＭ：read-onlymemory）、消去可能プログラマブル読み取り専用メモリ（ＥＰＲＯＭ：erasableprogrammable read-only memoryまたはフラッシュ・メモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ：static random access memory）、ポータブル・コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ：compact disc read-only memory）、デジタル多用途ディスク（ＤＶＤ：digital versatile disk）、メモリ・スティック、フロッピー（Ｒ）・ディスク、パンチカードまたは命令が記録されている溝の中の隆起構造などの機械的にエンコードされるデバイス、およびこれらの任意の適切な組み合わせを含む。本明細書において使用されるとき、コンピュータ可読記憶媒体は、それ自体が、電波またはその他の自由に伝搬する電磁波、導波管またはその他の送信媒体を伝搬する電磁波（例えば、光ファイバ・ケーブルを通過する光パルス）、あるいはワイヤを介して送信される電気信号などの一過性の信号であると解釈されるべきではない。
【００６７】
本明細書に記載されたコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体から各コンピューティング・デバイス／処理デバイスへ、またはネットワーク（例えば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、または無線ネットワーク、あるいはその組み合わせ）を介して外部コンピュータもしくは外部ストレージ・デバイスへダウンロードされ得る。このネットワークは、銅伝送ケーブル、光伝送ファイバ、無線送信、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組み合わせを備えてよい。各コンピューティング・デバイス／処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェイスは、コンピュータ可読プログラム命令をネットワークから受信し、それらのコンピュータ可読プログラム命令を各コンピューティング・デバイス／処理デバイス内のコンピュータ可読記憶媒体に格納するために転送する。
【００６８】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ（ＩＳＡ：instruction-set-architecture）命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、あるいは、Ｊａｖａ（Ｒ）、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などのオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む１つまたは複数のプログラミング言語の任意の組み合わせで記述されたソース・コードまたはオブジェクト・コードであってよい。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で全体的に実行すること、ユーザのコンピュータ上でスタンドアロン・ソフトウェア・パッケージとして部分的に実行すること、ユーザのコンピュータ上およびリモート・コンピュータ上でそれぞれ部分的に実行すること、あるいはリモート・コンピュータ上またはサーバ上で全体的に実行することができる。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ：local area network）もしくは広域ネットワーク（ＷＡＮ：widearea network）を含む任意の種類のネットワークを介してユーザのコンピュータに接続されてよく、または接続は、（例えば、インターネット・サービス・プロバイダを使用してインターネットを介して）外部コンピュータに対して行われてよい。一部の実施形態では、本発明の態様を実行するために、例えばプログラマブル論理回路、フィールドプログラマブル・ゲート・アレイ（ＦＰＧＡ：field-programmable gate arrays）、またはプログラマブル・ロジック・アレイ（ＰＬＡ：programmable logic arrays）を含む電子回路は、コンピュータ可読プログラム命令の状態情報を利用することによって、電子回路をカスタマイズするためのコンピュータ可読プログラム命令を実行してよい。
【００６９】
本発明の態様は、本明細書において、本発明の実施形態に従って、方法、装置（システム）、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、ならびにフローチャート図またはブロック図あるいはその両方に含まれるブロックの組み合わせが、コンピュータ可読プログラム命令によって実装され得るということが理解されるであろう。
【００７０】
これらのコンピュータ可読プログラム命令は、コンピュータまたはその他のプログラム可能なデータ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方のブロックに指定される機能／動作を実施する手段を作り出すべく、汎用コンピュータ、専用コンピュータ、または他のプログラム可能なデータ処理装置のプロセッサに提供されてマシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令は、命令が格納されたコンピュータ可読記憶媒体がフローチャートまたはブロック図あるいはその両方のブロックに指定される機能／動作の態様を実施する命令を含んでいる製品を備えるように、コンピュータ可読媒体に格納され、コンピュータ、プログラム可能なデータ処理装置、または他のデバイス、あるいはその組み合わせに特定の方式で機能するように指示できるものであってもよい。
【００７１】
コンピュータ可読プログラム命令は、コンピュータ上、その他のプログラム可能な装置上、またはその他のデバイス上で実行される命令が、フローチャートまたはブロック図あるいはその両方のブロックに指定される機能／動作を実施するように、コンピュータ、その他のプログラム可能なデータ処理装置、またはその他のデバイスに読み込まれ、コンピュータ実装プロセスを生成するために、コンピュータ上、その他のプログラム可能な装置上、またはその他のデバイス上で一連の動作可能なステップを実行させるものであってもよい。
【００７２】
図内のフローチャートおよびブロック図は、本発明のさまざまな実施形態に従って、システム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、および動作を示す。これに関連して、フローチャートまたはブロック図内の各ブロックは、規定された論理機能を実装するための１つまたは複数の実行可能な命令を備える、命令のモジュール、セグメント、または部分を表してよい。一部の代替の実装では、ブロックに示された機能は、図に示された順序とは異なる順序で発生してよい。例えば、連続して示された２つのブロックは、実際には、含まれている機能に応じて、実質的に同時に実行されるか、または場合によっては逆の順序で実行されてよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、ならびにブロック図またはフローチャート図あるいはその両方に含まれるブロックの組み合わせは、規定された機能または動作を実行するか、または専用ハードウェアとコンピュータ命令の組み合わせを実行する専用ハードウェアベースのシステムによって実装され得るということにも注意する。
【００７３】
本発明のさまざまな実施形態の説明は、例示の目的で提示されているが、網羅的であることは意図されておらず、開示された実施形態に限定されない。説明された実施形態の範囲を逸脱することなく多くの変更および変形が可能であることは、当業者にとって明らかである。本明細書で使用された用語は、実施形態の原理、実際の適用、または市場で見られる技術を超える技術的改良を最も適切に説明するため、または他の当業者が本明細書で開示された実施形態を理解できるようにするために選択された。
【図１】
2021504791.tif 000003
【図２】
2021504791.tif 000004
【図３】
2021504791.tif 000005
【図４】
2021504791.tif 000006
【図５】
2021504791.tif 000007
【図６】
2021504791.tif 000008
【図７】
2021504791.tif 000009
【図８】
2021504791.tif 000010
【図９】
2021504791.tif 000011
【図１０】
2021504791.tif 000012
【図１１】
2021504791.tif 000013
【国際調査報告】
2021504791.tif 000014
2021504791.tif 000015