(57)【要約】【課題】ソフトウェアアプリケーションのストライドプロファイリングのための方法および装置を提供する。【解決手段】システムの一例では、データキャッシュミスなど何らかのイベントにより起きたメモリアクセス命令に関連する命令アドレスとデータアドレスとを報告するためにハードウェアパフォーマンスカウンタを使用する。同じ命令アドレスが２つ以上のデータアドレスに関連するとき、２つのデータアドレス間の差が報告される。同じ命令に対しそれら２つ以上のデータアドレス差が記録されると、システムは、２つ以上の差の最大公約数となる命令に関連するストライドを決定する。このストライドは、データキャッシュプリフェッチを最適化するため、コンパイラによって使用されることもできる。さらに、検査位相とスキッピング位相とを繰り返すことにより、データキャッシュミスのアドレスを監視することに伴うオーバーヘッドも減らすことができる。データキャッシュミスは、スキッピング位相の間より検査位相の間で多く見つかる。
2006524375.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアアプリケーションのストライドプロファイリング方法であって、
第１の命令アドレスと第１のデータアドレスと示すデータをハードウェアパフォーマンスカウンタから受信するステップと、
第２の命令アドレスと第２のデータアドレスと示すデータを前記ハードウェアパフォーマンスカウンタから受信するステップと、
前記第１の命令アドレスが前記第２の命令アドレスと等しい場合、前記第２のデータアドレスから前記第１のデータアドレスを引くことにより、第１のストライド積を決定するステップと、
前記第１のストライド積に基づき、ストライドを決定するステップと、
を含む方法。
【請求項２】
前記方法は、
前記第１のストライド積に基づき、ストライドを決定する方法が、該ストライドは前記第１のストライド積に等しいことを決定するステップを含むことを特徴とする、請求項１に記載の方法。
【請求項３】
前記方法は、
第３の命令アドレスと第３のデータアドレスと示すデータをハードウェアパフォーマンスカウンタから受信するステップと、
前記第２の命令アドレスが前記第３の命令アドレスと等しい場合、前記第３のデータアドレスから前記第２のデータアドレスを引くことにより、前記第２のストライド積を決定するステップと、
をさらに含むことを特徴とする、請求項１に記載の方法。
【請求項４】
前記方法は、
前記第１のストライド積に基づき、前記ストライドを決定するステップが、前記第１のストライド積と前記第２のストライド積との最大公約数を決定するステップを含むことを特徴とする、
請求項３に記載の方法。
【請求項５】
前記方法は、
前記第１の命令アドレスと第１のデータアドレスとを示すデータをハードウェアパフォーマンスカウンタから受信するステップが、前記第１の命令アドレスと前記第１のデータアドレスとを第１の複数の連続データキャッシュミスを示す第１のデータセット部分として受信するステップを含むことを特徴とする、請求項３に記載の方法。
【請求項６】
前記方法は、
前記第１の複数の連続データキャッシュミスを示す前記第１のデータセットを受信するステップと、
第２の複数の連続データキャッシュミスを示す第２のデータセットを受信するステップと、を含み、
前記第１のデータセットを受信するステップと、前記第２のデータセットを受信するステップとは、連続データキャッシュミスを示すデータが受信されない予め決められた期間だけ間隔が空いていることを特徴とする、請求項５に記載の方法。
【請求項７】
前記方法は、
前記ハードウェアパフォーマンスカウンタから、第３の命令アドレスと第３のデータアドレスとを示すデータを受信するステップと、
前記ハードウェアパフォーマンスカウンタから、第４の命令アドレスと第４のデータアドレスとを示すデータを受信するステップと、
前記第１の命令アドレスが前記第３の命令アドレスおよび前記第４の命令アドレスと等しい場合、前記第４のデータアドレスから前記第３のデータアドレスを引くことにより、第２のストライド積を決定するステップと、
をさらに含む方法ことを特徴とする、請求項１に記載の方法。
【請求項８】
前記方法は、
前記第１のストライド積に基づき前記ストライドを決定するステップが、前記第１のストライド積と前記第２のストライド積との最大公約数を決定するステップを含むことを特徴とする、請求項７に記載の方法。
【請求項９】
前記方法は、
前記第１の命令アドレスと第１のデータアドレスとを示すデータをハードウェアパフォーマンスカウンタから受信するステップが、前記第１の命令アドレスと前記第１のデータアドレスとを複数の連続データキャッシュミスを示す第１のデータセット部分として受信するステップを含むことを特徴とする、請求項１に記載の方法。
【請求項１０】
前記方法は、
前記ハードウェアパフォーマンスカウンタを一連の周期的バーストでサンプリングするステップをさらに含むことを特徴とする、
請求項１に記載の方法。
【請求項１１】
ソフトウェアアプリケーションをプロファイリングするための装置であって、
前記ソフトウェアアプリケーションと、プロファイリングツールとを実行するプロセッサと、
前記プロセッサに有効に結合され、第１の命令アドレスと、該第１の命令アドレスに関連する第１のデータアドレスと、第２の命令アドレスと、該第２の命令アドレスに関連する第２のデータアドレスとを示すデータを前記プロファイリングツールに提供するハードウェアパフォーマンスカウンタと、を含み、
前記プロファイリングツールは、前記第１の命令アドレスが前記第２の命令アドレスと等しい場合、前記第１のデータアドレスと前記第２のデータアドレスとの間の差に基づき、ストライドを決定することを特徴とする装置。
【請求項１２】
前記装置は、
前記ハードウェアパフォーマンスカウンタにより前記プロファイリングツールに提供されたデータが、第３の命令アドレスと、該第３の命令アドレスに関連する第３のデータアドレスとをさらに含み、
前記第１の命令アドレスが前記第２の命令アドレスと等しい場合、前記プロファイリングツールは、前記第２のデータアドレスから前記第１のデータアドレスを引くことにより、第１のストライド積を決定し、
前記第２の命令アドレスが前記第３の命令アドレスと等しい場合、前記プロファイリングツールは、前記第３のデータアドレスから前記第２のデータアドレスを引くことにより、第２のストライド積を決定し、
前記プロファイリングツールは、前記第１のストライド積と前記第２のストライド積とに基づき、前記ストライドを決定することを特徴とする、請求項１１に記載の装置。
【請求項１３】
前記装置は、
前記第１のストライド積と前記第２のストライド積との最大公約数を決定することにより、前記プロファイリングツールは、前記ストライドを決定することを特徴とする、請求項１２に記載の装置。
【請求項１４】
前記装置は、
前記ソフトウェアアプリケーションを実行する間に第１のデータキャッシュミスが発生した場合、前記ハードウェアパフォーマンスカウンタが、前記第１の命令アドレスと前記第１のデータアドレスとを示すデータを前記プロファイリングツールに提供することを特徴とする、請求項１１に記載の装置。
【請求項１５】
前記装置は、
前記ソフトウェアアプリケーションを実行する間に第２のデータキャッシュミスが発生した場合、前記ハードウェアパフォーマンスカウンタが、前記第２の命令アドレスと前記第２のデータアドレスとを示すデータを前記プロファイリングツールに提供することを特徴とする、請求項１４に記載の装置。
【請求項１６】
前記装置は、
前記第１のデータキャッシュミスと、前記第２のデータキャッシュミスとが、前記第１の命令アドレスに関連する連続データキャッシュミスであることを特徴とする、請求項１５に記載の装置。
【請求項１７】
前記装置は、
前記プロファイリングツールが、前記ハードウェアパフォーマンスカウンタを一連の周期的バーストでサンプリングすることを特徴とする、請求項１１に記載の装置。
【請求項１８】
ソフトウェアアプリケーションをプロファイリングするための装置であって、
ハードウェアパフォーマンスカウンタと、
前記ハードウェアパフォーマンスカウンタに有効に結合されたストライド決定モジュールと、
前記位相マネージャに有効に結合された最大公約数モジュールと、
を含むことを特徴とする装置。
【請求項１９】
前記装置は、
前記ハードウェアパフォーマンスカウンタが、データキャッシュミスに関連する命令アドレスと、データキャッシュミスに関連するデータアドレスとを示すデータをキャプチャするよう構成されていることを特徴とする、請求項１８に記載の装置。
【請求項２０】
前記装置は、
第１の命令アドレスが第２の命令アドレスと等しい場合、前記ストライド決定モジュールは、第２のデータアドレスから第１のデータドレスを引くよう構成されていることを特徴とする、請求項１８に記載の装置。
【請求項２１】
前記装置は、
前記ストライド決定モジュールに有効に結合された位相マネージャをさらに含むことを特徴とする、請求項１８に記載の装置。
【請求項２２】
前記装置は、
前記位相マネージャが第１のスキッピング位相から検査位相への第１の遷移を生じさせるよう構成されていることを特徴とする、請求項２１に記載の装置。
【請求項２３】
前記装置は、
前記位相マネージャが前記検査位相から第２のスキッピング位相への第２の遷移を生じさせるよう構成されていることを特徴とする、請求項２２に記載の装置。
【請求項２４】
前記装置は、
前記最大公約数モジュールが、第１のストライド積と第２のストライド積との最大公約数を決定するよう構成されていることを特徴とする、請求項１８に記載の装置。
【請求項２５】
機械可読媒体であって、
ハードウェアパフォーマンスカウンタからのキャッシュミスデータに基づき、ストライドプロファイルデータを生成するステップと、
前記ストライドプロファイルデータに基づき、プログラムをコンパイルするステップと、
をマシンに実行させるよう構成されていることを特徴とする、機械可読媒体。
【請求項２６】
前記機械可読媒体は、
前記ハードウェアパフォーマンスカウンタから、第１の命令アドレスと、該第１の命令アドレスに関連する第１のデータアドレスと、第２の命令アドレスと、該第２の命令アドレスに関連する第２のデータアドレスとを示す第１のデータを受信するステップと、
前記第１の命令アドレスが前記第２の命令アドレスと等しい場合、前記第２のデータアドレスから前記第１のデータアドレスを引くことにより、第１のストライド積を決定するステップと、
をマシンに実行させるようさらに構成されていることを特徴とする、請求項２５に記載の機械可読媒体。
【請求項２７】
前記機械可読媒体は、
前記ハードウェアパフォーマンスカウンタから、第３の命令アドレスと、該第３の命令アドレスに関連する第３のデータアドレスとを示す第２のデータを受信するステップと、
前記第２の命令アドレスが前記第３の命令アドレスと等しい場合、前記第３のデータアドレスから前記第２のデータアドレスを引くことにより、第２のストライド積を決定するステップと、
をマシンに実行させるよう、さらに構成されていることを特徴とする、請求項２６に記載の機械可読媒体。
【請求項２８】
前記機械可読媒体は、
前記第１のストライド積と前記第２のストライド積との最大公約数を決定することにより、ストライドを決定するステップをマシンに実行させるようさらに構成されていることを特徴とする、請求項２７に記載の機械可読媒体。
【請求項２９】
前記機械可読媒体は、
前記ハードウェアパフォーマンスカウンタを一連の周期的バーストでサンプリングするステップをマシンに実行させるよう、さらに構成されていることを特徴とする、請求項２５に記載の機械可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアコンパイラ、特に、ソフトウェアアプリケーションのストライドプロファイリングのための方法および装置に関する。
【背景技術】
【０００２】
プロセッサとメモリとの速度差は、拡大していく一方である。その結果、コンピュータの性能は、キャッシュ階層の有効性によって決定される傾向がますます大きくなっている。しかしながら、プロセッサの作業負荷は、大きなキャッシュミスを招きがちである。
【０００３】
キャッシュ階層の有効性を向上させるためによく知られている効果的な技術にプリフェッチがある。プリフェッチの性能を向上させるためにコンパイラを用い、一定の「ストライド」でのメモリアクセス命令（ロード、格納など）を統計学的に見つける技術がある。例えば、１７バイトずつロードする１つのロード命令は、何バイト使用するか事前にコンパイラがわかっているので、簡単にプリフェッチできる。しかしながら、一定のストライドでのメモリアクセス命令が多数になると、ポインタデリファレンスおよび間接的なアレイリファレンスは実行時までわからないので、統計的に見つけることができない。
【発明の開示】
【課題を解決するための手段】
【０００４】
このような課題に取り組む目的で、本発明は、「インストルメンテーション」コード（すなわちテストコード）をソフトウェアアプリケーションに追加することにより、１つまたはそれ以上のメモリアクセス命令によってアクセスされる実際のデータアドレスを直接監視できるようにする。しかしながら、インストルメンテーションコードは、ソフトウェアアプリケーションのオーバーヘッドをかなり増大させることになり、アプリケーションはスローダウン（１０倍くらい）する。
【発明を実施するための最良の形態】
【０００５】
本実施形態のシステムでは、通常、データキャッシュミスなど何らかのイベントによって起きたメモリアクセス命令に関連する命令アドレスおよびデータアドレスを報告する目的で、ハードウェアパフォーマンスカウンタを使用する。同じ命令アドレスが２つ以上のデータアドレスに関連する場合、２つのデータアドレスの差が記録される。同じ命令に対し、それら２つ以上のデータアドレスの差が記録された場合、システムは、２つ以上の差の最大公約数となる命令に関連するストライドを決定する。このストライドは、データキャッシュプリフェッチを最適化するよう、コンパイラで用いることもできる。また、検査位相とスキッピング位相とを繰り返すことにより、データキャッシュミスのアドレスを監視することに伴うオーバーヘッドを減らすこともできる。ほとんどのデータキャッシュミスは、スキッピング位相の間よりむしろ検査位相の間で見つかる。
【０００６】
図１は、コンピュータシステム１００の一例を示すブロック図である。コンピュータシステム１００は、パソコン（ＰＣ）、または、他のいかなるコンピュータであってもよい。一実施例では、コンピュータシステム１００は、電源１０３により電力を供給される主演算処理装置１０２を備える。この主演算処理装置１０２は、主記憶装置１０８と、１つまたはそれ以上のインターフェース回路１１０とにシステム相互接続１０６によって電気的に結合されるプロセッサ１０４を含む。一実施例では、システム相互接続１０６は、アドレス／データバスであってよい。プロセッサ１０４とを主記憶装置１０８に結合するためにバス以外の相互接続を用いることもできることは、当業者にとって言うまでもないことである。例えば、プロセッサ１０４を主記憶装置１０８に結合する目的で、１つまたはそれ以上の専用回線、および／または、クロスバーを用いてもよい。
【０００７】
プロセッサ１０４は、インテルＰｅｎｔｉｕｍ（ペンティウム）マイクロプロセッサ、インテルＩｔａｎｉｕｍ（イタニウム）マイクロプロセッサ、インテルＣｅｎｔｒｉｎｏ（セントリノ）マイクロプロセッサ、および／または、インテルＸＳｃａｌｅ（エックスケール）マイクロプロセッサなど、公知のどのタイプのものでもよい。また、プロセッサ１０４は、スタティックＲＡＭ（ＳＲＡＭ）などの公知のいかなるタイプのキャッシュメモリを含んでよい。主記憶装置１０８は、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）、および／または、他のいかなる形式のＲＡＭを含んでよい。例えば、主記憶装置１０８は、不揮発性メモリを含んでもよいし、プロセッサ１０４により公知の方法で実行されるソフトウエアプログラムを格納することもできる。
【０００８】
インターフェース回路１１０は、イーサネット（登録商標）インターフェース、および／または、Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ（ＵＳＢ）など、公知のインターフェース規格を用いて実装されてよい。インターフェースには、データおよびコマンドを主演算処理装置１０２に入力するための１つまたはそれ以上の入力装置１１２が接続されてよい。入力装置１１２は、例えば、キーボード、マウス、タッチスクリーン、トラックパッド、トラックボール、アイソポイント、および／または、音声認識システムであってよい。
【０００９】
１つまたはそれ以上のインターフェース回路１１０を介し、１つまたはそれ以上のディスプレイ、プリンタ、スピーカ、および／または、他の出力装置１１４が主演算処理装置１０２に接続されることができる。ディスプレイ１１４は、ブラウン管（ＣＲＴ）、液晶ディスプレイ（ＬＣＤ）、または、他のいかなるタイプのディスプレイであってよい。ディスプレイ１１４は、主演算処理装置１０２の作動中に生じるデータの視覚的指示を生成することができる。視覚的指示は、人間のオペレータ入力を促すもの、計算値、検出データなどを含んでよい。
【００１０】
コンピュータシステム１００は、１つまたはそれ以上の記憶装置１１６を含んでもよく、例えば、１つまたはそれ以上のハードディスクドライブ、コンパクトディスク（ＣＤ）ドライブ、デジタル多用途ディスクドライブ（ＤＶＤ）、および／または、他のコンピュータ媒体入出力（Ｉ／Ｏ）装置などを含んでよい。
【００１１】
コンピュータシステム１００は、また、ネットワーク１１８との接続を介し、他のデバイスとデータのやりとりをすることもできる。ネットワーク接続は、イーサネット（登録商標）接続、デジタル加入者線（ＤＳＬ）、電話線、同軸ケーブルなど、いかなるタイプのものであってもよい。
【００１２】
図２は、他のコンピュータシステム２００の例を示す。この実施例では、コンピュータシステム２００は、図のように相互接続されたプロセッサ２０２、キャッシュ２０４、主記憶装置２０６、ハードウェアパフォーマンスカウンタ２０８、ストライド決定モジュール２１０、最大公約数モジュール２１２、および、位相マネージャ２１４を含む。
【００１３】
プロセッサ２０２は、前述のインテルＰｅｎｔｉｕｍマイクロプロセッサ、インテルＩｔａｎｉｕｍマイクロプロセッサ、インテルＣｅｎｔｒｉｎｏ）マイクロプロセッサ、および／または、インテルＸＳｃａｌｅマイクロプロセッサなど、公知のどのタイプのものでもよい。また、プロセッサ２０２は、スタティックＲＡＭ（ＳＲＡＭ）などの公知のいかなるタイプのキャッシュメモリ２０４を含んでよい。主記憶装置２０６は、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）、および／または、他のいかなる形式のＲＡＭを含んでよい。例えば、主記憶装置２０６は、不揮発性メモリを含んでもよく、プロセッサ２０２により公知の方法で実行されるソフトウエアプログラムを格納することもできる。
【００１４】
通常、主記憶装置２０６からのデータ値を要求する命令（ロードまたは格納命令など）をプロセッサ２０２が受けると、コンピュータシステム２００は、要求された値がキャッシュ２０４に格納されているかどうかをまず確認する。要求されたデータがキャッシュ２０４に格納されていれば（キャッシュヒット）、要求されたデータ値を主記憶装置２０６から取りださなくともよい。データ値がキャッシュ２０４に格納されていなければ（キャッシュミス）、主記憶装置２０６からデータを取り出すこともできる。
【００１５】
本実施例では、データキャッシュミスがおきるたびに、ハードウェアパフォーマンスカウンタ２０８が、データキャッシュミスの原因となる命令（ロードまたは格納命令など）のアドレスと、要求されたデータ値のアドレスとをキャプチャする。図３は、ロード命令３０２を含むコード部分３００の一例を示す。この図では、ロード命令３０２は、“１００５”の命令アドレス３０４に関連し、同様に、 “２０００＋Ｘ”のデータアドレス３０６に関係する。ロード命令３０２を実行した結果プロセッサ２０２によって取り出されたデータ値を保持するメモリロケーションは、インデックス変数“Ｘ”（３０８）の値に依存する。例えば、Ｘ＝０である場合、ロード命令は、メモリロケーション２０００にあるデータ値を取り出させ、Ｘ＝４８であれば、メモリ位置２０４８にあるデータ値を取り出させる。
【００１６】
すなわち、ロード命令３０２を保持するメモリ位置は、“１００５”であり、この命令がプロセッサ２０２によって実行されるたびに、アドレス“１００５”が演算に関係するようになる。しかしながら、命令３０２を実行した結果取り出されるデータ値を保持するアドレスは、Ｘの値によってロード命令３０２の実行のたびに変化する。例えば、ロード命令３０２を実行するたびに４８ずつ増えれば、ロード命令３０２は、メモリロケーション２０００、２０４８、２０９６へとロードするようになる。本実施例では、ロード命令３０２のストライドは４８となる。
【００１７】
ストライド決定モジュール２１０は、ハードウェアパフォーマンスカウンタ２０８から受信された命令アドレスおよびデータアドレスを用い、特定の命令のストライド（もしあれば）を決定する。例えば、図３におけるロード命令３０２のストライドは、該ロード命令３０２を含むループ３１０を介しＸが毎回４８ずつ増えるので、４８である。ハードウェアパフォーマンスカウンタ２０８が命令アドレスおよび関連するデータアドレスのすべてをキャプチャする場合、ストライドを決定する目的で、ストライド決定モジュール２１０によって命令アドレス１００５が２つ続けて発生するのを監視することができ、そのとき１番目に発生したデータアドレスから２番目に発生したデータアドレスを引く。（２０４８−２０００＝４８）。
【００１８】
しかしながら、キャッシュミスが発生したときのみ、ハードウェアパフォーマンスカウンタ２０８が命令アドレスとデータアドレスキャプチャすると、同じ命令アドレスに関連する２つの連続するデータアドレス間の差は、実際のストライドのいくつかの倍数になり得る。例えば、図３におけるロード命令３０２のストライドは、４８であるが、１番目のロード命令３０２（データアドレス＝２０００）と６番目のロード命令３０２（データアドレス＝２２４０）のみがキャッシュミスだったとすれば、データアドレス間の差（すなわち２２４０−２０００）は、２４０（すなわち４８＊５）になり、４８ではない。本実施例では、この値２４０は、「ストライド積」となる。
【００１９】
ストライド積は、報告されない命令（キャッシュヒットの場合はハードウェアパフォーマンスカウンタが報告しないので）の発生によりいくつかのストライド倍数（例えば５）を乗じたストライド値（例えば４８）である。ストライド積は、１つのデータアドレス値から、同じ命令アドレスに関連する前のデータアドレス値を引くことにより決定されることができる（例えば、２２４０−２０００＝２４０）。
【００２０】
ストライド積から実際のストライド値を決定する目的で、コンピュータシステム２００は、最大公約数モジュール２１２を含む。最大公約数モジュール２１２は、２つまたはそれ以上の入力をとり、その入力の最大公約数を公知の方法で決定する。具体的には、２つまたはそれ以上のストライド積をとり、ストライド値を決定する。例えば、ハードウエアパフォーマンスカウンタ２０８が同じロード命令３０２が３回キャッシュミスしていると報告したと仮定する。ここでさらに、ロード命令３０２の１回目の報告に関連するデータアドレスは２０００であり、２回目の報告に関連するデータアドレスは２０４０であり、３回目の報告に関連するデータアドレスは２５７６であると仮定する。この例に関連する１回目のストライド積は、２４０であり（２２４０−２０００）、２回目のストライド積は、３３６（２５７６−２２４０）である。２４０と３３６との最大公約数は、４８であり、４８が本例におけるロード命令３０２の実際のストライド値となる。
【００２１】
ほとんどのコンピュータシステム２００では、ハードウェアパフォーマンスカウンタ２０８からのキャッシュミスデータを用いてストライド値を決定する場合に、処理オーバーヘッドがかかる。このようなオーバーヘッドを減らすよう、コンピュータシステム２００は、位相マネージャ２１４を含む。位相マネージャ２１４は、ストライド決定モジュール２１０を２つまたはそれ以上の位相間で遷移させる。図４は、状態図の一例を示す。本実施例では、位相マネージャ２１４は、ストライド決定モジュール２１０をスキッピング位相４０２と検査位相４０４との間で遷移させる。ストライド決定モジュール２１０は、スキッピング位相４０２の各インスタンスの間に、ハードウェアパフォーマンスカウンタ２０８から報告される、点検位相４０４の間に処理される数より少ないキャッシュミスを処理する。例えば、ストライド決定モジュール２１０は、スキッピング位相４２０の間に、１０００データキャッシュミスにつき１回ハードウェアパフォーマンス２０８をサンプリングするだけでよい。それに対して、検査位相４０４の間では、ストライド決定モジュール２１０は、データキャッシュミスのたびにハードウェアパフォーマンスカウンタ２０８をサンプリングすることもある。
【００２２】
図５は、ソフトウェアアプリケーションをストライドプロファイリングするプロセス５００の一例を示す。好ましくは、プロセス５００は、１つまたはそれ以上のメモリに格納される１つまたはそれ以上のプログラムにおいて、１つまたはそれ以上のプロセッサにより（プロセッサ１０４および／またはプロセッサ２０２など）公知の方法で実行されてよい。図５に示すフローチャートを参照してプロセッサ５００を説明するが、その他にも多くの方法を用いてプロセッサ５００を実行できることは、当業者にとっては明らかなことである。例えば、多数のブロックの順序を変えてもよく、１つまたはそれ以上のブロックの演算を変更してもよく、および／または、ブロックを削除してもよい。
【００２３】
一般的に、実施例のプロセス５００は、データキャッシュミスなど何らかのイベントにより起きたメモリアクセス命令に関連する命令アドレス、および、データアドレスを報告する目的で、ハードウェアパフォーマンスカウンタを用いる。同じ命令アドレスが２つ以上のデータアドレスに関連する場合、２つのデータアドレス間の差が記録される。同じ命令に対しそれら２つ以上のデータアドレス差が記録された場合、システムは、２つ以上の差の最大公約数となる命令に関連するストライドを決定する。このストライドは、データキャッシュプリフェッチを最適化するよう、コンパイラで用いてもよい。また、検査位相とスキッピング位相とを繰り返すことにより、データキャッシュミスのアドレスを監視することに伴うオーバーヘッドを減らすこともできる。ほとんどのデータキャッシュミスは、スキッピング位相よりむしろ検査位相で見つかる。
【００２４】
実施例のプロセス５００は、いくつかの変数を初期化することにより開始する（ステップ５０２）。具体的には、プロセス５００は、スキップカウンタ、スキップスレッショルド、検査カウンタ、検査スレッショルド、および、キャプチャアレイを初期化する。それらの変数は、主記憶装置１０８および２０６などの任意のメモリにそれぞれ格納されることもできる。スキップカウンタは、スキッピング位相の間に発生するデータキャッシュ（Ｄキャッシュ）ミスの数をカウントするために用いられ、スキップスレッショルドは、スキッピング位相４０２から検査位相４０４への変化をトリガするために用いられる。スキッピング位相４０２は、ストライドプロファイリングの実行に伴うオーバーヘッドを減らす目的で、ハードウェアパフォーマンスカウンタ２０８がサンプリングされる割合を減らすために用いられる。例えば、スキッピング位相４０２ごとに１０００個のＤキャッシュミスがスキッピングされる。
【００２５】
同様に、検査カウンタは、検査位相４０４の間に発生するＤキャッシュミスの数をカウントするために用いられ、検査スレッショルドは、１つの検査位相４０４から次のスキッピング位相４０２への変化をトリガするために用いることができる。検査位相４０４は、ストライドプロファイリングを実行するために用いるデータを収集する目的で、ハードウェアパフォーマンスカウンタ２０８をサンプリングする割合を増やすために用いることができる。例えば、１０００個の連続的なＤキャッシュミスに関連する命令アドレスおよびデータアドレスは、各検査位相４０４の間に収集されてよい。キャプチャアレイは、各検査位相４０４の間に収集されたアドレスを記録するために用いることができる。
【００２６】
前記変数が初期化されると、プロセス５００は、Ｄキャッシュミスを待ってスキッピング位相４０２を開始する（ブロック５０４）。一実施例では、ハードウェアパフォーマンスカウンタ２０８は、Ｄキャッシュミスの発生のたびに起動するよう設定される。スキッピング位相４０２では、プロセス５００は、Ｄキャッシュミスが発生するたびにスキップカウンタを増加させるだけである（ブロック５０６）。Ｄキャッシュミスの数がスキップスレッショルドを超えると、プロセス５００は、検査位相４０４へと進行する（ブロック５０８）。
【００２７】
検査位相４０４では、検査アドレスと関連するデータアドレスとがＤキャッシュミスのたびにハードウェアパフォーマンスカウンタ２０８から受け取られる。検査アドレスは、メモリの特定の部分にアクセスした命令のアドレスである。データアドレスは、命令によってアクセスされたメモリの特定の部分のアドレスである。検査位相４０４の間にＤキャッシュミスが発生すると、プロセス５００は、同じ命令アドレスがキャプチャアレイにすでに記録されているかどうかを決定する（ブロック５１２）。すなわち、プロセス５００は、この検査位相４０４より前にこれと同じ命令がすでにＤキャッシュミスされているかどうかを確認する。
【００２８】
同じ命令アドレスがキャプチャアレイにすでに記録されているのでなければ（すなわち、この検査段階４０４の間にこの特定の命令がＤキャッシュミスされるのは今回が始めてのとき）、プロセス５００は、検査カウンタを増やし（ブロック５１４)、検査カウンタが検査スレッショルドを超えているかどうかを確認する（ブロック５１６）。検査スレッショルドを超えていなければ（すなわちまだ検査位相４０４中）であれば、プロセス５００は、他のＤキャッシュミスを待つ（ブロック５１８）。そして次のＤキャッシュミスが発生したら、プロセスは、再び命令アドレスと関連するデータアドレスとをハードウェアパフォーマンスカウンタ２０８から受信する（ブロック５１０）。このＤキャッシュミスが異なる命令アドレスに関連する場合（ブロック５１２）、プロセス５００は、検査カウンタを再び増やし（ブロック５１４）、検査カウンタが検査スレッショルドを超えているかどうかを再び確認する（ブロック５１６）。
【００２９】
一方、このＤキャッシュミスがキャプチャアレイにすでに記録されている命令アドレスに関連する場合（ブロック５１２）、プロセス５００は、この命令アドレスの「ストライド積」を計算する（ブロック５２０）。ストライド積は、ストライド倍数で乗じたストライド値である。例えば、ストライド値が４８バイトでストライド倍数が５であれば、ストライド積は２４０である。ストライド倍数は、Ｄキャッシュヒットの結果である。特定のメモリアクセス命令がＤキャッシュミスされ、続いて４つキャッシュヒットし、それに続いて他のＤキャッシュミスが発生した場合、ストライド倍数は５となる。ストライド積は、この命令アドレスに関連して前に記録されたデータアドレスを現在のデータアドレスから引くことにより、決定される。
【００３０】
その後、プロセス５００は、計算されたストライド積がこの命令アドレスに対し計算された最初のストライド積かどうかを決定する（ブロック５２２）。例えば、この命令アドレスに関連して起きているキャッシュミスが２つだけの場合、ストライド積は１つだけ決定されている（すなわちこれが最初のストライド積）。一方、この命令アドレスに関連して３つ（またはそれ以上）のキャッシュミスが起きている場合は、２つ以上のストライド積が決定されている可能性がある。例えば、最初のキャッシュミスと２回目のキャッシュミスとの間のデータアドレスの差が第１のストライド積を生じ、２回目のキャッシュミスと３回目のキャッシュミスとの間のデータアドレスの差が第２のストライド積を生じ得る。
【００３１】
計算されたストライド積がこの命令アドレスに対し計算された第１のストライド積である場合（ブロック５２２）、プロセス５００は、検査カウンタを増やし（ブロック５１４）、検査カウンタが検査スレッショルドを超えているかどうかを確認する（ブロック５１６）。検査スレッショルドを超えていなければ（すなわちまだ検査位相４０４中）、プロセス５００は、他のＤキャッシュミスを待つ（ブロック５１８）。
【００３２】
一方、計算されたストライド積がこの命令アドレスに対し計算された第１のストライド積でない場合（ブロック５２２）、プロセス５００は、この命令のストライド値を決定する（ブロック５２４）。具体的には、ストライド値は、この命令アドレスに関連する現在のストライド積と、同じ命令アドレスに関連する以前のストライド積との最大公約数を決定することにより計算される。あるいは、任意の数のストライド積を用いてストライド値を決定してもよい。例えば、３つのストライド積の最大公約数をストライド値として用いてよい。
【００３３】
次に、プロセス５００は、検査カウンタを増やし（ブロック５１４）、検査カウンタが検査スレッショルドを超えているかどうかを確認する（ブロック５１６）。検査スレッショルドを超えていなければ（すなわちまだ検査位相４０４中）、プロセス５００は、他のＤキャッシュミスを待つ（ブロック５１８）。一方、検査スレッショルドを超えていれば、プロセス５００は、特定の変数を再初期化し（ブロック５０２）、スキッピング位相４０２に戻る。
【００３４】
本発明について異なる構成要素中にハードウェアで実行されるソフトウェアを含むシステムの例を開示したが、このようなシステムは単なる例示に過ぎず、これに限定するものではない。例えば、開示したハードウェア部品およびソフトウェア部品のいずれかあるいはすべてを専用ハードウェア単独で、ソフトウェア単独で、ファームウェア単独で実行することもでき、あるいは、ハードウェア、ファームウェア、および／または、ソフトウェアの組み合わせで実行することもできる。
【００３５】
さらに、特定の方法、装置、および、製品について述べてきたが、本発明の範囲はこれに限定されるものではなく、添付の特許請求の範囲内に文言解釈どおりあるいは均等論の下で正当に収まるすべての装置、方法、および、製品に適用される。
【図面の簡単な説明】
【００３６】
【図１】開示されるシステムの使用環境を示すコンピュータシステムの一例を示すブロック図
【図２】開示されるシステムの使用環境を示す他のコンピュータシステムの一例を示すブロック図
【図３】ロード命令を含むコード部分の実施例
【図４】状態図の一例
【図５】ソフトウェアをストライドプロファイリングする方法を実施するためのデバイスにより実行できる機械可読命令の一例を示すフローチャート
【図１】
2006524375.tif 000003
【図２】
2006524375.tif 000004
【図３】
2006524375.tif 000005
【図４】
2006524375.tif 000006
【図５】
2006524375.tif 000007
【国際調査報告】
2006524375.tif 000008
2006524375.tif 000009
2006524375.tif 000010