(57)【要約】  実施形態は、統合分岐先・述語予測を使用する、プログラムの実行中の述語および分岐先の予測に関連付けられる方法、装置、システム、およびコンピュータ可読媒体を提供する。予測は、プログラム内の命令ブロック内の述語およびブロック間の分岐を表す１つまたは複数の予測制御フローグラフを使用してなされ得る。予測制御フローグラフは、ツリーとして構築されることができ、それによって、グラフ内の各ノードは述語命令に関連付けられ、各葉は別のブロックにジャンプする分岐先に関連付けられる。ブロックの実行中、予測生成器は制御点履歴をとって予測を生成することができる。ツリーを通じて予測によって示唆される経路を追って、述語値および分岐先の両方が予測されることができる。他の実施形態が説明および特許請求され得る。
2013534004.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータ命令の実行時間予測のためのコンピュータ実装方法であって、該方法は、
コンピューティングデバイス上で、制御点履歴（１４５）に少なくとも部分的に基づいて統合述語・分岐先予測（１５５）を生成すること（６２０）と、
前記コンピューティングデバイス上で、前記統合述語・分岐先予測に少なくとも部分的に基づいて、１つまたは複数の予測述語付き命令を実行すること（８３０）と、
前記コンピューティングデバイス上で、前記統合述語・分岐先予測に少なくとも部分的に基づいて、予測分岐先ロケーションにおいて実行を進行すること（８５０）と
を含む、方法。
【請求項２】
生成することは、１つまたは複数の述語付き命令に対する１つまたは複数の予測述語値を生成することを含む、請求項１に記載の方法。
【請求項３】
実行を進行することは、前記１つまたは複数の予測述語値に基づいて前記予測分岐先ロケーションを予測することを含む、請求項２に記載の方法。
【請求項４】
前記１つまたは複数の予測述語値に基づいて前記予測分岐先ロケーションを予測することは、前記１つまたは複数の予測述語値に少なくとも部分的に基づいて予測制御フローグラフを通じて経路を追うことを含む、請求項３に記載の方法。
【請求項５】
前記コンピュータ命令はブロック不可分アーキテクチャ内にあり、
前記方法は、前記コンピューティングデバイスによって、命令ブロックに対する前記予測制御フローグラフを生成することをさらに含み、
前記命令ブロック内の述語は前記予測制御フローグラフ内でノードとして表され、
分岐先は前記予測制御フローグラフ内で葉として表される、
請求項４に記載の方法。
【請求項６】
前記予測制御フローグラフを通じて経路を追うことは、前記１つまたは複数の予測述語値に少なくとも部分的に基づいて述語間のエッジを追うことを含む、請求項４に記載の方法。
【請求項７】
１つまたは複数の予測述語値を生成することは、複数のレベルの予測述語値を並列に生成することを含む、請求項２に記載の方法。
【請求項８】
複数のレベルの予測述語値を並列に生成することは、レベルｎ、および、長さｋの述語履歴を含む前記制御点履歴に関して、
最新のｋ個の述語に基づいてレベルｎに対する予測述語値を生成することと、
最新のｋ−１個の述語およびレベルｎに対する２つの可能な述語値に基づいてレベルｎ＋１に対する２つの予測述語値を生成することと、
レベルｎに対する前記予測述語値に基づいてレベルｎ＋１に対する前記２つの予測述語値のうちのいずれが使用されるべきかを決定することと
を含む、請求項７に記載の方法。
【請求項９】
複数のレベルの予測述語値を並列に生成することは、命令ブロック内の最大で所定のレベル数ｊに対して予測述語値を生成することを含む、請求項７に記載の方法。
【請求項１０】
内部にｊよりも大きい数の述語レベルを含む命令ブロックに対して予測述語値が生成されるとき、複数のレベルの予測述語値を並列に生成することは、
前記ブロック内の前記述語レベルの数を超えるまで、ｊの倍数単位で予測述語値を繰り返し生成することと、
前記ブロック内の前記述語レベルの数を超える述語値を破棄することと
を含む、請求項９に記載の方法。
【請求項１１】
複数のレベルの予測述語値を並列に生成することは、前記命令ブロックに関連付けられるとともに前記ブロック内の前記述語レベルの数を表す、記憶されている値にアクセスすることをさらに含む、請求項１０に記載の方法。
【請求項１２】
前記制御点履歴は述語履歴を含み、
前記１つまたは複数の予測述語値を生成することは、述語履歴をインデックスとして使用することに基づいて、予測述語の検索を実行することを含む、
請求項２に記載の方法。
【請求項１３】
前記制御点履歴は、進行中の実行の間に、以前に実行された１つまたは複数の命令を含む、請求項１に記載の方法。
【請求項１４】
コンピュータ命令の予測ランタイム実行のためのシステムであって、該システムは、
１つまたは複数のコンピュータプロセッサ（９１０）と、
述語および／または分岐の履歴（１４５）を入力として受け入れるとともに、前記１つまたは複数のプロセッサによる動作に応答して、前記受け入れられた履歴に基づいて統合述語・分岐先予測（１５５）を生成する（６２０）ように構成される統合予測生成器（１５０）と、
前記１つまたは複数のプロセッサによる動作に応答して、
前記統合述語・分岐先予測から取得される予測述語値に基づいて１つまたは複数の述語付き命令を実行する（８３０）とともに、
予測分岐先ロケーションにおいてフェッチされた命令の実行を進行する（８５０）ように、前記１つまたは複数のプロセッサを制御するように構成される命令フェッチ・実行制御部（１６０）と
を備え、前記予測分岐先ロケーションは、前記予測述語値に少なくとも部分的に基づく、システム。
【請求項１５】
前記命令フェッチ・実行制御部は、前記１つまたは複数のプロセッサによる動作に応答して、前記予測述語値に少なくとも部分的に基づいて前記予測分岐先ロケーションを予測するようにさらに構成される、請求項１４に記載のシステム。
【請求項１６】
前記１つまたは複数のコンピュータプロセッサに結合される記憶媒体、
前記記憶媒体上の１つまたは複数の予測制御フローグラフ
をさらに備え、それぞれの前記予測制御フローグラフは、それぞれのコードブロックに関して、前記コードブロック内の述語を内部ノードとして表し、他のコードブロックに対する分岐を葉として表す、請求項１５に記載のシステム。
【請求項１７】
前記命令フェッチ・実行制御部は、
前記予測述語値にしたがって前記予測制御フローグラフを通る経路を追うとともに、
前記経路を追うことによって葉に達すると、前記葉に向かって分岐するコードブロックのロケーションを前記予測分岐先ロケーションとして予測することによって、前記予測分岐先ロケーションを予測するように構成される、請求項１６に記載のシステム。
【請求項１８】
前記統合予測生成器は、前記１つまたは複数のプロセッサによる動作に応答して、予測述語値を特定するために述語の履歴を検索インデックスとして使用することによって統合述語・分岐先予測を生成するように構成される、請求項１４に記載のシステム。
【請求項１９】
前記統合予測生成器は、前記１つまたは複数のプロセッサによる動作に応答して、複数の検索を並列に実行することによって統合述語・分岐先予測を生成するようにさらに構成される、請求項１８に記載のシステム。
【請求項２０】
製造品であって、
有形コンピュータ可読媒体（１００２）と、
前記有形コンピュータ可読媒体上に記憶される複数のコンピュータ実行可能命令（１００４）とを備え、前記コンピュータ実行可能命令は、装置による実行に応答して、該装置に、述語付き命令および１つまたは複数の分岐先を有する第１のコードブロックに対して命令の実行をスケジューリングするための動作を実行させ、該動作は、
以前に実行された１つまたは複数の命令（１４５）に少なくとも部分的に基づいて、統合述語・分岐先予測（１５５）を特定すること（６２０）であって、該予測は、前記第１のコードブロック内の前記述語付き命令に対する１つまたは複数の予測述語値を含む、特定することと、
前記コンピューティングデバイス上で、前記予測述語値に少なくとも部分的に基づいて、前記ブロック内の前記述語付き命令の中から１つまたは複数の予測述語付き命令を実行すること（８３０）と、
前記予測述語付き命令に基づいて、第２のコードブロックを指す予測分岐先ロケーションを予測すること（８４０）と、
前記第２のコードブロックでの実行を継続すること（８５０）と
を含む、製造品。
【請求項２１】
予測分岐先ロケーションを予測することは、前記予測分岐先ロケーションを特定するために前記第１のコードブロックに関して予測制御フローグラフを通じて経路を追うことを含む、請求項２０に記載の製造品。
【請求項２２】
前記動作は、コンピュータプログラム内のそれぞれのコードブロックについて、それぞれの予測制御フローグラフを生成することをさらに含む、請求項２１に記載の製造品。
【請求項２３】
前記統合述語・分岐先予測を特定することは過去の述語値の履歴に基づいて予測述語値のセットの検索を実行することを含む、請求項２０に記載の製造品。
【請求項２４】
述語化された述語のセットの検索を実行することは、
可能性のある予測述語値の複数の検索を並列に実行することと、
レベルｎにおける可能性のある予測述語値に関して、レベルｎ−１における予測述語値を使用して前記可能性のある予測述語値を決定することと
を含む、請求項２３に記載の製造品。
【発明の詳細な説明】
【背景技術】
【０００１】
実行中に条件コンピュータ命令の動的予測を改善するために様々な技法が利用可能である。条件命令の予測は多くの場合、その実行が当該条件命令の結果に依存している場合がある将来の命令をより良好に選択するために、またはそれらの将来の命令の実行を加速させるために使用される。予測技法の中でも、分岐予測および述語化が使用されることがある。分岐予測は多くの場合、プログラム内の条件命令が２つの可能性のある分岐ロケーション（または「ターゲット」）につながるようにコンパイルされる場合に使用される。分岐予測器において使用される分岐先予測は、非条件的ジャンプ先を特定するために使用される場合もある。この技法において、現在の条件命令の実行前にとられた分岐選択の履歴が、一方の分岐または他方の分岐が実行のためにスケジューリングされるべきかを予測するために検査され得る。
【０００２】
予測に際して、１つの条件命令に関連付けられる命令のセットは、ブール値のような述語値に関連付けられるようにコンパイルされ、この述語が一般的には別個に評価される。この技法においては、（条件の値に基づく）２つのセットの命令が別個に評価され、その関連付けられる述語値が評価後の結果でなかった命令からの結果が捨てられる、または破棄され得る。述語値の履歴を入力として使用して予測技法を操作することによって、述語値自体が予測される場合がある。
【０００３】
しかしながら、これらの技法を使用する現行のシステム、特に命令を組織化して命令ブロックにするシステムには複数の問題がある。分岐の結果またはジャンプ先のいずれを予測するときにおいても、分岐予測を単独で使用することでは、多くの場合述語化の形態をとる、命令のブロック内の制御命令を同時予測するための機能を提供することはできない。逆に、述語化は、ブロック境界を越えるジャンプに適していない。述語の述語化を順次処理し得る既存の述語化技法には、後に続く述語を有する命令が先行して発生する述語を待つように強制されるため、オーバヘッドが追加されるという問題がある。これらの技法を統合しようと試みるシステムでは、分岐予測および述語予測を使用することによって、複数のデータ構造が必要とされ、相当の実行オーバヘッドが発生する。さらに、現行のシステムでは、分岐は述語を介在させるという知識なしにブロック間で予測され、より疎な命令履歴を用いて予測されるこれらの分岐には、予測精度が乏しいという問題がある可能性がある。
【発明の概要】
【課題を解決するための手段】
【０００４】
一実施形態では、コンピュータ命令の実行時間予測のためのコンピュータ実装方法は、コンピューティングデバイス上で、制御点履歴に少なくとも部分的に基づいて統合述語・分岐先予測を生成することと、コンピューティングデバイス上で、統合述語・分岐先予測に少なくとも部分的に基づいて、１つまたは複数の予測述語付き命令を実行することとを含むことができる。本方法は、コンピューティングデバイス上で、統合述語・分岐先予測に少なくとも部分的に基づいて、予測分岐先ロケーションにおいて実行を進行することをさらに含むことができる。
【０００５】
別の実施形態では、コンピュータ命令の予測ランタイム実行のためのシステムは、１つまたは複数のコンピュータプロセッサと、述語および／または分岐の履歴を入力として受け入れるとともに、１つまたは複数のプロセッサによる動作に応答して、受け入れられた履歴に基づいて統合述語・分岐先予測を生成するように構成される統合予測生成器とを含むことができる。システムは、１つまたは複数のプロセッサによる動作に応答して、１つまたは複数のプロセッサを制御し、統合述語・分岐先予測から取得される予測述語値に基づいて１つまたは複数の述語付き命令を実行するとともに、予測分岐先ロケーションにおいてフェッチされた命令の実行を進行するように構成される命令フェッチ・実行制御部をも含むことができる。予測分岐先ロケーションは、予測述語値に少なくとも部分的に基づくことができる。
【０００６】
別の実施形態では、製造品は、有形コンピュータ可読媒体と、有形コンピュータ可読媒体上に記憶される複数のコンピュータ実行可能命令を含むことができる。コンピュータ実行可能命令は、装置による実行に応答して、装置に、述語付き命令および１つまたは複数の分岐先を有する第１のコードブロックに対して命令の実行をスケジューリングするための動作を実行させることができる。動作は、以前に実行された１つまたは複数の命令に少なくとも部分的に基づいて、統合述語・分岐先予測を特定することを含むことができる。予測は、第１のコードブロック内の述語付き命令に対する１つまたは複数の予測述語値を含むことができる。動作は、コンピューティングデバイス上で、予測述語値に少なくとも部分的に基づいて、ブロック内の述語付き命令の中から１つまたは複数の予測述語付き命令を実行することをも含むことができる。動作は、予測述語付き命令に基づいて、第２のコードブロックを指示する予測分岐先ロケーションを予測することと、第２のコードブロックでの実行を継続することとをも含むことができる。
【０００７】
上記の概要は例示のみを目的とし、決して限定を意図するものではない。上述の例示的な態様、実施形態、および特徴に加えて、さらなる態様、実施形態、および特徴が図面および以下の詳細な説明を参照することによって明らかとなろう。
【図面の簡単な説明】
【０００８】
【図１】統合分岐先・述語予測システムの選択される構成要素のブロック図である。
【図２】統合分岐先・述語予測に基づく命令予測のブロック図である。
【図３】プログラムコードからの命令ブロックの生成の連続するレベルのブロック図である。
【図４】コードブロックに対する予測制御フローグラフのブロック図である。
【図５】統合分岐先・述語予測を利用するプログラムを生成するためのプロセスを示す図である。
【図６】統合分岐先・述語予測を使用して分岐先および述語を予測するためのプロセスを示す図である。
【図７】統合分岐先・述語予測を生成するためのプロセスを示す図である。
【図８】統合分岐先・述語予測に基づいて命令をスケジューリングするためのプロセスを示す図である。
【図９】上記で説明された方法の様々な態様を実施するように構成される例示的なコンピューティングデバイスを示す図である。
【図１０】すべて本開示の様々な実施形態にしたがって分類される、上記で説明された方法の様々な態様を装置が実践することを可能にするように構成される命令を有する、例示的な製造品を示す図である。
【発明を実施するための形態】
【０００９】
以下の詳細な説明において、本記載の一部を形成する添付の図面を参照する。図面において、文脈が別途指示しない限り、同様の参照符号は一般的に、同様の構成要素を識別する。詳細な説明、図面、および特許請求の範囲において説明される例示的な実施形態は限定であるようには意図されない。他の実施形態を利用することができ、本明細書において提示される主題の精神または範囲から逸脱することなく、他の変更をなすことができる。本明細書において全般的に説明されており、図面において例示されているような本開示の態様は、広範な種々の構成において構成、置換、統合、分離、および設計されることができ、それらのすべてが本明細書において明確に予期されることは容易に理解されよう。
【００１０】
本開示は、とりわけ、統合分岐先・述語予測を使用した述語および分岐先の予測に関する方法、装置、システム、およびコンピュータ可読媒体を対象とする。
【００１１】
説明される実施形態は、コンピューティングデバイスによるプログラムの実行を促進するための、分岐先および述語の両方の予測のための統合された構造を使用することに関連付けられ得る技法、方法、装置、および製造品を含む。様々な実施形態において、これらの予測は、ブロック不可分アーキテクチャにおいて、またはプログラムを述語付き基本命令ブロックに分割する他のアーキテクチャにおいてなされ得る。他の実施形態では、本明細書において説明される技法は、分岐と述語とを混合する他のアーキテクチャにおいて利用され得る。様々な実施形態において、予測は、命令ブロック内の述語およびブロック間の分岐を表す１つまたは複数の制御フローグラフを使用してなされ得る。コンパイル中、プログラムは複数のブロックに分割され得、１つまたは複数の予測制御フローグラフが各ブロックに関連付けられるように作成される。予測制御フローグラフは、ツリーとして構築され得、それによって、グラフ内の各ノードが述語に関連付けられ、各エッジが述語付き命令に関連付けられ、各葉が別のブロックにジャンプする制御命令に関連付けられる。したがって、ブロックの実行中、予測生成器は、最新のｎ個の述語のような制御点履歴をとり、予測を生成することができる。予測は、様々な実施形態において、制御フローグラフの様々なレベルに対する述語値のセットとして生成されることができ、したがって、予測はブロックの述語命令に対する予測を含むことができる。
【００１２】
これらの予測述語値を使用することによって、命令フェッチ・実行制御部は、いずれの述語に対して予測が適用されるかを判定するために、ツリーのトラバースにしたがった実行のために述語付き命令を予測およびスケジューリングすることができる。説明される実施形態は、予測述語値に沿ったグラフのトラバースが葉、それゆえ分岐先に通じるように、制御フローグラフを利用することもできる。様々な実施形態において、分岐先とは、ターゲット命令アドレスを生成する条件付き分岐および／または無条件分岐を指し得る。このトラバースを実行することによって、命令フェッチ・実行制御部は、分岐先、それゆえ、実行されるべき次のコードブロックを予測することができる。このように、本明細書において説明される実施形態は、単一の融合された予測を生成することを通じて、述語および分岐先の予測を統合することができる。これによって、従来技術のシステムおよび技法と比較してより低い電力および／またはより高い予測精度が提供され得る。
【００１３】
様々な実施形態において、予測生成は、並列予測生成技法を使用することを通じてより効率的になされ得る。並列予測生成は、同時期により低いレベルに対する可能な値も生成しながら、制御点履歴に基づいて第１の述語レベルに対する述語値を生成することによって実行されることができる。適切な数のレベルが操作された後、より高いレベルからの値が、より低いレベルに対する可能な値を絞り込むために使用されることができる。
【００１４】
一例として、予測生成器が１０の述語制御点履歴長を有し、１つのブロックに対して３レベルの述語の予測を課せられるものと仮定する。予測生成器は、様々な実施形態において、第１の予測に対して１０ビットの履歴を使用して検索を行うことができる。同時に、予測生成器は、第２のレベルの述語値を得るために、第１の検索の結果に対する２つの可能性とともに、最近の９ビットの履歴を使用して２つの検索を実行することができる。同時に、予測生成器は、第３の値に対する４つの検索を実行することができる。この同時生成の後、予測生成器は次いで、上位レベルの結果に基づいて特定の下位レベルの結果を選択し、残りを破棄することができる。この技法は、逐次化された生成システムよりも多くの予測値の検索を必要とする場合があるが、個々の述語値の生成が長い待ち時間を有するシナリオにおいては、この並列化技法は速度の向上を可能にすることができる。
【００１５】
図１は、様々な実施形態による、統合分岐先・述語予測システムの選択される構成要素のブロック図を示す。図１の図解において、コンパイラ１１０は、１つまたは複数の実行可能プログラムにコンパイルするために、１つまたは複数のプログラムファイル１０５を受信することができる。様々な実施形態において、コンパイラ１１０は、ブロック１２０のような、実行可能コード（以下、単に「コード」とも称される）の１つまたは複数のブロックを生成するように動作することができ、これらのブロックは、予測制御フローグラフ１２５のような、述語付き命令を表す制御フローグラフ、および、分岐１２９のような、グラフを接続する分岐に関連付けられている場合がある。様々な実施形態において、これらのブロックは不可分ブロックであり得る。
【００１６】
その後、これらのコードブロックは、ランタイム環境１４０内で実行されることができ、このランタイム環境は、下記により詳細に説明されることになる、統合分岐先・述語予測を使用して述語値および分岐先の予測を実行するように構成されることができる。示されているように、ランタイム環境１４０の一部として実行されることになる予測生成器１５０は、統合予測１５５のような統合分岐先・述語予測を生成するために、制御点履歴１４５のような制御点履歴を操作するように構成されることができる。様々な実施形態において、これらの制御点履歴は、過去の述語値、過去の分岐先値、またはその両方の組み合わせを含み得る。様々な実施形態において、予測生成器１５０は、全体的にまたは部分的に、制御点履歴に基づいて１つまたは複数の予測値を検索するルックアップテーブルとして実装され得る。加えて、予測生成器１５０は、予測生成のパフォーマンスを向上させるために、１つまたは複数の並列化検索（または他の述語値生成技法）を実行することができる。
【００１７】
その後、生成された統合予測１５５は、命令ブロック１５７に関する情報とともに、実行のために述語付き命令をマーキングするために、また、分岐コードブロックの実行をスケジューリングするために分岐先を予測するために、命令フェッチ・実行制御部１６０によって使用されることができる。様々な実施形態において、命令フェッチ・実行制御部１６０は、統合予測１５５に基づいて述語付き命令をスケジューリングするための命令スケジューラを備えることができる。様々な実施形態において、命令フェッチ・実行制御部１６０は、統合予測１５５に基づいてターゲットを予測し、そのターゲットに基づいて実行のために命令をフェッチするためのフェッチ制御ロジックを備えることができる。この予測生成および命令予測の具体例を下記にさらに説明する。様々な実施形態において、ランタイム環境１４０は、それ自体がコンパイラ１１０によって生成され得る、ランタイムマネージャまたは他の適切なソフトウェアによって提供され得る。
【００１８】
図２は、様々な実施形態による、統合分岐先・述語予測に基づく命令予測のブロック図を示す。図示されるように、示されている実施形態について、プログラムの実行は、分岐先２１０のような分岐先に通じる、述語付き命令２００のような１つまたは複数の述語付き命令の実行の形態をとることができる。したがって、これらの分岐先は、関連付けられる述語付き命令とともに、実行されるべき次の命令ブロックを示す。様々な実施形態において、本発明において利用される統合分岐先・述語予測は、命令ブロックに対して、ブロック全体の述語値の相当量に関する値、およびそのブロックから出る分岐先を予測することが可能である。この予測のセットは、点線２２０が境界となっている領域内の例示的な命令およびターゲットによって示されている。この例示的な命令およびターゲットは、３つの予測述語値（３つの影付きの円）、それに続く分岐先（影付きの三角形）を含む。これらの予測を実行するための特定の技法を下記に説明する。
【００１９】
図３は、様々な実施形態による、プログラムコードからの命令ブロックの生成の連続するレベルのブロック図を示す。図３の部分（ａ）は、例示的なＣ言語型コードスニペットを示す。スニペットは２つの可能性、すなわち命令：１）「ｙ＋＋」および２）「ｙ−−」に通じる「ｉｆ（ｘ＞０）」のような条件を含む。コードは、「ｇｏｔｏ  Ｂ２」のような、明白な分岐命令も含む。これらの分岐命令は、その分岐命令が実行される場合に分岐がとられるべきであることを示す。
【００２０】
図３の部分（ｂ）は、コンパイル後のコードの中間表現を示す。特に、部分３（ｂ）は、ブロック内の条件文がどのように述語付き命令として表現されているかを示す。このように、示されている例では、上記で論じられた「ｉｆ（ｘ＞０）」条件の結果は、行「Ｐｇｔ  ｐ０，ｒ０，０」において述語ｐ０として表現されている。この行において、レジスタｒ０内の値が０よりも大きいか否かを見るために比較され、その比較の真偽の結果が述語ｐ０の値として保持される。
【００２１】
次に、２つの命令がこの述語に依存している可能性がある。第１は、「ａｄｄ＿ｔ＜ｐ０＞ｒ１，１」命令であり、これは、ｐ０の値において述語化され、ｐ０が「真」である場合に実行される加算演算である。同様に、「ｓｕｂ＿ｆ＜ｐ０＞ｒ１，１」は、ｐ０述語が偽の値をとる場合にｒ１レジスタから１を減算する。換言すれば、本明細書において説明される技法およびシステムは、述語の実際の値が分かる前に述語付き命令のうちの１つがスケジューリングされることを可能にする、ｐ０のような述語に対する予測値を提供し、それによって、可能性としてブロックの実行が加速される。
【００２２】
図３の部分（ｃ）は、部分（ｂ）の中間表現から、コンパイラ１１０のようなコンパイラによって生成され得る例示的な命令ブロックのセットを示す。特にブロック１によって示されているように、各ブロックは、分岐に通じ、したがって実行に別のブロックへジャンプするよう指示する、述語付き命令の分岐したセットを含み得る。したがって、ブロック１が実行されると、もう１つの述語付き命令が実行され、次いで、別のブロックへの分岐がとられる。分岐Ｂ３がとられる場合、実行はブロック３へジャンプする。様々な実施形態において、分岐はブロックが再び実行されるようにする場合があり、たとえば、分岐Ｂ１はブロック１の実行を改めて開始する。本明細書において説明されるように、様々な実施形態において、命令ブロックは予測制御フローグラフに関連付けられている。予測制御フローグラフは、命令フェッチ・実行制御部が、ブロック内でいずれの述語付き命令が予測され、実行のためにスケジューリングされるべきかだけでなく、いずれの分岐がとられる可能性が高いか、それゆえ、現在実行しているブロックを出たときにいずれのブロックの実行に進行すべきかを予測することも可能にする。
【００２３】
図４は、様々な実施形態による、コードブロックに対する予測制御フローグラフのブロック図を示す。論じられるように、様々な実施形態において、コンパイラは、或るブロックに対して、特定の命令ブロックに対する述語付き命令および分岐先を示す予測制御フローグラフを生成するように構成されることができる。示されているように、予測制御フローグラフは、グラフ４１０のノードｐ０、ｐ１、およびｐ５のようなノードによって述語を表し、分岐先ｂ１００、ｂ１０１およびｂ１１０のような分岐先を葉として表すツリーとして実装されることができる。加えて、ツリー内のエッジは予測される命令を表すことができ、したがって、述語ｐ０の値が「真」である場合、ｐ０からｐ４へのエッジによって表される命令が実行されることができる。本明細書において論じられるように、本明細書において説明される技法は、予測値のセットを特定する統合分岐先・述語予測を生成することによって述語値および分岐先の両方を予測するためにこれらの予測制御フローグラフを利用する。グラフを通じて値を追うことによって、ランタイム環境１４０、特に命令フェッチ・実行制御部１６０は、ａ）いずれの述語付き命令が実行のために必要とされる可能性が高いか、およびｂ）それらの値が何であるかを特定することができる。加えて、経路を追うことによって、命令フェッチ・実行制御部１６０は、次の命令ブロックをスケジューリングするための分岐先を特定することができる。与えられている制御フローグラフは、ブロックの内部構造に応じて異なる長さの経路を含むことができる。したがって、様々な実施形態において、命令フェッチ・実行制御部１６０は、葉ノードにあるその終端まで経路を追うことができ、一方でいくつかの実施形態では、命令フェッチ・実行制御部１６０は、経路を終端まで行かずに追うこと、またはその実際の終端を過ぎて経路を追うことに基づいて、分岐先を予測してもよい。
【００２４】
様々な実施形態において、予測制御フローグラフは、述語ごとに分岐する、グラフ４１０におけるように、述語値ごとに異なる経路を含むことができる。しかしながら、いくつかのシナリオにおいては、ブロックは、グラフ４２０におけるように、ｐ０の値にかかわりなくグラフによって表されるブロックに対する制御が次にｐ１の値に依存することになる、特定の述語では分岐しない場合がある。しかしながら、ツリー内に異なるエッジ４２３および４２５が存在するため、これは、そのブロック内で同じ命令が実行されることになることを意味しない。異なるエッジ４２３および４２５の各々は異なる述語付き命令を表し得る。加えて、ｐ０の値は将来の命令を完全に決定するものではない場合があるが、様々な実施形態において、その値は依然として特定の将来の述語または分岐先の値と相関し得る。したがって、ｐ０の値は、予測生成のために依然として制御点履歴内に維持され得る。この例は、図３に関連して上記で論じられた、述語ｐ０がとった値にかかわりなくブロック１の実行が述語ｐ１に進行したコードに見ることができる。また、様々な実施形態において、予測制御フローグラフは、グラフ内のレベルの数または分岐の度合いのような、グラフの形状に関する情報に関連付けられている場合がある。この形状情報は、予測生成、特に並列化予測生成の実行に有用であり得る。
【００２５】
図５は、様々な実施形態による、統合分岐先・述語予測を利用するプログラムを生成するためのプロセス５００を示す。示されているように、プロセス５００は動作５１０において開始することができる（「プログラムコードを受信する」）。動作５１０において、コンパイラ１１０などによって、コンパイルするためのプログラムコードが受信されることができる。上記で論じられたように、様々な実施形態において、プログラムコードは１つまたは複数のコードファイルを含むことができ、様々な既知のコンピューティング言語において実装されることができる。加えて、様々な実施形態において、プログラムコードは、本明細書において説明されている予測技法を利用するコード生成においてコンパイラを補助する１つまたは複数の命令または情報を有することができる。説明を容易にするために、プロセス５００の活動はコンパイラ１１０のような単一のコンパイラを参照して説明されているが、代替的な実施形態では、１つもしくは複数のコンパイラまたは他のコード解析モジュールがこれらの活動を実行するために利用されてもよい。
【００２６】
動作５１０から、プロセス５００は動作５２０に進むことができる（「述語付き命令を生成する」）。動作５２０において、コンパイラは、たとえば、図３を参照して上記で論じられた命令のような、述語付き命令を生成することができる。上記で論じられたように、これらの述語付き命令は、少なくとも部分的に、コンパイラ１１０が条件文を識別し、これらの文に基づいて述語を生成することを通じて生成されることができる。動作５２０から、プロセス５００は動作５３０に進むことができる（「分岐命令を生成する」）。動作５３０において、コンパイラ１１０は、たとえば、図３を参照して上記で論じられた命令のような、分岐命令を生成することができる。動作５３０から、プロセス５００は動作５４０に進むことができる（「ブロック命令を生成する」）。動作５４０において、コンパイラ１１０は予測を目的として命令ブロックを生成することができる。様々な実施形態において、コンパイラは、上記で示されたもののような、明示的なジャンプの呼び出しに基づいて分岐命令を生成し、かつ／またはブロックを生成することができる。他の実施形態では、コンパイラは元のプログラムコード内に存在するブロックを識別して、本来ジャンプがコードされていなかった場合であってもこれらの識別されたブロック間に分岐を生成することができる。ブロックは、図３に図示されている例におけるように明示的に識別されることができるか、または、或る単位として実行されることになる可能性が高い命令のセットとしてコンパイラによって認識されることができる。
【００２７】
動作５４０から、プロセス５００は動作５５０に進むことができる（「ブロック内のツリー情報を符号化する」）。動作５５０において、コンパイラは、予測制御フローグラフに関するツリー情報（またはおおよそのツリー情報）を、それらの予測制御フローグラフに関連付けられる命令ブロックのそれぞれのヘッダ内に符号化することができる。たとえば、上記のように、ツリーは、根と、葉としての様々な無条件ジャンプとの間の様々な経路上の多数の述語を表すことができる。このようなツリーにおいて、述語はブロック内でノードとして、述語結果／値はエッジとして、分岐先は葉として使用されることになる。他の実施形態では、コンパイラはツリーの深さまたはツリーの形状に関係する情報を符号化することができ、それによって、予測生成の間、予測生成器１５０は適切な長さの予測をより容易に生成することができる。
【００２８】
図６は、様々な実施形態による、統合分岐先・述語予測を使用して分岐先および述語を予測するためのプロセス６００を示す。示されている実施形態に関して、プロセス６００は、示されている例が単一のブロックのみに対する予測を示している場合であっても、ブロックごとに実行されることができる。代替の実施形態では、予測は実行中に必要に応じて複数のブロックに対して実行されてもよい。
【００２９】
したがって、それらの実施形態に関して、プロセス６００は動作６１０によって開始することができる（「制御点履歴を検索する」）。動作６１０において、ランタイム環境１４０、特に予測生成器１５０は、制御点履歴を検索することができる。様々な実施形態において、制御点履歴は、過去に評価された述語値の履歴を含むことができ、履歴は、２進列の形態をとり、かつ／または事前定義の長さを有することができる。一例は、図１に示されている制御点履歴１４５であり得る。様々な実施形態において、制御点履歴はとられた分岐先の１つまたは複数の記録をも含むことができる。
【００３０】
動作６１０から、プロセス６００は動作６２０に進むことができる（「予測を生成する」）。動作６２０において、予測生成器１５０は制御点履歴１４５を使用して、命令のスケジューリングに使用するための、統合予測１５５のような予測を生成することができる。この活動の特定の実施形態は、図７を参照して下記に説明される。動作６２０から、プロセス６００は動作６３０に進むことができる。動作６３０において、命令フェッチ・実行制御部１６０は、統合予測１５５およびブロック情報１５７を使用して、実行のために命令をスケジューリングすることができる。この活動の特定の実施形態は、図８を参照して下記に説明される。
【００３１】
図７は、様々な実施形態による、統合分岐先・述語予測を生成するためのプロセス７００を示す図である。図６に関する上記の論述と同様に、プロセス７００はブロックごとに実行されることができ、したがって、示されている例は、単一のブロックに対する予測を示す。示されている例は、統合予測を効率的に生成するための並列化技法を示している。様々な実施形態において、示されていないが、予測生成器１５０は、述語値を受信するルックアップテーブル内などに制御点履歴を入力することによって、一度に１つの値の予測を生成し得る。その後、予測生成器１５０は、次の述語値を検索するために、新たに生成された述語値とともに制御点履歴内の最も古い値を除くすべての値を使用して第２の検索に進むことができ、以下同様である。検索は、十分な値が見つかり、そのブロックに対する統合分岐先・述語予測が生成されるまで継続することができる。
【００３２】
示されているように、プロセス７００は、動作７１０において開始することができる（「レベルｎに対する予測述語付き値を生成する」）。動作７１０において、予測生成器１５０は、レベルｎに対する予測述語値を生成することができる。上記で論じられたように、これは、ルックアップテーブルを含む様々な生成方法を使用して実行されることができる。動作７１０から、プロセス７００は動作７２０に進むことができる（「レベルｎ＋１に対する２つの予測述語化値を生成する」）。動作７２０において、予測生成器１５０は、制御点履歴内のレベルｎに対する両方の可能な述語値を使用してレベルｎ＋１に対する２つの予測述語値を生成することができる。示されているように、このブロックの動作は、動作７１０の結果に直接依拠しないため、動作７１０の動作と並列に実行されることができる。動作７２０から、プロセス７００は動作７３０に進むことができる（「レベルｎ＋２に対する４つの予測述語化値を生成する」）。動作７２０において、同様の動作が実行されることができ、ここで、予測生成器がレベルｎ＋２に対する４つの予測述語化値を生成する。レベルｎ＋２に対する４つの予測述語値は、動作７１０および７２０の結果に対する可能な値のすべてを使用して生成されることができる。
【００３３】
以下は、説明されている実施形態による、統合分岐先・述語予測を生成するための一例である。動作７１０において、予測生成器が長さ５の命令履歴に対して動作しており、現在の制御点履歴が１１０１１である場合、予測生成器１５０は履歴１１０１１を使用してレベルｎに対する予測値を検索することができる。その動作と同時に（または少なくとも同時期に）、予測生成器１５０は、命令履歴１０１１０および１０１１１を使用してレベルｎ＋１に対する検索も実行することができる。命令履歴は、履歴内の４つの最近の履歴値を表すことができる。加えて、命令履歴は、動作７１０における生成動作からの２つの可能な結果に関連付けられ得る。同様に、動作７３０において、履歴０１１００、０１１０１、０１１１０、および０１１１１を使用して検索が実行され得る。
【００３４】
動作７１０、７２０または７３０から、プロセス７００は動作７４０に進むことができる（「述語値を決定する」）。動作７４０において、動作７１０、７２０、および７３０の結果が分かった後、述語値が決定されることができる。したがって、動作７１０からの値が０であると求められた場合、１０１１０を入力として使用した動作７２０からの結果が維持され得る。動作７２０からの他の結果は破棄され得る。同様に、１つの結果が動作７３０からとられ得る。示されている例は３つのレベルの並列述語予測を利用しているが、代替的な実施形態では、異なる数のレベルが使用されてもよいことが認識されるべきである。
【００３５】
動作７４０から、プロセス７００は動作７４５に進むことができる（「予測される述語の数がブロックの数以上であるか」）。動作７４５において、予測生成器１５０は、予測が少なくとも、現在の命令ブロック内のすべての述語に対してなされたか否かを判定することができる。そうでない場合、プロセス７００は動作７１０、７２０、および７３０に戻り、ｎ＝ｎ＋３で進行することができる。予測がブロック内のすべての述語に対してなされている場合、動作７５０において（「余分な述語予測を廃棄する」）。動作７５０において、余分な予測が廃棄されることができる。たとえば、上記で論じられた３レベル並列化予測を使用するとき、５つのレベルの述語がブロック内に存在する場合、プロセスはループを２回反復して実行し、６つの予測述語値を生成することができる。その場合、第６の値が破棄され得る。加えて、いくつかの実施形態では、ブロックがそれらの予測制御フローグラフ内に不均衡なツリー（または他の複雑なツリー形状）を含む場合、予測生成器１５０は、与えられたツリー内の最長経路を満たすのに十分な予測述語値を生成するように構成されることができる。結果として、予測生成器１５０は、複雑である可能性のあるツリー記述子を見て計算資源の消費を回避または低減することができる。これは、動作７５０において述語予測を破棄する結果にもなり得る。
【００３６】
図８は、様々な実施形態による、統合分岐先・述語予測に基づいて命令をスケジューリングするためのプロセス８００を示す。この実施形態について、プロセス８００は、動作８１０において開始することができる（「統合予測に基づいてツリーをトラバースする」）。動作８１０において、命令フェッチ・実行制御部１６０は、統合予測１５５に基づいて予測制御フローグラフのツリーをトラバースすることができる。動作８１０から、プロセス８００は動作８２０に進むことができる（「ツリーのトラバースに基づいて述語を予測する」）。動作８２０において、命令フェッチ・実行制御部は、ツリーを通る経路に基づいて、いずれの述語が評価されることになるかを予測することができる。動作８２０から、プロセス８００は動作８３０に進むことができる（「予測される述語に基づいて述語付き命令を実行のためにスケジューリングする」）。動作８３０から、命令フェッチ・実行制御部１６０は、これらの予測に基づいて、述語付き命令を実行のためにスケジューリングすることができる。動作８３０から、プロセス８００は動作８４０に進むことができる（「トラバースの終端におけるツリーの葉に基づいて分岐先を予測する」）。動作８４０から、命令フェッチ・実行制御部は、ツリーのトラバースに基づいて分岐先を予測することができる。様々な実施形態において、命令フェッチ・実行制御部は、トラバースが葉ノードに通じる場合、ツリーのトラバースの終端に位置するツリーの葉に基づいて分岐先を予測することができ、他の実施形態では、予測は非終端トラバースに基づいてもよい。動作８４０から、プロセス８００は動作８５０に進むことができる（「分岐先によって指示されるコードブロックを実行のためにスケジューリングする」）。動作８５０から、命令フェッチ・実行制御部１６０は、この分岐先によって指示される１つまたは複数の命令を、現在のコードブロックの後の次の実行のためにフェッチすることができる。上記で論じられたように、プロセス８００の下で、統合予測１５５のような単一の統合予測は、或る命令ブロックに関して述語付き命令および分岐先の両方をスケジューリングするのに十分な情報を提供し得る。フェッチされた命令が続いて実行されることができる。
【００３７】
図９は、本開示にしたがって構成される例示的なコンピューティングデバイスを示すブロック図である。基本構成９０１内で、コンピューティングデバイス９００は一般的に、１つまたは複数のプロセッサ９１０およびシステムメモリ９２０を含む。プロセッサ９１０とシステムメモリ９２０との間の通信のためにメモリバス９３０が使用されることができる。
【００３８】
所望の構成に応じて、プロセッサ９１０は、限定ではないがマイクロプロセッサ（μＰ）、マイクロコントローラ（μＣ）、デジタル信号プロセッサ（ＤＳＰ）、またはそれらの任意の組み合わせを含む任意のタイプのものであり得る。プロセッサ９１０は、レベル１キャッシュ９１１およびレベル２キャッシュ９１２のような、１つ多いレベルのキャッシング、プロセッサコア９１３、およびレジスタ９１４を含むことができる。例示的なプロセッサコア９１３は、算術論理演算ユニット（ＡＬＵ）、浮動小数点演算ユニット（ＦＰＵ）、デジタル信号処理コア（ＤＳＰコア）、またはそれらの任意の組み合わせを含むことができる。例示的なメモリコントローラ９１５は、プロセッサ９１０によって使用されることもでき、または、いくつかの実施態様では、メモリコントローラ９１５はプロセッサ９１０の内部部品であってもよい。
【００３９】
所望の構成に応じて、システムメモリ９２０は、限定ではないが揮発性メモリ（ＲＡＭなど）、不揮発性メモリ（ＲＯＭ、フラッシュメモリ他など）、またはそれらの任意の組み合わせを含む任意のタイプのものであり得る。システムメモリ９２０は、オペレーティングシステム９２１、１つまたは複数のアプリケーション９２２、およびプログラムデータ９２４を含むことができる。アプリケーション９２２は、上記で説明された統合分岐先・述語予測生成および命令予測を実施するためのロジック９２３を提供するプログラミング命令を含むことができる。プログラムデータ９２４は、統合分岐先・述語予測、制御点履歴、およびコードブロック情報のようなデータ９２５を含むことができる。
【００４０】
コンピューティングデバイス９００は、追加の特徴または機能、ならびに、基本構成９０１と任意の必要とされるデバイスおよびインタフェースとの間の通信を促進するための追加のインタフェースを有することができる。たとえば、ストレージ・インタフェース・バス９４１を介する、基本構成９０１と１つまたは複数のデータ記憶デバイス９５０との間の通信を促進するためにバス／インタフェースコントローラ９４０が使用されることができる。データ記憶デバイス９５０は、取り外し可能記憶デバイス９５１、固定記憶デバイス９５２、またはそれらの組み合わせであり得る。取り外し可能記憶デバイスおよび固定記憶デバイスの例は、いくつか挙げると、フレキシブル・ディスク・ドライブおよびハードディスクドライブ（ＨＤＤ）のような磁気ディスクデバイス、コンパクトディスク（ＣＤ）ドライブまたはデジタル多用途ディスク（ＤＶＤ）ドライブのような光ディスクドライブ、ソリッド・ステート・ドライブ（ＳＳＤ）、ならびにテープドライブを含む。例示的なコンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータのような情報の記憶のための任意の方法または技術において実装される揮発性および不揮発性、取り外し可能および固定の媒体を含むことができる。
【００４１】
システムメモリ９２０、取り外し可能ストレージ９５１および固定ストレージ９５２はすべて、コンピュータ記憶媒体の例である。コンピュータ記憶媒体は、限定ではないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリもしくは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）もしくは他の光ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージもしくは他の磁気的記憶デバイス、または、所望の情報を記憶するのに使用されることができるとともに、コンピューティングデバイス９００によってアクセスされることができる任意の他の媒体を含む。任意のこのようなコンピュータ記憶媒体はデバイス９００の一部であることができる。
【００４２】
コンピューティングデバイス９００は、様々なインタフェースデバイス（たとえば、出力インタフェース、周辺インタフェース、および通信インタフェース）からバス／インタフェースコントローラ９４０を介して基本構成９０１への通信を促進するための、インタフェースバス９４２をも含むことができる。例示的な出力デバイス９６０は、グラフィックス処理ユニット９６１およびオーディオ処理ユニット９６２を含み、これらは、１つまたは複数のＡ／Ｖポート９６３を介してディスプレイまたはスピーカのような様々な外部デバイスと通信するように構成されることができる。例示的な周辺インタフェース９７０は、直列インタフェースコントローラ９７１または並列インタフェースコントローラ９７２を含み、これらは、１つまたは複数のＩ／Ｏポート９７３を介して入力デバイス（たとえば、キーボード、マウス、ペン、音声入力デバイス、タッチ入力デバイス他）または他の周辺デバイス（たとえば、プリンタ、スキャナ他）のような外部デバイスと通信するように構成されることができる。例示的な通信デバイス９８０はネットワークコントローラ９８１を含み、これは、１つまたは複数の通信ポート９８２を介するネットワーク通信リンクにわたる１つまたは複数の他のコンピューティングデバイス９９０との通信を促進するように構成されることができる。
【００４３】
ネットワーク通信リンクは、通信媒体の１つの例であり得る。通信媒体は、一般的には、コンピュータ可読命令、データ構造、プログラムモジュール、または、搬送波もしくは他の伝送メカニズムのような、変調データ信号内の他のデータによって具現化されることができ、任意の情報配信媒体を含むことができる。「変調データ信号」は、その特性のうちの１つまたは複数が、当該信号内に情報を符号化するように設定または変更されている信号であり得る。限定ではなく例として、通信媒体は、有線ネットワークまたは直接有線接続のような有線媒体、ならびに、音響、無線周波数（ＲＦ）、マイクロ波、赤外線（ＩＲ）および他の無線媒体のような無線媒体を含むことができる。本明細書において使用されているものとしてのコンピュータ可読媒体という用語は、有形記憶媒体および通信媒体の両方を含み得る。
【００４４】
コンピューティングデバイス９００は、携帯電話、携帯情報端末（ＰＤＡ）、パーソナル・メディア・プレーヤ・デバイス、無線ウェブ閲覧デバイス、パーソナル・ヘッドセット・デバイス、特定用途向けデバイス、または、上記の機能のいずれかを含むハイブリッドデバイスのような、小型フォームファクタ可搬（またはモバイル）電子デバイスの一部として実装されることができる。コンピューティングデバイス９００は、ラップトップコンピュータ構成および非ラップトップコンピュータ構成の両方を含むパーソナルコンピュータとして実装されることもできる。
【００４５】
本明細書において論じられている１つまたは複数の方法を実行するための製造品および／またはシステムが用いられ得る。図１０は、本開示の様々な実施形態による、集積回路の構成要素の使用量を計測するためのコンピュータプログラム製品１０００を有する例示的な製造品のブロック図を示す。コンピュータプログラム製品１０００は、持続性コンピュータ可読記憶媒体１００２、およびコンピュータ可読記憶媒体１００２内に記憶される複数のプログラミング命令１００４を含むことができる。
【００４６】
これらの様々な実施形態において、プログラミング命令１００４は、装置による実行に応答して、装置が、以前に実行された１つまたは複数の命令に少なくとも部分的に基づいて統合述語・分岐先予測を特定することであって、予測は、第１のコードブロック内の述語付き命令に対する１つまたは複数の予測述語値を含む、特定することと、
コンピューティングデバイス上で、予測述語値に少なくとも部分的に基づいて、ブロック内の述語付き命令の中から１つまたは複数の予測述語付き命令を実行することと、
予測述語付き命令に基づいて、第２のブロックコードを指示する予測分岐先ロケーションを予測することと、
第２のブロックコードで実行を継続することと
を含む動作を実行することを可能にするように構成されることができる。
【００４７】
コンピュータ可読記憶媒体１００２は、限定ではないがコンパクトディスク読み出し専用メモリ（ＣＤＲＯＭ）およびフラッシュメモリのような、不揮発性かつ永続性のメモリを含むがこれには限定されない様々な形態をとることができる。
【００４８】
本明細書において説明されている主題は時として、異なる他の構成要素または要素内に含まれるか、またはそれらと接続される種々の構成要素または要素を示している。このように描写されているアーキテクチャは例に過ぎないこと、および、事実、同じ機能を達成する多くの他のアーキテクチャが実装されてもよいことは理解されたい。概念的な意味において、この同じ機能を達成するための構成要素の任意の構成は、所望の機能を達成するように効果的に「関連付けられる」。したがって、本明細書において、特定の機能を達成するために組み合わされている任意の２つの構成要素は、アーキテクチャまたは内部構成要素にかかわりなく、所望の機能が達成されるように互いに「関連付けられている」とみなされることができる。同様に、このように関連付けられている任意の２つの構成要素は、所望の機能を達成するために互いに「動作可能に接続されている」または「動作可能に結合されている」とみなされることもでき、このように関連付けられることが可能な任意の２つの構成要素は、所望の機能を達成するために互いに「動作可能に結合可能である」とみなされることもできる。動作可能に結合可能な具体例は、限定ではないが、物理的に接合可能および／もしくは物理的に相互作用する構成要素ならびに／または無線相互作用可能および／もしくは無線相互作用する構成要素ならびに／または論理的に相互作用するおよび／もしくは論理的に相互作用可能な構成要素を含む。
【００４９】
本明細書において説明されている主題の様々な態様は、当業者によって、それらの働きの要旨を他の当業者に伝達するために一般的に用いられる用語を使用して説明されている。しかしながら、これらの説明されている態様のいくらかのみを用いて代替の実施態様が実施されてもよいことが当業者には明らかなはずである。説明を目的として、説明例の完全な理解を提供するために、具体的な数、材料、および構成が記載されている。しかしながら、代替の実施形態はこれらの具体的な詳細なしに実施されることができることが当業者には明らかなはずである。他の事例において、例示的な実施形態を曖昧にしないために、既知の特徴は省略または簡略化されている。
【００５０】
本明細書において相当に任意の複数形および／または単数形の用語が使用されていることに関して、当業者は、文脈および／または用途にとって適切であるように、複数形から単数形に、かつ／または単数形から複数形に読み換えてもよい。様々な単数形／複数形の置換は、明瞭にする目的で本明細書において明示的に記載されている場合がある。
【００５１】
一般的に、本明細書において、特に添付の特許請求の範囲（たとえば、添付の特許請求項の特徴記載部）において使用されている用語は概して、「オープンな」用語として意図されている（たとえば、「含む（ｉｎｃｌｕｄｉｎｇ）」という用語は、「含むが限定されない（ｉｎｃｌｕｄｉｎｇ  ｂｕｔ  ｎｏｔ  ｌｉｍｉｔｅｄ  ｔｏ）」として解釈されるべきであり、「有する（ｈａｖｉｎｇ）」という用語は「少なくとも有する（ｈａｖｉｎｇ  ａｔ  ｌｅａｓｔ）」として解釈されるべきであり、「含む（ｉｎｃｌｕｄｅｓ）」という用語は、「含むが限定されない（ｉｎｃｌｕｄｅｓ  ｂｕｔ  ｎｏｔ  ｌｉｍｉｔｅｄ  ｔｏ）」として解釈されるべきである、など）ことが当業者には理解されよう。具体的な数の特許請求項の列挙の導入が意図されている場合、そのような意図は特許請求項において明示的に記載されており、そのような列挙がない場合、そのような意図は存在しないことが当業者にはさらに理解されよう。たとえば、理解を助けるものとして、以下の添付の特許請求項は、特許請求項の列挙を導入するために前置きの語句「少なくとも１つ」および「１つまたは複数」の使用を含む場合がある。しかしながら、このような語句を使用することは、不定冠詞「ａ」または「ａｎ」による特許請求項の列挙の導入が、たとえ同じ特許請求項が前置きの語句「１つまたは複数」または「少なくとも１つ」および「ａ」または「ａｎ」のような不定冠詞を含む場合であっても、このように導入される特許請求項の列挙を含む任意の特定の特許請求項がただ１つのこのような列挙を含む発明に限定することを暗示するものとして解釈されるべきではなく（たとえば、「ａ」および／または「ａｎ」は一般的には「少なくとも１つ」または「１つまたは複数」を意味するように解釈されるべきである）、同じことが、特許請求項の列挙を導入するために使用される定冠詞の使用にも当てはまる。加えて、たとえ導入される特許請求項の列挙の具体的な数が明示的に記載されている場合であっても、このような列挙は一般的には少なくとも記載されている数を意味するように解釈されるべきである（たとえば、他に変更するものがなくただ「２つの列挙」が記載されているとき、これは一般的には少なくとも２つの列挙または２つ以上の列挙を意味する）ことを当業者は認識しよう。さらに、「Ａ、Ｂ、およびＣなどのうちの少なくとも１つ」に類似の慣例が使用されている事例においては、一般的に、このような構造は、当業者がこの慣習を理解するであろう意味において意図される（たとえば、「Ａ、Ｂ、およびｅのうちの少なくとも１つを有するシステム」は、限定ではないが、Ａ単独、Ｂ単独、Ｃ単独、ＡおよびＢをともに、Ａおよびｅをともに、Ｂおよびｅをともに、ならびに／またはＡ、Ｂ、およびＣをともに、などを有するシステムを含むことになる）。「Ａ、Ｂ、またはＣなどのうちの少なくとも１つ」に類似の慣例が使用されている事例においては、一般的に、このような構造は、当業者がこの慣習を理解するであろう意味において意図される（たとえば、「Ａ、Ｂ、またはＣのうちの少なくとも１つを有するシステム」は、限定ではないが、Ａ単独、Ｂ単独、Ｃ単独、ＡおよびＢをともに、ＡおよびＣを���もに、ＢおよびＣをともに、ならびに／またはＡ、Ｂ、およびＣをともに、などを有するシステムを含むことになる）。事実上、２つ以上の代替的な用語を表す任意の離接語および／または句は、それが明細書、特許請求の範囲、または図面のいずれの中にあろうと、それらの用語のうちの１つ、それらの用語のいずれか、または両方の用語を含む可能性があることを企図するものと理解されるべきであることが当業者にはさらに理解されよう。たとえば、「ＡまたはＢ」という語句は、「Ａ」もしくは「Ｂ」または「ＡおよびＢ」の可能性を含むように理解されることになる。
【００５２】
様々な動作が、実施形態の理解に有用であり得るように順に複数の別個の動作として記載されている場合があるが、記載の順序はこれらの動作が順序依存であることを暗示するように解釈されるべきではない。また、実施形態は記載されているよりも少ない動作を含んでもよい。複数の別個の動作の記載は、すべての動作が必要であることを暗示するように解釈されるべきではない。また、実施形態は記載されているよりも少ない動作を含んでもよい。複数の別個の動作の記載は、すべての動作が必要であることを暗示するように解釈されるべきではない。
【００５３】
本明細書において、好ましい実施形態の説明を目的として特定の実施形態が例示および説明されているが、本開示の範囲から逸脱することなく、同じ目的を達成するように計算される広範な代替および／または均等な実施形態または実施態様が、図示および記載されている実施形態と置換されてもよいことが当業者には理解されよう。本開示の実施形態は非常に広範な方法で実装されることができることを当業者は容易に理解しよう。本開示は、本明細書において論じられている実施形態の任意の適合形態または変形形態を包含するように意図される。それゆえ、本開示の実施形態は特許請求の範囲およびその均等物のみによって限定されることが明白に意図されている。
【図１】
2013534004.tif 000003
【図２】
2013534004.tif 000004
【図３】
2013534004.tif 000005
【図４】
2013534004.tif 000006
【図５】
2013534004.tif 000007
【図６】
2013534004.tif 000008
【図７】
2013534004.tif 000009
【図８】
2013534004.tif 000010
【図９】
2013534004.tif 000011
【図１０】
2013534004.tif 000012
【国際調査報告】
2013534004.tif 000013