(57)【特許請求の範囲】
【請求項１】
メモリに接続されるプロセッサを用いて、シングルスレッド化された非構造的バイナリコード領域を処理するステップと、
前記領域についてスライス基準を決定するステップと、
バイナリレベルにおける前記領域の解析に基づき、前記領域についてコールエッジ、リターンエッジ及びフォールスルー擬似エッジを決定するステップと、
前記コールエッジ、前記リターンエッジ、前記フォールスルー擬似エッジ及び前記スライス基準に基づき、コンテクストセンシティブなコードスライスを生成するステップと、
前記コンテクストセンシティブなコードスライスを前記メモリに保存するステップと、
を有する方法。
【請求項２】
前記リターンエッジをトラバースすることによって、前記コンテクストセンシティブなコードスライスを生成するステップを有する、請求項１記載の方法。
【請求項３】
前記リターンエッジに基づき、前記領域の再帰的なサブスライスを決定するステップを有する、請求項２記載の方法。
【請求項４】
前記再帰的なサブスライスの決定は、他のコールエッジのメタデータに基づくものでない、請求項３記載の方法。
【請求項５】
前記再帰的なサブスライスの決定後、前記フォールスルー擬似エッジをトラバースするステップを有する、請求項３記載の方法。
【請求項６】
再帰的なファンクションコールを決定するステップと、
前記再帰的なファンクションコールについてコンテクスト非センシティブなコードスライスを生成するが、前記再帰的なファンクションコールのコンテクストセンシティブなコードスライスを生成することを試みないステップと、
を有する、請求項１記載の方法。
【請求項７】
タイムリミットの経過に基づき、第２コールエッジを通常の制御フローエッジととして扱うことによって、前記第２コールエッジのコンテクスト非インセンティブなコードスライスを生成するステップを有する、請求項１記載の方法。
【請求項８】
前記領域に含まれる他のリターンエッジを通常の制御フローエッジとして扱い、前記領域に含まれる他のフォールスルー擬似エッジを無視することによって、前記コンテクスト非センシティブなコードスライスを生成する、請求項６記載の方法。
【請求項９】
前記シングルスレッド化された領域から第１スレッドと第２スレッドとを決定するため、前記コンテクストセンシティブなコードスライスに基づき前記領域をパラレル化するステップを有し、
前記第１スレッドと前記第２スレッドとは、パラレルに実行されてもよい、請求項１記載の方法。
【請求項１０】
実行時に前記コンテクストセンシティブなコードスライスを生成するステップを有する、請求項１記載の方法。
【請求項１１】
前記領域は、ホット領域である、請求項１０記載の方法。
【請求項１２】
前記領域の制御フローグラフに基づき、前記コールエッジ、前記リターンエッジ及び前記フォールスルー擬似エッジを決定するステップを有する、請求項１０記載の方法。
【請求項１３】
前記領域は、実行時に形成されるマイクロオペレーションスレッドに完全に含まれる、請求項１記載の方法。
【請求項１４】
前記スライスの決定は、デバッグ情報を含むメタデータに基づく
ものでない、請求項１記載の方法。
【請求項１５】
プロセッサベースシステムのプロセッサを用いて、シングルスレッド化された非構造的バイナリコード領域を処理するステップと、
バイナリレベルにおける前記領域の解析に基づき、前記領域のリターンエッジを決定するステップと、
前記リターンエッジに基づき、コンテクストセンシティブなコードスライスを生成するステップと、
前記コンテクストセンシティブなコードスライスを前記システムのメモリに格納するステップと、
前記バイナリレベルにおける前記領域の解析に基づき、前記領域のコールエッジとフォールスルー擬似エッジとを決定するステップと、
前記コールエッジと前記フォールスルー擬似エッジとに基づき前記スライスを生成するステップと、
を前記システムが実行することを可能にする命令を格納する媒体を有する物。
【請求項１６】
前記リターンエッジをトラバースすることによって、前記スライスを生成するステップと、
前記領域に含まれる他のコールエッジとを通常の制御フローエッジとして扱うことによって、タイムリミットに基づきコンテクスト非センシティブなスライスを生成するステップと、
を前記システムが実行することを可能にする命令を格納する、請求項１５記載の物。
【請求項１７】
シングルスレッド化される非構造的バイナリコード領域を受信するメモリと、
前記メモリに接続され、バイナリレベルにおける前記領域の解析に基づき前記領域のリターンエッジを決定し、前記リターンエッジに基づきコンテクストセンシティブなコードスライスを生成するプロセッサと、
を有し、
前記プロセッサは、
前記バイナリレベルにおける前記領域の解析に基づき、前記領域のコールエッジとフォールスルー擬似エッジとを決定し、
前記コールエッジとフォールスルー擬似エッジとに基づき前記スライスを生成する、装置。
【請求項１８】
前記プロセッサは、
前記リターンエッジをトラバースすることによって、前記スライスを生成し、
前記領域に含まれる他のコールエッジを通常の制御フローエッジとして扱うことによって、タイムリミットに基づきコンテクスト非センシティブなコードスライスを生成する、請求項１７記載の装置。
【発明の詳細な説明】
【背景技術】
【０００１】
プログラムスライス処理は、プログラム内のスライシング基準と呼ばれる指定されたステートメントの正確さに影響を与えるプログラムステートメントセット（個別のマシーン命令など）を決定する。スライスは、スライシング基準が依存するステートメントから構成される。例えば、マシーン命令Ｓに関するプログラムスライスは、命令Ｓが正しいライブイン入力値に対して依存するマシーン命令セット又はサブセットを含む。スライスは、あるコード領域に含まれる命令に関するものであってもよいし、そうでなくてもよい。このような領域は、例えば、頻繁に実行されるコードセグメントの静的な表現を含む。
【０００２】
スライス処理はいくつかの効果を有する。例えば、プログラムデバック処理では、プログラムスライスの試験は、プログラム全体を試験する必要なく、関連性の高いプログラムステートメントに着目して時間を費やすことを可能にする。他の例として、プログラムのパラレル化では、スライス処理は、パラレルに実行可能な独立した従属性チェーンを特定することに利用される。
【０００３】
静的なスライスと動的なスライスとが、２つのタイプのプログラムスライスである。動的なスライス処理は、実行時の命令の動的な各起動が異なるスライシング基準であるとみなし、実行中の特定のポイントにおける当該命令に一意的な動的なスライスセットを計算する。他方、静的なスライスは、命令が有することができるすべての依存性を表す命令について単一のスライスセットを含む。
【０００４】
スライスは、コンテクストセンシティブ又はコンテクスト非センシティブであってもよい。コンテクスト非センシティブなスライス処理を実行するため、所与の命令に関する静的なバックワードスライスは、以下のように構成される。プログラム依存性グラフ（ＰＤＧ）は、ＳＳＡ（Ｓｔａｔｉｃ  Ｓｉｎｇｌｅ  Ａｓｓｉｇｎｍｅｎｔ）データ依存性情報と計算された制御依存性情報とに基づき生成される。その後、バックワードグラフ到達可能性解析が、基準命令においてスタートするＰＤＧに対して実行される。しかしながら、コンテクスト非センシティブなスライス処理は、コンテクストを呼び出すファンクションを無視し（例えば、以下において説明される、エッジを返す、エッジを呼び出す、及び／又は擬似的なエッジをフォールスルーするなど）、大きすぎ、等価なコンテクストセンシティブなスライスよりはるかに大きいスライスセットを提供する。大きなスライスサイズは、自動的なパラレル化の効果に悪影響を与える。
【０００５】
コンテクストセンシティブなスライス処理はまた問題となる可能性がある。このようなスライス処理は、ＰＤＧを計算することによってコンテクストセンシティブなスライスを計算し、その後にシステム依存性グラフ（ＳＤＧ）をもたらすアノテーションを加えることによって修正することを要求する。修正された２段階のグラフ到達可能性解析は、コンテクストセンシティブなスライスを計算するためＳＤＧ上で利用されてもよい。しかしながら、ＳＤＧアプローチは、ターゲットプログラムが構成され、全体的なプログラムコールグラフと基礎となるパラメータパス方法とが知られていることを仮定しているため、ソースコードと反対にバイナリプログラムに適用することは困難である。構成されるプログラムは、実行可能なステートメントがプログラムプロシージャ内に設けられ、プロシージャが既知のコール及びリターンセマンティックを有するように、明確に規定された構造を有するプログラムである。バイナリプログラムとバイナリストリームとは、しばしばこの構成の仮定に違反することがある。例えば、バイナリプログラムは、ソースレベルの抽象化に関連しない複雑な制御フローを有すると共に、ステートメントを一度に複数のプロシージャに所属させる重複したプロシージャを有してもよい。
【０００６】
図１（ａ）は、“ｓｑｕａｒｅ”ファンクションがステートメント２及び５において２回呼び出されるサンプルとなるプログラムソースコードを示す。関連するＰＤＧが、図１（ｂ）に示される。コンテクスト非センシティブなスライス処理によると、ステートメント３のスライスは１，２，３，４，５，７，８を含み、ステートメント６のスライスは１，２，４，５，６，７，８を含む。しかしながら、ステートメント３は、４及び５に必ずしも依存する必要はない。４及び５は３の後に実行されるためである。ステートメント６は、１及び２に必ずしも依存する必要はない。１及び２により計算される値は、ステートメント６に到達する前に４によって関連性が低いもの又は無関係なものとされる。この例は、従来のスライス処理技術の各種問題点を示す。
【図面の簡単な説明】
【０００７】
添付した図面は、本発明の説明と共に、本発明の各種実施例を説明する。
【図１】図１は、従来のスライス処理方法のブロック図である。
【図２】図２は、本発明の一実施例のスライス処理方法のブロック図である。
【図３】図３は、本発明の一実施例のスライス処理方法のブロック図である。
【図４】図４は、本発明の一実施例のスライス処理方法の擬似コードを含む。
【図５】図５は、本発明の一実施例により利用されるシステムのブロック図である。
【発明を実施するための形態】
【０００８】
以下の説明では、多数の具体的な詳細が与えられる。しかしながら、本発明の実施例はこれらの具体的な詳細なしに実現されてもよいことが理解される。他の例では、周知の回路、構成及び技術は、本開示の理解を不明りょうにしないように詳細には示されない。“一実施例”、“実施例”、“一例となる実施例”、“各種実施例”などの表現は、開示された本発明の実施例が特定の特徴、構成又は特性を含むものであってもよいが、必ずしもすべての実施例が当該特徴、構成又は特性を有する必要がないことを示す。さらに、いくつかの実施例は、他の実施例について開示される特徴の一部又はすべてを有してもよいし、又は何れの特徴を有しなくてもよい。また、特段の断りがない場合、ここで用いられる共通のオブジェクトを示すための序数の修飾語“第１”、“第２”、“第３”などの利用は、同様のオブジェクトの異なるインスタンスが参照されていることを示すだけであり、開示されたオブジェクトが時間的に、空間的に、ランキングにおいて又は他の何れかの方法により所与の順序にある必要があることを意味することは意図されない。
【０００９】
本発明の一実施例では、コンテクストセンシティブアルゴリズム又はメソッドは、以前のスライス処理方法に対して向上させうる。例えば、図２（ａ）は、図１（ａ）に示されるものと同じコードを含む。しかしながら、図１（ｂ）に示されるスライスを生じさせるコードのコンテクスト非センシティブな処理と異なって、向上されるコンテクストセンシティブメソッドの実施例は、図２（ｂ）及び（ｃ）にそれぞれ示される２つのスライスを求める。図１（ｂ）の大きく厄介な単一のスライスと異なって、図２（ｂ）及び（ｃ）の２つのスライスがまた独立してパラレルに、しかしながら、低減されたスライスのサイズなどによる従来のメソッドに対する効率性の増加によって実行可能である。
【００１０】
従って、本発明の実施例は、バイナリが導出されるプログラムに関するいくつかの基礎となる仮定と共に、実行時に特定されるホット領域をスライス処理するためのバイナリプログラムのコンテクストセンシティブなスライス処理を提供するのに利用可能なプログラム解析技術を含む。本発明の実施例は、プログラム凝集度とパラレル化の指標としてプログラムのスライス処理に依拠するバイナリベースのプロダクトに値を提供する。このような値は、例えば、実行時のシーケンシャルなシングルスレッド化された実行のための自動的なパラレル化を向上させるためのスライス処理ベースのパラレル化インフラストラクチャなどのために提供されてもよい。さらに、本発明の実施例は、評価されたプログラムの構成に関するいくつかの仮定をしてもよいし、仮定をしなくてもよい。特定の実施例は、シンボル又はデバッグ情報などの補助的なメタデータを要求してもよい。また、実施例は、従来のプログラムバイナリだけでなく、実行時に形成されるマイクロオペレーション（ｍｉｃｒｏ−ｏｐ）トレースやスレッドなどの他の実行可能なシーケンスにも適用可能であってもよい。ｍｉｃｒｏ−ｏｐトレースは、複雑なマシーン命令を実現するのに用いられる詳細な低レベル命令を含むものであってもよい。従って、本発明の実施例は、任意的なバイナリストリームに対して機能し、動的な最適化システムと仮想化フレームワークとの双方にコンテクストセンシティブなスライス処理の効果をもたらす技術を提供する。
【００１１】
より詳細には、本発明の実施例は、プログラムフローグラフ（ＣＦＧ）をトラバースするためのデータフロー情報と共に、ＣＦＧへのフォールスルー擬似的エッジの導入とを含むものであってもよい。プログラムのＣＦＧは、プログラムステートメントに対応するノードと、制御フローに対応するエッジとを有するグラフを有してもよい。上述されるように、ＰＤＧは、ノードがプログラムステートメントであるが、エッジがステートメント間の制御及びデータ依存性を表すグラフを含むものであってもよい。本発明の各種実施例では、このようなＣＦＧのトラバースは、プログラムプロシージャの構造とコールグラフの関係との明示的な理解を求めることなく、プログラムコンテクストの効果を非明示的に決定することを可能にするものであってもよい。本発明の実施例に関するより多くの詳細が後述される。
【００１２】
本発明の一実施例では、スライス処理の開始前に各種仮定がされる。例えば、１つの仮定は、ターゲットとなるバイナリホット領域についてＣＦＧが存在することであってもよい。他の可能な仮定は、データ依存性情報（利用／定義情報など）が、ＣＦＧにおけるノード間と共に、制御依存性関係との間で利用可能であるということである。これらの仮定の一部又はすべてを充足するための基礎は、プログラム実行中に収集されるプロファイルから導出される情報により構成されてもよい。
【００１３】
スライス処理の開始前に、前処理がまた実行されてもよい。本発明の一実施例では、方法の最初のステップは、ＣＦＧを前処理し、３つのタイプ、すなわち、コール、リターン又は通常の制御フローの１つとして各種エッジをラベル付けすることである。この前処理段階では、フォールスルー擬似エッジがまた特定されてもよい。前処理段階は、ＣＦＧが最初に生成されるときに実行されてもよい。しかしながら、簡単化のため、当該段階は別の段階としてここでは提供される。
【００１４】
図３において、この前処理の結果が示される。図３（ａ）は、再び図１（ａ）及び２（ａ）に示されるものと同じ例示的なコードを含む。しかしながら、図３（ｂ）は、以下の前処理ステップの実行後に図３（ａ）のサンプルプログラムのＣＦＧを含む。具体的には、本発明の一実施例では、前処理は以下のように実行されてもよい。まず、プロシージャコール命令３０５，３１０又は等価的なアクションを表すすべてのノードを決定するため、ＣＦＧが探索される。このような等価的なアクションの可能な具体例は、兄弟関係のコールーチンを生じさせる例外起動機構と、制御の変更に加えて新たなコンテクストを規定する制御フローのおそらく他の移行とを含む。これらのノードのそれぞれについて、ノードの出力エッジは、コールエッジ３１５，３２０としてマーク付けされてもよく、当該命令の直前（動的な実行順序でなく、プログラムバイナリの順序による）の命令を表すボートとのリンクが生成される。これらのリンクは、フォールスルー擬似エッジ３２５，３３０としてマーク付けされてもよい。フォールスルー擬似エッジは、以降のあるポイントにおける進行命令に戻る“コール命令”を示す。また、プロシージャリターン命令３３５又は等価的なアクションを表す一部の又はすべてのノードを決定するため、ＣＦＧが探索される。このような等価的なアクションの具体例は、兄弟関係のコールーチンを生じさせる例外ブロックからのリターン、又は制御フローの変更に加えてコンテクストをクローズすることが知られている制御フローの移行を含むものであってもよい。これらのノードのそれぞれについて、ノードの出力エッジ３４０，３４５は、リターンエッジとしてマーク付けされてもよい。
【００１５】
図３（ｃ）において修正されたＣＦＧ３００が与えられると、本発明の実施例は、所望のスライス基準ノード（ノード６など）においてトラバースを開始し、バックワードスライスを計算する。ＣＦＧのリターンエッジ３４０，３４５が観察される。本方法の実施例は、リターンエッジ３４０，３４５をトラバースし、リターンエッジ３４５の最後尾の命令６において開始される再帰的なサブスライスを開始する。再帰的なサブスライスは、プログラムのサブコンテクストにおいて概念的に生じるスライス全体の一部を表す。あるエッジは、サブスライスの計算中に当該動作を提供するため無視されてもよい。例えば、再帰的なサブスライスの計算中、本発明の各種実施例は、遭遇した何れかのコールエッジを無視してもよい。本方法のある実施例は、これにより、コールエッジを用いて、コールターゲットをプロシージャルートノードにマッピングするメタデータに基づき再帰的なサブスライスを開始する必要がなくなる。
【００１６】
本発明の実施例はまた、マーク付けされたフォールスルー擬似エッジ３３０，３２５を観察する。リターンサイトにおいてサブスライスを計算した後、本方法は、擬似エッジ３２５，３３０をトラバースし、スライス処理を継続する。
【００１７】
具体的には、図２（ｃ）の前処理されたＣＦＧ３００の詳細なトラバースがここで提供される。当該トラバースは、バックワードスライス処理方法の実施例のトラバース順序を示す番号により注釈付けされる。ノード６において開始されるバックワードスライスを計算するため、以下のステップが実行される。ここで、ｆｌｏｗＩｎ及びｆｌｏｗＯｕｔは、所与の命令ノードのライブイン及びライブアウト集合である。
【００１８】
第１に、ノード６のｆｌｏｗＩｎ集合が｛ｂ｝に設定され、ノード８において開始されるリターンエッジ３４５において再帰的なサブスライスが開始される。第２に、この再帰的起動において、ノード８のｆｌｏｗＩｎ集合が｛ｂ，ａ｝に設定される。ノード８がｂを規定するため、ノード８はスライスに加えられ、ノード８の先行ノード７がワークリストに加えられる。第３に、ノード７のｆｌｏｗＯｕｔが、本例では、｛ｂ，ａ｝のｆｌｏｗＩｎを有するノード８のみであるそれの後続の命令のｆｌｏｗＩｎ集合の和集合に等しくなるよう設定される。ノード７はノード７のｆｌｏｗＯｕｔ集合にリストされるｂを規定しているため、それはスライスに加えられ、それのｆｌｏｗＩｎは｛ａ｝に設定される。ノード７は、先行するものを有さず（コールエッジが無視されるとき）、このため、再帰的なサブスライス計算が終了し、本方法はノード６に戻る。第４に、サブスライス（ノード６，７，８の注釈１〜４を参照）が計算されたため、ノード６は、それのフォールスルー擬似エッジ３３０をトラバースし、スライス処理を継続する。これは、ノード５をワークリストに加えることによって実現される。第５に、ノード５は、｛ａ｝のｆｌｏｗＩｎを有するノード７であるそれの後続ノードのｆｌｏｗＩｎ集合を確認することによって、それのｆｌｏｗＯｕｔ集合を計算する。ノード５は何も規定していないため、それのｆｌｏｗＩｎ集合は、それのｆｌｏｗＯｕｔ集合｛ａ｝に等しい。ノード５は、ノード７へのそれのコールエッジが制御依存性の弱い形式とみなされ、実行可能なスライスを計算する必要があるため、スライス集合に加えられる。第６に、ノード４は、それのｆｌｏｗＯｕｔ集合がノード５のｆｌｏｗＩｎ集合である｛ａ｝となるよう計算する。ノード４は｛ａ｝を規定し、他の何れの値も参照していないため、それのｆｌｏｗＩｎ集合は｛｝となる。ノード４は、それのｆｌｏｗＯｕｔ集合にある｛ａ｝を規定しているため、スライスに加えられる。ノード４はヌルのｆｌｏｗＩｎ集合を有しているため、ノード４は、ワークリストに何れの先行するものも加えない。ワークリストには他の何れもないため、本方法は終了する。第７に、ノード６の計算されたスライスは、図１（ｂ）に示される｛１，２，４，５，６，７，８｝となるスライスより小さな｛６，８，７，５，４｝となる。
【００１９】
本発明の実施例は、従来の方法に対して効率性の同様の向上により、ノード３などの他のノードに同様にして適用可能な方法を有してもよい。
【００２０】
図４は、本発明の一実施例のスライス処理方法の擬似コードを含む。スライス処理のスタートポイントに依存して、本発明の実施例は、スライス処理中に“アンバランス”なリターン及びコールに遭遇する。これは、コール対象のファンクション内などのＣＦＧの最も高いレベルより下位でスライス処理が開始され、コール元のファンクションに到達するときに生じる。この場合、アンバランスなコールエッジをスライスするための方法が必要である。図４において、ラッパファンクションｓｌｉｃｅＢａｃｋｗａｒｄｓが、このようなケースを処理する。例えば、スライス処理のためのスタートポイントがＣＦＧの最も高いレベルにある場合、サブスライスは、当該スタートポイントのためのコンテクストセンシティブなスライス処理を処理するようにしてもよい。しかしながら、スタートポイントがＣＦＧの最も高いレベルにない場合、コール元のファンクション内のスタートポイントからそれのコール先のファンクションへの依存性が存在する（例えば、“アンバランス”なコールエッジなどを介し）。
【００２１】
一実施例では、サブスライスは、スタートポイントからコールは存在するが、マッチしたリターンがない当該アンバランスなコールエッジを処理し、コールエッジをサブスライスの結果として図４のライン１に配置する（ｆｌｏｗＩｎ，コール）。従って、いくつかの実施例では、コールエッジはサブスライスにおいて無視されてもよい。その後、ｓｌｉｃｅＢａｃｋｗａｒｄｓファンクションは、（ｆｌｏｗＩｎ，ｃａｌｌｓ）のためにｓｌｉｃｅＢａｃｋｗａｒｄｓを再び呼ぶことによって、コールエッジを再帰的に処理する。他の実施例では、サブスライスは、処理のためｓｌｉｃｅＢａｃｋｗａｒｄｓを必要とする新たな未決定のデータ依存性を生成する。しかしながら、これらの未決定の依存性は、現在のスタートポイントのスライスに属する。他の実施例では、未決定のデータ依存性のリストが維持され、ｓｌｉｃｅＢａｃｋｗａｒｄｓは、再帰を必要とすることなく未決定の各データ依存性について呼び出される。
【００２２】
さらに明確にするため、擬似コードは、ＣＦＧからの情報を要約するいくつかの予め計算された集合を参照する。しかしながら、本発明の実施例では、等価な情報は、ＣＦＧとノードデータ構造とから直接クエリされてもよい。以下のテーブルは、これらの集合に含まれる情報を要約する。
【００２３】
【表１】
0005551262.tif 000002
本発明の一実施例は、非再帰的なファンクションのコールに着目する。再帰的なファンクションのコールは、ＣＦＧ（コールエッジを除外するが、擬似エッジを含む）ＣＦＧをバックワードトラバースし、リターンエッジを含むサイクルを検出することによって検出可能である。コンテクストセンシティブなスライス処理が実行される前、本方法は、再帰的なコールにより各ＣＦＧを特定し、それに対して通常のコンテクスト非センシティブなスライス処理のみを実行するため、前処理パスを加える。さらに、スライス処理において制御依存性を処理するため、本発明の実施例はまた、各ブランチ命令にｄｅｆを加えることによって、制御依存性の一部又はすべてをデータフローに変換し、前処理パスのブランチ命令に制御依存するすべての命令に利用する。
【００２４】
本発明の他の実施例では、コンテクストセンシティブな方法は、時間制約に反応可能である。例えば、時間制限に達すると、本方法は、例えば、フォールスルー擬似エッジを無視し、コール及びリターンを通常の制御フローエッジとして処理することによって、コンテクスト非センシティブなスライス処理に戻ることが可能である。
【００２５】
実施例は、異なる多数のシステムタイプにより実現されてもよい。図５を参照して、本発明の実施例によるシステムのブロック図が示される。マルチプロセッサシステム５００は、ポイント・ツー・ポイントインターコネクトシステムであり、ポイント・ツー・ポイントインターコネクト５５０を介し接続される第１プロセッサ５７０と第２プロセッサ５８０とを有する。各プロセッサ５７０，５８０は、潜在的にはより多くのコアがプロセッサに存在してもよいが、第１及び第２プロセッサコア（すなわち、プロセッサコア５７４ａ，５７４ｂ及びプロセッサコア５８４ａ，５８４ｂ）を含むマルチコアプロセッサであってもよい。“プロセッサ”という用語は、レジスタ及び／又はメモリからの電子データを、レジスタ及び／又はメモリに格納可能な他の電子データに変換するため、当該電子データを処理する何れかの装置又は装置の一部を表す。
【００２６】
第１プロセッサ５７０はさらに、ＭＣＨ（Ｍｅｍｏｒｙ  Ｃｏｎｔｒｏｌｌｅｒ  Ｈｕｂ）５７２と、Ｐ−Ｐ（Ｐｏｉｎｔ−ｔｏ−Ｐｏｉｎｔ）インタフェース５７６，５７８とを有する。同様に、第２プロセッサ５８０は、ＭＣＨ５８２と、Ｐ−Ｐインタフェース５７６，５７８とを有する。ＭＣＨ５７２，５８２は、各プロセッサにローカルに付属されたメインメモリ（ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）など）の一部であってもよい各自のメモリ、すなわち、メモリ５３２，５３４とプロセッサとを接続する。第１プロセッサ５７０と第２プロセッサ５８０とはそれぞれ、Ｐ−Ｐインターコネクト５５２，５５４を介しチップセット５９０に接続されてもよい。チップセット５９０は、Ｐ−Ｐインタフェース５９４，５９８を有する。
【００２７】
さらに、チップセット５９０は、Ｐ−Ｐインターコネクト５３９によりチップセット５９０をハイパフォーマンスグラフィックエンジン５３８とを接続するためのインタフェース５９２を有する。さらに、チップセット５９０は、インタフェース５９６を介し第１バス５１６に接続される。各種入出力（Ｉ／Ｏ）装置５１４が、第１バス５１６を第２バス５２０に接続するバスブリッジ５１８と共に、第１バス５１６に接続される。例えば、キーボード／マウス５２２、通信装置５２６、及び一実施例ではコード５３０を含むディスクドライブ又は他の大容量記憶装置などのデータ記憶部５２８などを含む各種装置が、第２バス５２０に接続されてもよい。さらに、オーディオＩ／Ｏ５２４が、第２バス５２０に接続されてもよい。
【００２８】
実施例は、コードにより実現され、システムに命令を実行させるようプログラムするのに利用可能な命令を格納した記憶媒体に格納されてもよい。記憶媒体は、限定することなく、フロッピー（登録商標）ディスク、光ディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｋ  Ｒｅａｄ−Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＣＤ−ＲＷ（Ｃｏｍｐａｃｔ  Ｄｉｓｋ  Ｒｅｗｒｉｔａｂｌｅ）、光磁気ディスク、ＲＯＭ（Ｒｅａｄ−Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＤＲＡＭ（Ｄｙｎａｍｉｃ  ＲＡＭ）、ＳＲＡＭ（Ｓｔａｔｉｃ  ＲＡＭ）、ＥＰＲＯＭ（Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）、フラッシュメモリ、ＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  ＥＰＲＯＭ）、磁気若しくは光カード、又は電子命令を格納するのに適した他の何れかのタイプの媒体を含むものであってもよい。
【００２９】
本発明の実施例は、命令、ファンクション、プロシージャ、データ構造、アプリケーションプログラム、コンフィギュレーション設定、コードなどのデータを参照して説明されてもよい。データがマシーンによりアクセスされると、ここでより詳細に説明されるように、マシーンは、タスクを実行し、抽象的なデータタイプを規定し、低レベルハードウェアコンテクストを確定し、及び／又は他の処理を実行することによって応答する。データは、揮発性及び／又は不揮発性データストレージに格納される。この開示のため、“コード”又は“プログラム”は、アプリケーション、ドライバ、プロセス、ルーチン、メソッド、モジュール及びサブプログラムを含む広範なコンポーネント及びコンストラクトをカバーする。さらに、他の実施例は、開示された処理のすべてより少なくしか利用しないプロセス、さらなるプロセスを利用するプロセス、異なるシーケンスで同一の処理を利用するプロセス、及びここに開示された各処理が合成、分割又は変更されるプロセスを含むものであってもよい。
【００３０】
本発明は限定数の実施例に関して説明されたが、当業者は、多数の変更及び変形を理解するであろう。添付した請求項はこのようなすべての変更及び変形を本発明の真の趣旨及び範囲内に属するものとしてカバーすることが意図される。
【図１】
0005551262.tif 000003
【図２】
0005551262.tif 000004
【図３】
0005551262.tif 000005
【図４】
0005551262.tif 000006
【図５】
0005551262.tif 000007