(57)【特許請求の範囲】
【請求項１】
１次プロセッサより前に実行するアシストプロセッサを使用することによってメモリからプリフェッチするための方法であって、
該１次プロセッサで実行可能なコードを実行するステップと、
該アシストプロセッサで実行可能なコードの減少したバージョンを同時に実行するステップであって、該実行可能なコードの減少したバージョンは、該実行可能なコードよりも速く実行し、該実行可能なコードと同じメモリリファレンスのパターンを生成し、それにより該アシストプロセッサは、該１次プロセッサが生成するのと同じメモリリファレンスのパターンを、該１次プロセッサが該メモリリファレンスを生成する以前に生成する、ステップと、
該１次プロセッサと共有された格納装置中に該アシストプロセッサによって生成された該メモリリファレンスの結果を格納するステップであって、それにより該１次プロセッサは、該メモリリファレンスの結果にアクセスし得る、ステップとを包含し、
前記実行可能なコードを実行するより前に実行する工程であって、
前記１次プロセッサのために、ソースコードを１次プロセッサに実行可能なコードにコンパイルする工程と、
該実行可能なコードによって生成されるメモリリファレンスのパターンに影響を及ぼさない命令を該実行可能なコードから削除することによって該１次プロセッサのための実行可能なコードから該アシストプロセッサのための該実行可能なコードの減少したバージョンを作成する工程とをさらに包含する、
方法。
【請求項２】
前記実行可能なコードの減少したバージョンを作成するステップは、
格納命令を対応するロード命令に変換するステップと、
既にロードされたキャッシュラインに向けられた冗長なロード命令を削除するステップと、
該１次プロセッサのための実行可能なコードのアドレスリファレンスパターンを決定するステップにおいてその後使用されない格納値を計算するために使用されるコードを削除するステップとを包含する、請求項１に記載の方法。
【請求項３】
前記実行可能なコードにおいてホットスポットの命令トレースを生成するために該実行可能なコードをプロファイリングするステップをさらに包含し、
該実行可能なコードの減少したバージョンを作成するステップは該実行可能なコードにおいて該ホットスポットの命令トレースを改変することを含む、請求項１に記載の方法。
【請求項４】
前記ソースコードをコンパイルする工程および前記実行可能なコードの減少したバージョンを作成する工程はコンパイラによって実行される、請求項１ないし３のうちいずれか一項に記載の方法。
【請求項５】
前記方法は、プログレスインジケータを一方向のコミュニケーションチャンネルを介して前記１次プロセッサから前記アシストプロセッサへ周期的に送信するステップをさらに包含する、請求項１ないし３のうちいずれか一項に記載の方法。
【請求項６】
１次プロセッサより前に実行するアシストプロセッサを使用することによってメモリからプリフェッチするための方法であって、
該１次プロセッサで実行可能なコードを実行するステップと、
該アシストプロセッサで実行可能なコードの減少したバージョンを同時に実行するステップであって、該実行可能なコードの減少したバージョンは、該実行可能なコードよりも速く実行し、該実行可能なコードと同じメモリリファレンスのパターンを生成し、それにより該アシストプロセッサは、該１次プロセッサが生成するのと同じメモリリファレンスのパターンを、該１次プロセッサが該メモリリファレンスを生成する以前に生成する、ステップと、
該１次プロセッサと共有された格納装置中に該アシストプロセッサによって生成された該メモリリファレンスの結果を格納するステップであって、それにより該１次プロセッサは、該メモリリファレンスの結果にアクセスし得る、ステップとを包含し、
当該方法は、プログレスインジケータを一方向のコミュニケーションチャンネルを介して前記１次プロセッサから前記アシストプロセッサへ周期的に送信するステップをさらに包含し、
前記アシストプロセッサが、前記１次プロセッサより先行するのがある最少命令数未満である場合、該アシストプロセッサの実行を停止するステップをさらに包含する、
方法。
【請求項７】
１次プロセッサより前に実行するアシストプロセッサを使用することによってメモリからプリフェッチするための方法であって、
該１次プロセッサで実行可能なコードを実行するステップと、
該アシストプロセッサで実行可能なコードの減少したバージョンを同時に実行するステップであって、該実行可能なコードの減少したバージョンは、該実行可能なコードよりも速く実行し、該実行可能なコードと同じメモリリファレンスのパターンを生成し、それにより該アシストプロセッサは、該１次プロセッサが生成するのと同じメモリリファレンスのパターンを、該１次プロセッサが該メモリリファレンスを生成する以前に生成する、ステップと、
該１次プロセッサと共有された格納装置中に該アシストプロセッサによって生成された該メモリリファレンスの結果を格納するステップであって、それにより該１次プロセッサは、該メモリリファレンスの結果にアクセスし得る、ステップとを包含し、
前記実行可能なコードの減少したバージョンは、該実行可能なコードの減少したバージョンが該実行可能なコードより速くならないと既に決定されている場合、より頻繁に用いられる分岐パスに沿ってコードを推測的に実行するよう修正される、
方法。
【請求項８】
前記１次プロセッサおよびアシストプロセッサは、同じ半導体チップ上に備わっている、請求項１ないし７のうちいずれか一項に記載の方法。
【請求項９】
前記１次プロセッサおよびアシストプロセッサは、別の半導体チップ上に備わっている、請求項１ないし７のうちいずれか一項に記載の方法。
【請求項１０】
前記アシストプロセッサは、前記１次プロセッサの簡易化されたバージョンであって、アドレス計算を行うために必要がない回路を有さない、請求項１ないし９のうちいずれか一項に記載の方法。
【請求項１１】
命令を格納するコンピュータの読み出し可能な記憶媒体であって、前記命令は、コンピュータにより実行される場合に、該コンピュータに、１次プロセッサより先に実行するアシストプロセッサを使用してメモリからプリフェッチするための方法を実行させるものであり、前記方法は、
該１次プロセッサで実行可能なコードを実行するステップと、
該アシストプロセッサで実行可能なコードの減少したバージョンを同時に実行するステップであって、該実行可能なコードの減少したバージョンは、該実行可能なコードよりも速く実行し、該実行可能なコードと同じメモリリファレンスのパターンを生成し、その結果、該アシストプロセッサは、該１次プロセッサが生成するのと同じメモリリファレンスのパターンを、該１次プロセッサが該メモリリファレンスを生成する以前に生成する、ステップと、
該１次プロセッサと共有された格納装置中に該アシストプロセッサによって生成された該メモリリファレンスの結果を格納するステップであって、それにより該１次プロセッサは、該メモリリファレンスの結果にアクセスし得る、ステップとを包含し、
前記方法がさらに、前記実行可能なコードを実行するより前に実行するステップであって、
前記１次プロセッサのために、ソースコードを該実行可能なコードにコンパイルするステップと、
該実行可能なコードによって生成されるメモリリファレンスのパターンに影響を及ぼさない命令を該１次プロセッサのための該実行可能なコードから削除することによって該１次プロセッサのための実行可能なコードから該アシストプロセッサのための該実行可能なコードの減少したバージョンを作成するステップとをさらに包含する、
コンピュータ読み出し可能な記憶媒体。
【請求項１２】
前記実行可能なコードの減少したバージョンを作成するステップは、
格納命令を対応するロード命令に変換するステップと、
既にロードされたキャッシュラインに向けられた冗長なロード命令を取り除くステップと、
該実行可能なコードのアドレスリファレンスパターンの決定においてその後使用されない格納値を計算するために使用されるコードを削除するステップとを包含する、
請求項１１に記載のコンピュータの読み出し可能な記憶媒体。
【請求項１３】
前記方法がさらに、前記実行可能なコードにおいてホットスポットの命令トレースを生成するために該実行可能なコードをプロファイリングするステップを包含し、
該実行可能なコードの減少したバージョンを作成するステップは、該実行可能なコードにおいて該ホットスポットの命令トレースを改変するステップをさらに包含する、
請求項１１に記載のコンピュータ読み出し可能な記憶媒体。
【請求項１４】
前記方法は、プログレスインジケータを一方向のコミュニケーションチャンネルを介して前記１次プロセッサから前記アシストプロセッサへ周期的に送信するステップをさらに包含する、
請求項１１に記載のコンピュータ読み出し可能な記憶媒体。
【請求項１５】
命令を格納するコンピュータの読み出し可能な記憶媒体であって、前記命令は、コンピュータにより実行される場合に、該コンピュータに、１次プロセッサより先に実行するアシストプロセッサを使用してメモリからプリフェッチするための方法を実行させるものであり、前記方法は、
該１次プロセッサで実行可能なコードを実行するステップと、
該アシストプロセッサで実行可能なコードの減少したバージョンを同時に実行するステップであって、該実行可能なコードの減少したバージョンは、該実行可能なコードよりも速く実行し、該実行可能なコードと同じメモリリファレンスのパターンを生成し、その結果、該アシストプロセッサは、該１次プロセッサが生成するのと同じメモリリファレンスのパターンを、該１次プロセッサが該メモリリファレンスを生成する以前に生成する、ステップと、
該１次プロセッサと共有された格納装置中に該アシストプロセッサによって生成された該メモリリファレンスの結果を格納するステップであって、それにより該１次プロセッサは、該メモリリファレンスの結果にアクセスし得る、ステップとを包含し、
前記実行可能なコードの減少したバージョンが前記実行可能なコードより速くないと決定された場合、前記実行可能なコードの減少したバージョンはより頻繁に用いられる分岐パスにあるコードを推測的に実行するように改変される、
コンピュータの読み出し可能な記憶媒体。
【請求項１６】
メモリからのプリフェッチを容易にする装置であって、
実行可能なコードを実行するように構成される１次プロセッサと、
該実行可能なコードの減少したバージョンを同時に実行するように構成されるアシストプロセッサであって、該実行可能な減少したバージョンは、該実行可能なコードよりも速く実行され、該実行可能なコードと同様のメモリリファレンスパターンを生成し、その結果、該アシストプロセッサは、該１次プロセッサが生成するメモリリファレンスと同様のパターンを、該１次プロセッサが該メモリリファレンスを生成するよりも前に生成する、アシストプロセッサと、
該アシストプロセッサにより生成されるメモリリファレンスの結果を格納するように構成される格納装置とを備え、
該格納装置は、該アシストプロセッサと該１次プロセッサとの間で共有されるように構成され、それにより該１次プロセッサは、該アシストプロセッサによって生成されるメモリリファレンスの結果にアクセスでき、
前記１次プロセッサの実行可能なコードにソースコードをコンパイルするように構成されるコンパイル機構であって、
該実行可能なコードにより生成されたメモリリファレンスのパターンに影響を及ぼさない命令を該実行可能なコードから削除することにより該１次プロセッサのための実行可能なコードから前記アシストプロセッサのための該実行可能なコードの減少したバージョンを作成するように構成されるコンパイル機構をさらに備える、
装置。
【請求項１７】
前記実行可能なコードの減少したバージョンを作成するステップは、
格納命令を対応するロード命令に変換するステップと、
既にロードされたキャッシュラインに向けられた冗長なロード命令を削除するステップと、
該実行可能なコードのアドレスリファレンスパターンの決定においてその後使用されない格納値を計算するために使用されるコードを削除するステップとを包含する、請求項１６に記載の装置。
【請求項１８】
前記コンパイル機構は、前記実行可能なコードのホットスポットの命令トレースを生成するために該実行可能なコードをプロファイリングするようにさらに構成され、
該コンパイル機構は、該実行可能なコードの該ホットスポットの命令トレースを改変することによって該実行可能なコードの前記減少したバージョンを作成する、
請求項１６に記載の装置。
【請求項１９】
プログレスインジケータを前記１次プロセッサから前記アシストプロセッサへ送信するように構成される一方向コミュニケーションチャンネルを含むモニタリング機構をさらに備える、請求項１６に記載の装置。
【請求項２０】
メモリからのプリフェッチを容易にする装置であって、
実行可能なコードを実行するように構成される１次プロセッサと、
該実行可能なコードの減少したバージョンを同時に実行するように構成されるアシストプロセッサであって、該実行可能な減少したバージョンは、該実行可能なコードよりも速く実行され、該実行可能なコードと同様のメモリリファレンスパターンを生成し、その結果、該アシストプロセッサは、該１次プロセッサが生成するメモリリファレンスと同様のパターンを、該１次プロセッサが該メモリリファレンスを生成するよりも前に生成する、アシストプロセッサと、
該アシストプロセッサにより生成されるメモリリファレンスの結果を格納するように構成される格納装置とを備え、
該格納装置は、該アシストプロセッサと該１次プロセッサとの間で共有されるように構成され、それにより該１次プロセッサは、該アシストプロセッサによって生成されるメモリリファレンスの結果にアクセスでき、
プログレスインジケータを前記１次プロセッサから前記アシストプロセッサへ送信するように構成される一方向コミュニケーションチャンネルを含むモニタリング機構をさらに備え、
前記アシストプロセッサが前記１次プロセッサより先行するのがある最少命令数未満である場合、該アシストプロセッサの実行を停止するように構成される停止機構をさらに備える、
装置。
【請求項２１】
メモリからのプリフェッチを容易にする装置であって、
実行可能なコードを実行するように構成される１次プロセッサと、
該実行可能なコードの減少したバージョンを同時に実行するように構成されるアシストプロセッサであって、該実行可能な減少したバージョンは、該実行可能なコードよりも速く実行され、該実行可能なコードと同様のメモリリファレンスパターンを生成し、その結果、該アシストプロセッサは、該１次プロセッサが生成するメモリリファレンスと同様のパターンを、該１次プロセッサが該メモリリファレンスを生成するよりも前に生成する、アシストプロセッサと、
該アシストプロセッサにより生成されるメモリリファレンスの結果を格納するように構成される格納装置とを備え、
該格納装置は、該アシストプロセッサと該１次プロセッサとの間で共有されるように構成され、それにより該１次プロセッサは、該アシストプロセッサによって生成されるメモリリファレンスの結果にアクセスでき、
前記実行可能なコードの減少したバージョンは、前記実行可能なコードの減少したバージョンが前記実行可能なコードより速くないと決定された場合、より頻繁に用いられる分岐パスにあるコードを推測的に実行するように改変される、
装置。
【請求項２２】
前記格納装置は、前記１次プロセッサおよび前記アシストプロセッサによって共有されるデータキャッシュを備える、請求項１６ないし２１のうちいずれか一項に記載の装置。
【請求項２３】
前記格納装置は、前記１次プロセッサおよび前記アシストプロセッサによって共有される命令キャッシュを備える、請求項１６ないし２２のうちいずれか一項に記載の装置。
【請求項２４】
前記格納装置は、前記１次プロセッサおよび前記アシストプロセッサによって共有される分岐履歴表を備える、請求項１６ないし２３のうちいずれか一項に記載の装置。
【請求項２５】
前記１次プロセッサおよび前記アシストプロセッサは、同じ半導体チップ上に備わっている、請求項１６ないし２４のうちいずれか一項に記載の装置。
【請求項２６】
前記１次プロセッサおよび前記アシストプロセッサは、異なる半導体チップ上に備わっている、請求項１６ないし２４のうちいずれか一項に記載の装置。
【請求項２７】
前記アシストプロセッサは、アドレス計算を行うために必要がない回路を有さず、前記１次プロセッサの簡易化されたバージョンである、請求項１６ないし２６のうちいずれか一項に記載の装置。
【発明の詳細な説明】
【０００１】
（背景）
（発明の分野）
本発明は、コンピュータシステム性能を向上させるための技術に関する。さらに詳細には、本発明は、１次プロセッサより前に実行するアシストプロセッサを使用してメモリからデータおよび／または命令をプリフェッチするための方法および装置に関する。
【０００２】
（関連技術）
半導体の集積化密度が増加するにつれて、より多くのトランジスタがマイクロプロセッサチップ上に集積できるようになる。コンピュータ設計者は、これらのトランジスタを用いて異なる方法を研究し、コンピュータシステムの性能を向上させる。この目的のため、コンピュータ設計者は、１つの半導体チップの中に複数の中央演算処理装置（ＣＰＵ）を組み込み始めている。この結果、計算のタスクの性能の利得につながり得る。計算のタスクは、同時に実行され得る分割部分中に並列化（分割）させられ得る。
【０００３】
あいにく、並列化からの性能利得は、コードのシリアル部分を固有に含む多くの用途に関して限定し得る。これらのコードの固有なシリアル部分に関して、性能は、メモリの呼び出し時間の問題によってさらに限定される。
【０００４】
メモリの呼び出し時間の問題は、プロセッサのクロックレートが指数関数的な割合で向上され続けるにつれて徐々に悪くなっている。現在のクロックレートで、メインメモリからキャッシュラインを引き寄せるためには、１００クロックサイクルと同じだけかかり得る。
【０００５】
コンピュータ設計者は、現在、メモリの呼び出し時間を減らすために多くの技術を使用する。（１）非命令順実行は、ロードおよび格納を予定に入れるために使用され得、メモリ呼び出し時間ができる限り隠される。あいにく、非命令順実行は、典型的に、メモリの呼び出し時間の数クロックサイクルを隠すことに限定される。（２）非過失ロード命令は、アドレスが有効でない場合、ミスを引き起こさずにデータ値を推測的にロードするために使用される。（３）ステアリングロード命令は、Ｌ１キャッシュではなく、Ｌ２キャッシュ中にデータ値を推測的にロードするために使用され得る。Ｌ１キャッシュは、未使用のデータ値によって汚されない。あいにく、非過失ロードおよびステアリングロードを使用することは、不必要なロードを招き得る。このことは、命令キャッシュのスペースを浪費し、レジスタを妨げる。（４）何人かの研究者達は、ハードウェアのプリフェッチエンジンを用いることを研究しているが、しかし、このハードウェアのプリフェッチエンジンは、一般に、不規則なメモリアクセスパターンに対して無効である。
【０００６】
必要とされることは、上述の技術を用いて含まれる制限および費用もなく、速いプロセッサシステムにおいてメモリ呼び出し時間による遅延時間を減らす方法および装置である。
【０００７】
（要旨）
本発明の一実施形態は、１次プロセッサより前に実行するアシストプロセッサを用いることによってメモリからプリフェッチするシステムを提供する。このシステムは、１次プロセッサ上で実行可能なコードを実行すること、および、アシストプロセッサ上の実行可能なコードの減少したバージョンを同時に実行することによって操作される。この減少したバージョンは、実行可能なコードよりも速く動作し、実行可能なコードとしてメモリレファレンスの同じパターンを生成する。このことにより、アシストプロセッサは、メモリリファレンスと同じパターンを生成することができる。アシストプロセッサは、１次プロセッサがメモリリファレンスを生成するよりも前にメモリリファレンスと同じパターンを生成する。このシステムは、１次プロセッサと共有される格納においてアシストプロセッサによって生成されるメモリリファレンスの結果を格納し、その結果、１次プロセッサは、メモリリファレンスの結果にアクセスし得る。本発明の一実施形態において、この格納は、キャッシュメモリである。
【０００８】
本発明の一実施形態において、実行可能なコードを実行する前に、このシステムは、１次プロセッサの実行可能なコード中にソースコードをコンパイルする。このシステムはまた、実行可能なコードからの命令を削除することによって１次プロセッサの実行可能なコードからアシストプロセッサに用いる実行可能コードの減少したバージョンを作成する。この実行可能なコードは、実行可能なコードによって生成されたメモリリファレンスのパターン上で無効である。
【０００９】
本発明の一実施形態において、実行可能なコードの減少したバージョンを作成することは、ロード命令を並列化する分割命令に変換することと、事前にロードされたキャッシュラインに命令される冗長なロード命令を削除することと、アドレスのリファレンスパターンを決定することにおいて用いられる格納値を計算するために使用されるコードを削除することとを含む。
【００１０】
本発明の一実施形態において、このシステムは、実行可能なコードをプロファイリングし、実行可能なコードにおいてホットスポットの命令のトレースを作り出し、そして次に、この命令のトレースをフィルタにかけ、実行可能なコードの減少したバージョンを作成する。
【００１１】
本発明の一実施形態において、ソースコードをコンパイルするプロセスおよび実行可能なコードの減少したバージョンを生成するプロセスは、コンパイラによって実行される。
【００１２】
本発明の一実施形態において、このシステムは、一方向コミュニケーションチャンネルを介して、１次プロセッサからアシストプロセッサへプログレスインジケータを送信する。この実施形態の変形において、このシステムは、アシストプロセッサの数が１次プロセッサより前の最少命令数よりも少ない場合、アシストプロセッサの実行を停止する。
【００１３】
本発明の一実施形態において、実行可能なコードの減少したバージョンが、実行可能なコードよりも著しく速くならないように決定される場合、実行可能なコードの減少したバージョンの変更により、より頻繁に取り込まれる分岐パス下でコードを推測的に実行する。
【００１４】
本発明の一実施形態において、この格納は、１次プロセッサおよびアシストプロセッサによって共有されるデータキャッシュを含む。
【００１５】
本発明の一実施形態において、この格納は、１次プロセッサおよびアシストプロセッサによって共有される命令キャッシュを含む。
【００１６】
本発明の一実施形態において、この格納は、１次プロセッサおよびアシストプロセッサによって共有されるブランチ履歴表を含む。
【００１７】
本発明の一実施形態において、１次プロセッサおよびアシストプロセッサは、同じ半導体チップ上に備わっている。
【００１８】
本発明の一実施形態において、１次プロセッサおよびアシストプロセッサは、異なる半導体チップ上に備わっている。
【００１９】
（詳細な説明）
次の説明は、当業者が本発明を実施し、使用することができるように提供され、特定の出願の文脈中およびその要求において提供される。開示された実施形態への多様な変更は、当業者に対して容易に明らかであり、明細書中に定義される全ての原理は、本発明の精神および範囲から逸脱することなく他の実施形態および他の用途に使用されてもよい。従って、本発明は、示される実施形態に限定されることを意図されず、開示された明細書中の原理および特徴と整合性が取れた最も広範な範囲と一致されることである。
【００２０】
この詳細な説明に記載されるデータの構造およびコードは、一般に、コンピュータの読み込み可能記憶媒体に格納される。コンピュータの読み込み可能記憶媒体は、コンピュータシステムによって使用を目的としたコードおよび／またはデータを格納できる任意のデバイスまたは媒体であってもよい。これは、限定されないが、例えばディスクドライブ、磁気テープ、ＣＤ（コンパクトディスク）およびＤＶＤ（デジタルビデオディスク）といった磁気保存デバイスおよび光学式保存デバイス、ならびに、伝送メディア（信号が変調される搬送波を用いるか、または、用いない伝送デバイス）で具体化されるコンピュータ命令信号を含む。例えば、この伝送メディアは、例えばインターネットといったコミュニケーションネットワークを含んでもよい。
【００２１】
（コンピュータシステム）
図１は、本発明の実施形態によるコンピュータシステムを示す、このコンピュータシステムは、１次プロセッサ１０２とアシストプロセッサ１０４とを含み、共通のデータキャッシュ１０６を共有する。これらのすべての構造は、シリコンダイ１００上に備わってある（しかし、本発明の他の実施形態において、全ての構造は複数のシリコンダイ上に備わっていてもよい）。プロセッサ１１２および１０４は、概して、任意のタイプの計算デバイスを含み得ることに留意されたい。
【００２２】
プロセッサ１０２および１０４は、それぞれ命令キャッシュ１１２および１２０を含み、プロセッサ１０２および１０４によって実行される命令を含む。
【００２３】
プロセッサ１０２および１０４は、ロードバッファ１１４および１２２と、データキャッシュ１０６とのコミュニケーションのバッファリングに関する格納バッファ１１６および１２４を含む。より詳細には、１次プロセッサ１０２は、データキャッシュ１０６から受信したロードをバッファリングするためのロードバッファ１１４、および、データキャッシュ１０６へのデータを格納をバッファリングするための格納バッファ１１６を含む。同様にアシストプロセッサ１０４は、データキャッシュ１０６から受信したロードをバッファリングするためのロードバッファ１２２、および、データキャッシュ１０６へのデータを格納をバッファリングするための格納バッファ１２４を含む。
【００２４】
プロセッサ１０２および１０４は、一方向コミュニケーションチャンネル１２８−１２９によってさらに共につながっており、これは１次プロセッサ１０２とアシストプロセッサ１０４との間の高速コミュニケーションを容易にする。コミュニケーションチャンネル１２８により、１次プロセッサ１０２は、アシストプロセッサ１０４内のレジスタ１２６中に書き込むことができること、および、このコミュニケーションチャンネル１２９により、アシストプロセッサ１０４は、１次プロセッサ１０２内のレジスタ１２７中に書き込むことができることに留意されたい。
【００２５】
共有されたメモリコミュニケーションメカニズムを使用するのとは異なり、レジスタ１２６（または１２７）中に書き込むことは、キャッシュミスを起こさない。さらに、１次プロセッサ１０２は、アシストプロセッサ１０４がコミュニケーションを受信するまで待つ必要がない。１次プロセッサ１０２が、メモリを介してアシストプロセッサ１０４と通信した場合、このようなシステムは、通信するために格納バッファ１１６が消去されるまで待つ必要があった。
【００２６】
図１に図示される実施形態において、データキャッシュ１０６は、完全にデュアルポート機能であり、それによって、プロセッサ１０２および１０４からの同時の読み出しアクセスおよび／または書き込みアクセスを可能にする。このデュアルポート化は、コヒーレントキャッシュに依存する従来の共有メモリアーキテクチャと関連したキャッシュコヒーレンス遅延時間を削除する。
【００２７】
本発明の一実施形態において、データキャッシュ１０６は、３２バイトキャッシュラインと関連した１６Ｋバイト、４方向のデータキャッシュである。
【００２８】
データキャッシュ１０６、命令キャッシュ１１２および命令キャッシュ１２０は、スイッチ１１０を介してメモリコントローラ１１１に連結される。メモリコントローラ１１１は、チップから離れて置かれた動的ランダムアクセスメモリ（ＤＲＡＭ）１０８に連結される。スイッチ１１０は、信号ラインをスイッチするために任意のタイプの回路部を含み得る。本発明の一実施形態において、スイッチ１１０は、クロスバースイッチである
ＤＲＡＭ１０８は、１次プロセッサ１０２の実行可能なコード１３０を含む。システム動作の間に、実行可能なコード１３０は、１次プロセッサ１０２の命令キャッシュ１１２中にメモリコントローラ１１１およびスイッチ１１０を介してロードされる。ＤＲＡＭ１０８はまた、アシストプロセッサ１０４に対する減少した実行可能なコード１３２を含む。減少した実行可能なコード１３２は、実行可能なコード１３０の減少したバージョンである。これは、実行可能なコード１３０のようなメモリリファレンスの同じパターンを生成する。システム動作の間に、減少した実行可能なコード１３２は、アシストプロセッサ１０４の命令キャッシュ１２０中にメモリコントローラ１１１およびスイッチ１１０を介してロードされる。ＤＲＡＭ１０８は、さらに、メモリコントローラ１１１およびスイッチ１１０を介して、データキャッシュ１０６へおよびデータキャッシュ１０６から移動されるデータ１３４を含む。
【００２９】
本発明は、複数のプロセッサを含む任意のコンピュータで使用され得ること、図示されたコンピュータのシステム構造に限定されないことに留意されたい。
【００３０】
本発明の一実施形態において、アシストプロセッサ１０４を使用して、データが１次プロセッサ１０２で使用されるよりも前にデータにアクセスすることに留意されたい。この実施形態において、アシストプロセッサ１０４は、プログラムで特定される計算を実際に行う必要がないことに留意されたい。アシストプロセッサ１０４は、アシスタントプロセッサ１０４がプログラムのメモリアクセスパターンを決定するために十分な計算を実行する必要があるだけである。従って、アシストプロセッサ１０４は、例えば、演算回路のようにアドレス計算を行うことを必要としない回路部なしで、１次のプロセッサ１０４のかなり単純なバージョンになり得る。
【００３１】
（コンパイルプロセス）
図２は、本発明の実施形態に関するコンパイルプロセスを示す。コンパイルプロセスの間に、コンパイラ２０４を介してソースコード２０２を供給し、１次プロセッサ１０２の実行可能なコード１３０を生成する。次に、リダクションモジュール２０８を介して実行可能なコード１３０を供給し、アシストプロセッサ１０４に対する減少した実行可能なコード１３２を生成する。リダクションモジュール２０８は、コンパイラ２０４の一部になり得、またそうでないならば、コンパイラ２０４から分離され得る。
【００３２】
本発明の一実施形態において、コンパイルプロセスおよび減少プロセスは、実行時間以前に起こり得る。別の実施形態において、コンパイルプロセスおよび減少プロセスは、プログラムが実行されている間、実行時間の間に起こり得る。
【００３３】
（減少した実行可能なコードの生成）
図３は、本発明の実施形態に関するリダクションモジュール２０８内の減少した実行可能なコード１３２を生成するプロセスを示すフローチャートである。このシステムは、ロード時間が遅れを引き起こすホットスポットを認識する実行可能なコード１３０のプロファイル（実行をシミュレートすること）によって始まる（工程３０２）。次に、このシステムは、実行可能なコード１３０のホットスポットの命令のトレースを形成する（工程３０４）。本発明の一実施形態において、システムは、それぞれ約２０００の命令が分散した約１００のトレースを作成する。次にこのシステムは、ソースコードに戻ってこのトレースとの相関をとる（工程３０５）。
【００３４】
次に、システムは、３つのタイプにトレースを分類する（工程３０６）。１のトレースのタイプにおいて、アドレスストリームは、ロードされたデータに依存しない。例えば、コードフラグメント下のデータリファレンスのパターンは、ロードされたデータの値に依存しない。
【００３５】
ｆｏｒ（ｉ＝０；ｉ＜１００；ｉ＋＋）｛
ｒｎｄ＝ｇｅｎｅｒａｔｅＲａｎｄｏｍｉｎｔ（）；
ｉｎｄｅｘ１＝ｆｕｎｃｔｉｏｎ１（ｒｎｄ）
ｉｎｄｅｘ２＝ｆｕｎｃｔｉｏｎ２（ｒｎｄ）
Ｂ〔ｉｎｄｅｘ１〕＾＝Ａ〔ｉｎｄｅｘ２〕；
｝
２のトレースのタイプにおいて、ロードされたデータ値は、次のアドレスではなく、制御フローにのみ影響がある。言い換えると、ロードが起きれば、次のアドレスになり得る。しかし、制御フローの変化のために、ロードは生じないかもしれない。例えば、コードフラグメント下において、ハッシュテーブルエントリが検出されると、変数の「検出される」はＩに設定される。言い換えると、変数の「検出される」は、変更されない。
【００３６】
ｗｈｉｌｅ（ｈａｓｈＴａｂｌｅ［Ｉ］＞０）｛
ｉｆ（ｈａｓｈＴａｂｌｅ［Ｉ］＝＝ｅｎｔｒｙ）｛
ｆｏｕｎｄ＝Ｉ；ｂｒｅａｋ；
｝
Ｉ−＝ｄｉｓｐ；
ｉｆ（Ｉ＜０）Ｉ＋＝ｈａｓｈＴａｂｌｅＳｉｚｅ；
｝
３のタイプのトレースにおいて、ロードされる値は、次のアドレスおよび制御フローの両方ともに影響する。例えば、リンクされるリスト下を検索するコードの断片は、リンクされたリストノードからロードされたポインター値が、リンクされたリストにおいて次のノードのアドレスを決定するために、３つのタイプのトレースがある。
【００３７】
次に、このシステムは、トレースによって生成されるメモリリファレンスのパターンを保持する間に、トレースを改変し、トレースにある命令の数を減少させる。そうすることで、このシステムは、ライブ変数をレジスタに格納することを想定する。最初の工程は、格納のステップをロードのステップに変更することである（工程３０８）。格納命令の直後の影響は、対象キャッシュラインをデータキャッシュ１０６に引き込むことであり、このことは、ロード命令の影響と同じであることに留意されたい。従って、格納命令の代わりにロード命令を用いる工程は、プログラムのメモリリファレンスパターンに影響を及ぼさない。
【００３８】
このことは、どのロード命令が同じキャッシュラインに向けられるかを決定すること、および、事前ロード命令によって事前にロードされたキャッシュラインに向けられた任意のロード命令を取り除くことを包含する。
【００３９】
第３の工程は、無効なコードを削除することである（工程３１２）。この無効なコードは、ロード命令に変換された格納命令の値を生成するためのコードを含む。例えば、分岐した異なるサイドのコードは、普通、異なる計算を行うが、同じアドレスストリームを生成する。この場合において、格納がロードに変わると、この分岐は必要にされずに（そしてまた、この比較が分岐状況を設定しない）、この分岐の一サイドのコードのみが減少した実行可能なコード１３２に含まれる。
【００４０】
３つのトレースタイプに関して、後に続くアドレス計算に影響を与える値を格納する格納命令は、変化されない。これらの値は、システムが後に続くアドレス計算に続くことが可能であるように計算され、レジスタに格納される。
【００４１】
次に、このシステムは、異なるタイプのトレースに関して異なる動作を行う。タイプ１のトレースまたはタイプ２のトレースに関して、このシステムは、減少した実行可能なコード１３２がロード命令中にキャッシュミスのみに直面するこを想定し、実行可能なコード１３０がキャッシュヒットのみに直面することを想定して、減少した実行可能コード１３２が元の実行可能なコード１３０よりも速いかどうかを計算する（工程３１６）。減少した実行可能なコード１３２がより速い場合、このプロセスは、完全である。他の場合、このシステムは、ファイリングプロセスの間に決定されたままであるような分岐パスを最も頻繁に得られる方向でバイアスと共にコントロールフロー命令（例えば、分岐）を除去する（工程３１８）。そうすることで、減少した実行可能なコード１３２は、条件的な分岐命令の結果を効果的に予測し、より速いスピードを得る。
【００４２】
３つのタイプのトレースに関して、このシステムは、アシストプロセッサ１０４が、１次プロセッサより先の最少命令数より少ない場合、および、トレースを実行することから回避するような場合を検出できる実行可能なコード１３０および減少した実行可能なコード１３２の両方にコードを加える（工程３２０）。１次プロセッサ１０２からアシストプロセッサ１０４へのコミュニケーションは、一方向のコミュニケーションチャンネル１２８を介して生じることに留意されたい。
【００４３】
（並行実行）
図４は、本発明の実施形態に関して、実行可能なコード１３０および減少した実行可能なコード１３２を同時に実行するプロセスを示すフローチャート図である。このシステムは、１次プロセッサ１０２において実行可能なコード１３０を実行することによってスタートする（工程４０２）。このシステムはまた、アシストプロセッサ１０４において減少した実行可能なコード１３２を同時に実行する（工程４０４）。アシストプロセッサ１０４によって生成されるメモリリファレンスの結果がメモリから戻ると、メモリリファレンスは、１次プロセッサ１０２と共有のデータキャッシュ１０６に格納される（工程４０６）。これにより、１次プロセッサ１０２は、ＤＲＡＭ１０８からフェッチされるデータ値を待つ必要もなくデータキャッシュ１０６からプリフェッチされるデータ値を参照できる。
【００４４】
（アシストプロセッサの操作）
図５は、本発明の実施形態に関して、アシストプロセッサ１０４のより詳細な操作を示すフローチャートである。アシストプロセッサ１０４は、１次プロセッサ１０２からの割り込みを最初に受信する（工程５０２）。これにより、アシストプロセッサ１０４は、共有のレジスタ値を調査し、どのレースを実行するかを決定する（工程５０４）。これは、１次プロセッサは、共有のレジスタにトレース識別子を書き込み、次に、割り込みをアシストプロセッサ１０４に送信することを暗示的に仮定している。１次プロセッサ１０２は、実行可能コード１３０の全ての効果のある値が既知であり、１次プロセッサ１０２のレジスタ中にロードされると直ぐにアシストプロセッサ１０４に割り込みを送信することを試みる。本発明の一実施形態において、このシステム内部のコンパイラは、コードを動かし、できる限り高速で有効値を方々に計算する。
【００４５】
割り込みを受信した後、アシストプロセッサ１０４は、指示されるトレースを実行する（工程５０６）。
【００４６】
トレースの実行中、アシストプロセッサ１０４は、１次プロセッサ１０２のどれほど前方にあるかを把握する（工程５０８）。これは、１次プロセッサ１０２が、プログレスインジケータをコミュニケーションチャンネル１２８を介してアシストプロセッサ１０４に周期的に送信することにより達成される。
【００４７】
アシストプロセッサ１０４が、タイプ３のトレース中、１次プロセッサ１０２の前の最少命令数でない場合、アシストプロセッサ１０４は、トレースから撤退し、１次プロセッサ１０２が、別のトレースを特定することを待つ（工程５１０）。いくつかの場合、このことにより、アシストプロセッサ１０４は、１次プロセッサ１０２が前のトレースを完了するより前に次のトレースを実行し始めることができる。
【００４８】
本発明は、共有のデータキャッシュ１０６について記載されているが、本発明は、一般に、プロセッサがメモリからフェッチされた共有情報を有するという任意のタイプのシステムに適応され得るということに留意されたい。本発明の一実施形態において、プロセッサ１０２および１０４は、命令キャッシュを共有する。別の実施形態において、プロセッサ１０２および１０４は、分岐履歴表を共有する。
【００４９】
本特許出願において使用される「共有されたキャッシュ」という語は、プロセッサ１０２および１０４が同じデータのミラーされたコピーを含む別のローカルキャッシュを含むシステムに言及し得る。この場合、メモリからアシストプロセッサ１０４のローカルキャッシュへのロードは、１次プロセッサ１０２のローカルキャッシュに対応するロードを生じる。
【００５０】
本発明の実施形態における前述の説明は、図および説明のみの目的のために提供される。この説明は、網羅すること、または、本発明を開示された形態に制限することを意図しない。従って、多くの改変および変更が当業者に対して明らかである。従って、上記の開示は、本発明を限定することを意図しない。本発明の範囲は、上述の特許請求の範囲によって定義される。
【図面の簡単な説明】
【図１】  図１は、本発明の実施形態によるコンピュータシステムを示す。
【図２】  図２は、本発明の実施形態によるコンパイルプロセスを示す。
【図３】  図３は、本発明の実施形態による実行可能なコードの減少したバージョンを生成するプロセスを示すフローチャートである。
【図４】  図４は、本発明の実施形態による実行可能なコードおよび減少した実行可能コードを同時に実行するプロセスを示すフローチャートである。
【図５】  図５は、本発明の実施形態によるアシストプロセッサの操作を示すフローチャートである。
【図１】
0004766816.tif 000002
【図２】
0004766816.tif 000003
【図３】
0004766816.tif 000004
【図４】
0004766816.tif 000005
【図５】
0004766816.tif 000006