JP4361084B2 - ソフトウェアアプリケーションのストライドプロファイリング方法および装置 - Google Patents

ソフトウェアアプリケーションのストライドプロファイリング方法および装置 Download PDF

Info

Publication number
JP4361084B2
JP4361084B2 JP2006501313A JP2006501313A JP4361084B2 JP 4361084 B2 JP4361084 B2 JP 4361084B2 JP 2006501313 A JP2006501313 A JP 2006501313A JP 2006501313 A JP2006501313 A JP 2006501313A JP 4361084 B2 JP4361084 B2 JP 4361084B2
Authority
JP
Japan
Prior art keywords
data
address
stride
instruction
instruction address
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2006501313A
Other languages
English (en)
Other versions
JP2006524375A (ja
Inventor
ジオフ ローニー
チー−クン ルック
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of JP2006524375A publication Critical patent/JP2006524375A/ja
Application granted granted Critical
Publication of JP4361084B2 publication Critical patent/JP4361084B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • G06F8/4442Reducing the number of cache misses; Data prefetching

Description

本発明は、ソフトウェアコンパイラ、特に、ソフトウェアアプリケーションのストライドプロファイリングのための方法および装置に関する。
プロセッサとメモリとの速度差は、拡大していく一方である。その結果、コンピュータの性能は、キャッシュ階層の有効性によって決定される傾向がますます大きくなっている。しかしながら、プロセッサの作業負荷は、大きなキャッシュミスを招きがちである。
キャッシュ階層の有効性を向上させるためによく知られている効果的な技術にプリフェッチがある。プリフェッチの性能を向上させるためにコンパイラを用い、一定の「ストライド」でのメモリアクセス命令(ロード、格納など)を統計学的に見つける技術がある。例えば、17バイトずつロードする1つのロード命令は、何バイト使用するか事前にコンパイラがわかっているので、簡単にプリフェッチできる。しかしながら、一定のストライドでのメモリアクセス命令が多数になると、ポインタデリファレンスおよび間接的なアレイリファレンスは実行時までわからないので、統計的に見つけることができない。
尚、対応する外国出願において、以下の文献が発見されている。
米国特許出願公開第2003/126591号明細書 米国特許出願公開第2003/0204840号明細書 米国特許第5287487号明細書 米国特許第5694568号明細書 米国特許第6009514号明細書 米国特許第6047359号明細書 米国特許第6134643号明細書 米国特許第6134710号明細書
このような課題に取り組む目的で、本発明は、「インストルメンテーション」コード(すなわちテストコード)をソフトウェアアプリケーションに追加することにより、1つまたはそれ以上のメモリアクセス命令によってアクセスされる実際のデータアドレスを直接監視できるようにする。しかしながら、インストルメンテーションコードは、ソフトウェアアプリケーションのオーバーヘッドをかなり増大させることになり、アプリケーションはスローダウン(10倍くらい)する。
本実施形態のシステムでは、通常、データキャッシュミスなど何らかのイベントによって起きたメモリアクセス命令に関連する命令アドレスおよびデータアドレスを報告する目的で、ハードウェアパフォーマンスカウンタを使用する。同じ命令アドレスが2つ以上のデータアドレスに関連する場合、2つのデータアドレスの差が記録される。同じ命令に対し、それら2つ以上のデータアドレスの差が記録された場合、システムは、2つ以上の差の最大公約数となる命令に関連するストライドを決定する。このストライドは、データキャッシュプリフェッチを最適化するよう、コンパイラで用いることもできる。また、検査位相とスキッピング位相とを繰り返すことにより、データキャッシュミスのアドレスを監視することに伴うオーバーヘッドを減らすこともできる。ほとんどのデータキャッシュミスは、スキッピング位相の間よりむしろ検査位相の間で見つかる。
図1は、コンピュータシステム100の一例を示すブロック図である。コンピュータシステム100は、パソコン(PC)、または、他のいかなるコンピュータであってもよい。一実施例では、コンピュータシステム100は、電源103により電力を供給される主演算処理装置102を備える。この主演算処理装置102は、主記憶装置108と、1つまたはそれ以上のインターフェース回路110とにシステム相互接続106によって電気的に結合されるプロセッサ104を含む。一実施例では、システム相互接続106は、アドレス/データバスであってよい。プロセッサ104とを主記憶装置108に結合するためにバス以外の相互接続を用いることもできることは、当業者にとって言うまでもないことである。例えば、プロセッサ104を主記憶装置108に結合する目的で、1つまたはそれ以上の専用回線、および/または、クロスバーを用いてもよい。
プロセッサ104は、インテルPentium(ペンティウム)マイクロプロセッサ、インテルItanium(イタニウム)マイクロプロセッサ、インテルCentrino(セントリノ)マイクロプロセッサ、および/または、インテルXScale(エックスケール)マイクロプロセッサなど、公知のどのタイプのものでもよい。また、プロセッサ104は、スタティックRAM(SRAM)などの公知のいかなるタイプのキャッシュメモリを含んでよい。主記憶装置108は、ダイナミック・ランダム・アクセス・メモリ(DRAM)、および/または、他のいかなる形式のRAMを含んでよい。例えば、主記憶装置108は、不揮発性メモリを含んでもよいし、プロセッサ104により公知の方法で実行されるソフトウエアプログラムを格納することもできる。
インターフェース回路110は、イーサネット(登録商標)インターフェース、および/または、Universal Serial Bus(USB)など、公知のインターフェース規格を用いて実装されてよい。インターフェースには、データおよびコマンドを主演算処理装置102に入力するための1つまたはそれ以上の入力装置112が接続されてよい。入力装置112は、例えば、キーボード、マウス、タッチスクリーン、トラックパッド、トラックボール、アイソポイント、および/または、音声認識システムであってよい。
1つまたはそれ以上のインターフェース回路110を介し、1つまたはそれ以上のディスプレイ、プリンタ、スピーカ、および/または、他の出力装置114が主演算処理装置102に接続されることができる。ディスプレイ114は、ブラウン管(CRT)、液晶ディスプレイ(LCD)、または、他のいかなるタイプのディスプレイであってよい。ディスプレイ114は、主演算処理装置102の作動中に生じるデータの視覚的指示を生成することができる。視覚的指示は、人間のオペレータ入力を促すもの、計算値、検出データなどを含んでよい。
コンピュータシステム100は、1つまたはそれ以上の記憶装置116を含んでもよく、例えば、1つまたはそれ以上のハードディスクドライブ、コンパクトディスク(CD)ドライブ、デジタル多用途ディスクドライブ(DVD)、および/または、他のコンピュータ媒体入出力(I/O)装置などを含んでよい。
コンピュータシステム100は、また、ネットワーク118との接続を介し、他のデバイスとデータのやりとりをすることもできる。ネットワーク接続は、イーサネット(登録商標)接続、デジタル加入者線(DSL)、電話線、同軸ケーブルなど、いかなるタイプのものであってもよい。
図2は、他のコンピュータシステム200の例を示す。この実施例では、コンピュータシステム200は、図のように相互接続されたプロセッサ202、キャッシュ204、主記憶装置206、ハードウェアパフォーマンスカウンタ208、ストライド決定モジュール210、最大公約数モジュール212、および、位相マネージャ214を含む。
プロセッサ202は、前述のインテルPentiumマイクロプロセッサ、インテルItaniumマイクロプロセッサ、インテルCentrino)マイクロプロセッサ、および/または、インテルXScaleマイクロプロセッサなど、公知のどのタイプのものでもよい。また、プロセッサ202は、スタティックRAM(SRAM)などの公知のいかなるタイプのキャッシュメモリ204を含んでよい。主記憶装置206は、ダイナミック・ランダム・アクセス・メモリ(DRAM)、および/または、他のいかなる形式のRAMを含んでよい。例えば、主記憶装置206は、不揮発性メモリを含んでもよく、プロセッサ202により公知の方法で実行されるソフトウエアプログラムを格納することもできる。
通常、主記憶装置206からのデータ値を要求する命令(ロードまたは格納命令など)をプロセッサ202が受けると、コンピュータシステム200は、要求された値がキャッシュ204に格納されているかどうかをまず確認する。要求されたデータがキャッシュ204に格納されていれば(キャッシュヒット)、要求されたデータ値を主記憶装置206から取りださなくともよい。データ値がキャッシュ204に格納されていなければ(キャッシュミス)、主記憶装置206からデータを取り出すこともできる。
本実施例では、データキャッシュミスがおきるたびに、ハードウェアパフォーマンスカウンタ208が、データキャッシュミスの原因となる命令(ロードまたは格納命令など)のアドレスと、要求されたデータ値のアドレスとをキャプチャする。図3は、ロード命令302を含むコード部分300の一例を示す。この図では、ロード命令302は、“1005”の命令アドレス304に関連し、同様に、 “2000+X”のデータアドレス306に関係する。ロード命令302を実行した結果プロセッサ202によって取り出されたデータ値を保持するメモリロケーションは、インデックス変数“X”(308)の値に依存する。例えば、X=0である場合、ロード命令は、メモリロケーション2000にあるデータ値を取り出させ、X=48であれば、メモリ位置2048にあるデータ値を取り出させる。
すなわち、ロード命令302を保持するメモリ位置は、“1005”であり、この命令がプロセッサ202によって実行されるたびに、アドレス“1005”が演算に関係するようになる。しかしながら、命令302を実行した結果取り出されるデータ値を保持するアドレスは、Xの値によってロード命令302の実行のたびに変化する。例えば、ロード命令302を実行するたびに48ずつ増えれば、ロード命令302は、メモリロケーション2000、2048、2096へとロードするようになる。本実施例では、ロード命令302のストライドは48となる。
ストライド決定モジュール210は、ハードウェアパフォーマンスカウンタ208から受信された命令アドレスおよびデータアドレスを用い、特定の命令のストライド(もしあれば)を決定する。例えば、図3におけるロード命令302のストライドは、該ロード命令302を含むループ310を介しXが毎回48ずつ増えるので、48である。ハードウェアパフォーマンスカウンタ208が命令アドレスおよび関連するデータアドレスのすべてをキャプチャする場合、ストライドを決定する目的で、ストライド決定モジュール210によって命令アドレス1005が2つ続けて発生するのを監視することができ、そのとき1番目に発生したデータアドレスから2番目に発生したデータアドレスを引く。(2048−2000=48)。
しかしながら、キャッシュミスが発生したときのみ、ハードウェアパフォーマンスカウンタ208が命令アドレスとデータアドレスキャプチャすると、同じ命令アドレスに関連する2つの連続するデータアドレス間の差は、実際のストライドのいくつかの倍数になり得る。例えば、図3におけるロード命令302のストライドは、48であるが、1番目のロード命令302(データアドレス=2000)と6番目のロード命令302(データアドレス=2240)のみがキャッシュミスだったとすれば、データアドレス間の差(すなわち2240−2000)は、240(すなわち48*5)になり、48ではない。本実施例では、この値240は、「ストライド積」となる。
ストライド積は、報告されない命令(キャッシュヒットの場合はハードウェアパフォーマンスカウンタが報告しないので)の発生によりいくつかのストライド倍数(例えば5)を乗じたストライド値(例えば48)である。ストライド積は、1つのデータアドレス値から、同じ命令アドレスに関連する前のデータアドレス値を引くことにより決定されることができる(例えば、2240−2000=240)。
ストライド積から実際のストライド値を決定する目的で、コンピュータシステム200は、最大公約数モジュール212を含む。最大公約数モジュール212は、2つまたはそれ以上の入力をとり、その入力の最大公約数を公知の方法で決定する。具体的には、2つまたはそれ以上のストライド積をとり、ストライド値を決定する。例えば、ハードウエアパフォーマンスカウンタ208が同じロード命令302が3回キャッシュミスしていると報告したと仮定する。ここでさらに、ロード命令302の1回目の報告に関連するデータアドレスは2000であり、2回目の報告に関連するデータアドレスは2040であり、3回目の報告に関連するデータアドレスは2576であると仮定する。この例に関連する1回目のストライド積は、240であり(2240−2000)、2回目のストライド積は、336(2576−2240)である。240と336との最大公約数は、48であり、48が本例におけるロード命令302の実際のストライド値となる。
ほとんどのコンピュータシステム200では、ハードウェアパフォーマンスカウンタ208からのキャッシュミスデータを用いてストライド値を決定する場合に、処理オーバーヘッドがかかる。このようなオーバーヘッドを減らすよう、コンピュータシステム200は、位相マネージャ214を含む。位相マネージャ214は、ストライド決定モジュール210を2つまたはそれ以上の位相間で遷移させる。図4は、状態図の一例を示す。本実施例では、位相マネージャ214は、ストライド決定モジュール210をスキッピング位相402と検査位相404との間で遷移させる。ストライド決定モジュール210は、スキッピング位相402の各インスタンスの間に、ハードウェアパフォーマンスカウンタ208から報告される、点検位相404の間に処理される数より少ないキャッシュミスを処理する。例えば、ストライド決定モジュール210は、スキッピング位相420の間に、1000データキャッシュミスにつき1回ハードウェアパフォーマンス208をサンプリングするだけでよい。それに対して、検査位相404の間では、ストライド決定モジュール210は、データキャッシュミスのたびにハードウェアパフォーマンスカウンタ208をサンプリングすることもある。
図5は、ソフトウェアアプリケーションをストライドプロファイリングするプロセス500の一例を示す。好ましくは、プロセス500は、1つまたはそれ以上のメモリに格納される1つまたはそれ以上のプログラムにおいて、1つまたはそれ以上のプロセッサにより(プロセッサ104および/またはプロセッサ202など)公知の方法で実行されてよい。図5に示すフローチャートを参照してプロセッサ500を説明するが、その他にも多くの方法を用いてプロセッサ500を実行できることは、当業者にとっては明らかなことである。例えば、多数のブロックの順序を変えてもよく、1つまたはそれ以上のブロックの演算を変更してもよく、および/または、ブロックを削除してもよい。
一般的に、実施例のプロセス500は、データキャッシュミスなど何らかのイベントにより起きたメモリアクセス命令に関連する命令アドレス、および、データアドレスを報告する目的で、ハードウェアパフォーマンスカウンタを用いる。同じ命令アドレスが2つ以上のデータアドレスに関連する場合、2つのデータアドレス間の差が記録される。同じ命令に対しそれら2つ以上のデータアドレス差が記録された場合、システムは、2つ以上の差の最大公約数となる命令に関連するストライドを決定する。このストライドは、データキャッシュプリフェッチを最適化するよう、コンパイラで用いてもよい。また、検査位相とスキッピング位相とを繰り返すことにより、データキャッシュミスのアドレスを監視することに伴うオーバーヘッドを減らすこともできる。ほとんどのデータキャッシュミスは、スキッピング位相よりむしろ検査位相で見つかる。
実施例のプロセス500は、いくつかの変数を初期化することにより開始する(ステップ502)。具体的には、プロセス500は、スキップカウンタ、スキップスレッショルド、検査カウンタ、検査スレッショルド、および、キャプチャアレイを初期化する。それらの変数は、主記憶装置108および206などの任意のメモリにそれぞれ格納されることもできる。スキップカウンタは、スキッピング位相の間に発生するデータキャッシュ(Dキャッシュ)ミスの数をカウントするために用いられ、スキップスレッショルドは、スキッピング位相402から検査位相404への変化をトリガするために用いられる。スキッピング位相402は、ストライドプロファイリングの実行に伴うオーバーヘッドを減らす目的で、ハードウェアパフォーマンスカウンタ208がサンプリングされる割合を減らすために用いられる。例えば、スキッピング位相402ごとに1000個のDキャッシュミスがスキッピングされる。
同様に、検査カウンタは、検査位相404の間に発生するDキャッシュミスの数をカウントするために用いられ、検査スレッショルドは、1つの検査位相404から次のスキッピング位相402への変化をトリガするために用いることができる。検査位相404は、ストライドプロファイリングを実行するために用いるデータを収集する目的で、ハードウェアパフォーマンスカウンタ208をサンプリングする割合を増やすために用いることができる。例えば、1000個の連続的なDキャッシュミスに関連する命令アドレスおよびデータアドレスは、各検査位相404の間に収集されてよい。キャプチャアレイは、各検査位相404の間に収集されたアドレスを記録するために用いることができる。
前記変数が初期化されると、プロセス500は、Dキャッシュミスを待ってスキッピング位相402を開始する(ブロック504)。一実施例では、ハードウェアパフォーマンスカウンタ208は、Dキャッシュミスの発生のたびに起動するよう設定される。スキッピング位相402では、プロセス500は、Dキャッシュミスが発生するたびにスキップカウンタを増加させるだけである(ブロック506)。Dキャッシュミスの数がスキップスレッショルドを超えると、プロセス500は、検査位相404へと進行する(ブロック508)。
検査位相404では、検査アドレスと関連するデータアドレスとがDキャッシュミスのたびにハードウェアパフォーマンスカウンタ208から受け取られる。検査アドレスは、メモリの特定の部分にアクセスした命令のアドレスである。データアドレスは、命令によってアクセスされたメモリの特定の部分のアドレスである。検査位相404の間にDキャッシュミスが発生すると、プロセス500は、同じ命令アドレスがキャプチャアレイにすでに記録されているかどうかを決定する(ブロック512)。すなわち、プロセス500は、この検査位相404より前にこれと同じ命令がすでにDキャッシュミスされているかどうかを確認する。
同じ命令アドレスがキャプチャアレイにすでに記録されているのでなければ(すなわち、この検査段階404の間にこの特定の命令がDキャッシュミスされるのは今回が始めてのとき)、プロセス500は、検査カウンタを増やし(ブロック514)、検査カウンタが検査スレッショルドを超えているかどうかを確認する(ブロック516)。検査スレッショルドを超えていなければ(すなわちまだ検査位相404中)であれば、プロセス500は、他のDキャッシュミスを待つ(ブロック518)。そして次のDキャッシュミスが発生したら、プロセスは、再び命令アドレスと関連するデータアドレスとをハードウェアパフォーマンスカウンタ208から受信する(ブロック510)。このDキャッシュミスが異なる命令アドレスに関連する場合(ブロック512)、プロセス500は、検査カウンタを再び増やし(ブロック514)、検査カウンタが検査スレッショルドを超えているかどうかを再び確認する(ブロック516)。
一方、このDキャッシュミスがキャプチャアレイにすでに記録されている命令アドレスに関連する場合(ブロック512)、プロセス500は、この命令アドレスの「ストライド積」を計算する(ブロック520)。ストライド積は、ストライド倍数で乗じたストライド値である。例えば、ストライド値が48バイトでストライド倍数が5であれば、ストライド積は240である。ストライド倍数は、Dキャッシュヒットの結果である。特定のメモリアクセス命令がDキャッシュミスされ、続いて4つキャッシュヒットし、それに続いて他のDキャッシュミスが発生した場合、ストライド倍数は5となる。ストライド積は、この命令アドレスに関連して前に記録されたデータアドレスを現在のデータアドレスから引くことにより、決定される。
その後、プロセス500は、計算されたストライド積がこの命令アドレスに対し計算された最初のストライド積かどうかを決定する(ブロック522)。例えば、この命令アドレスに関連して起きているキャッシュミスが2つだけの場合、ストライド積は1つだけ決定されている(すなわちこれが最初のストライド積)。一方、この命令アドレスに関連して3つ(またはそれ以上)のキャッシュミスが起きている場合は、2つ以上のストライド積が決定されている可能性がある。例えば、最初のキャッシュミスと2回目のキャッシュミスとの間のデータアドレスの差が第1のストライド積を生じ、2回目のキャッシュミスと3回目のキャッシュミスとの間のデータアドレスの差が第2のストライド積を生じ得る。
計算されたストライド積がこの命令アドレスに対し計算された第1のストライド積である場合(ブロック522)、プロセス500は、検査カウンタを増やし(ブロック514)、検査カウンタが検査スレッショルドを超えているかどうかを確認する(ブロック516)。検査スレッショルドを超えていなければ(すなわちまだ検査位相404中)、プロセス500は、他のDキャッシュミスを待つ(ブロック518)。
一方、計算されたストライド積がこの命令アドレスに対し計算された第1のストライド積でない場合(ブロック522)、プロセス500は、この命令のストライド値を決定する(ブロック524)。具体的には、ストライド値は、この命令アドレスに関連する現在のストライド積と、同じ命令アドレスに関連する以前のストライド積との最大公約数を決定することにより計算される。あるいは、任意の数のストライド積を用いてストライド値を決定してもよい。例えば、3つのストライド積の最大公約数をストライド値として用いてよい。
次に、プロセス500は、検査カウンタを増やし(ブロック514)、検査カウンタが検査スレッショルドを超えているかどうかを確認する(ブロック516)。検査スレッショルドを超えていなければ(すなわちまだ検査位相404中)、プロセス500は、他のDキャッシュミスを待つ(ブロック518)。一方、検査スレッショルドを超えていれば、プロセス500は、特定の変数を再初期化し(ブロック502)、スキッピング位相402に戻る。
本発明について異なる構成要素中にハードウェアで実行されるソフトウェアを含むシステムの例を開示したが、このようなシステムは単なる例示に過ぎず、これに限定するものではない。例えば、開示したハードウェア部品およびソフトウェア部品のいずれかあるいはすべてを専用ハードウェア単独で、ソフトウェア単独で、ファームウェア単独で実行することもでき、あるいは、ハードウェア、ファームウェア、および/または、ソフトウェアの組み合わせで実行することもできる。
さらに、特定の方法、装置、および、製品について述べてきたが、本発明の範囲はこれに限定されるものではなく、添付の特許請求の範囲内に文言解釈どおりあるいは均等論の下で正当に収まるすべての装置、方法、および、製品に適用される。
開示されるシステムの使用環境を示すコンピュータシステムの一例を示すブロック図 開示されるシステムの使用環境を示す他のコンピュータシステムの一例を示すブロック図 ロード命令を含むコード部分の実施例 状態図の一例 ソフトウェアをストライドプロファイリングする方法を実施するためのデバイスにより実行できる機械可読命令の一例を示すフローチャート

Claims (24)

  1. ソフトウェアアプリケーションのストライドプロファイリング方法であって、
    複数の命令アドレスと当該複数の命令アドレスのそれぞれに関連する複数のデータアドレスと示すデータをハードウェアパフォーマンスカウンタから受信するステップと、
    前記複数の命令アドレスが等しい場合に、当該等しい複数の命令アドレスに関連する前記複数のデータアドレスの差であるストライド積を2つ以上決定するステップと、
    前記2つ以上のストライド積の最大公約数をストライド値として決定するステップと、
    を含む方法。
  2. 前記受信するステップは、
    第1の命令アドレスと第1のデータアドレスと示すデータを前記ハードウェアパフォーマンスカウンタから受信するステップと、
    第2の命令アドレスと第2のデータアドレスと示すデータを前記ハードウェアパフォーマンスカウンタから受信するステップと
    第3の命令アドレスと第3のデータアドレスとを示すデータをハードウェアパフォーマンスカウンタから受信するステップと、
    を含み、
    前記ストライド積を2つ以上決定するステップは、
    前記第1の命令アドレスが前記第2の命令アドレスと等しい場合、前記第2のデータアドレスから前記第1のデータアドレスを引くことにより、第1のストライド積を決定するステップと、
    前記第2の命令アドレスが前記第3の命令アドレスと等しい場合、前記第3のデータアドレスから前記第2のデータアドレスを引くことにより、第2のストライド積を決定するステップと、を含み
    前記最大公約数をストライド値として決定するステップは、
    前記第1のストライド積と前記第2のストライド積との最大公約数を前記ストライド値として決定するステップを含む、請求項に記載の方法。
  3. 前記受信するステップは、
    第1の命令アドレスと第1のデータアドレスとを示すデータを前記ハードウェアパフォーマンスカウンタから受信するステップと、
    第2の命令アドレスと第2のデータアドレスとを示すデータを前記ハードウェアパフォーマンスカウンタから受信するステップと、
    3の命令アドレスと第3のデータアドレスとを示すデータを前記ハードウェアパフォーマンスカウンタから受信するステップと、
    4の命令アドレスと第4のデータアドレスとを示すデータを前記ハードウェアパフォーマンスカウンタから受信するステップと、
    を含み、
    前記ストライド積を2つ以上決定するステップは、
    前記第1の命令アドレスが前記第2の命令アドレスと等しい場合、前記第2のデータアドレスから前記第1のデータアドレスを引くことにより、第1のストライド積を決定するステップと、
    前記第1の命令アドレスが前記第3の命令アドレスおよび前記第4の命令アドレスと等しい場合、前記第4のデータアドレスから前記第3のデータアドレスを引くことにより、第2のストライド積を決定するステップと、
    を含み、
    前記最大公約数をストライド値として決定するステップは、前記第1のストライド積と前記第2のストライド積との最大公約数を前記ストライド値として決定するステップ
    を含む、請求項に記載の方法。
  4. 記受信するステップ
    前記複数の命令アドレスと前記複数のデータアドレスとを第1の複数の連続データキャッシュミスを示す第1のデータセット部分として受信するステップを含む、請求項に記載の方法。
  5. 前記受信するステップは、
    前記第1の命令アドレスと第1のデータアドレスとを示す前記データ、前記第2の命令アドレスと前記第2のデータアドレスとを示す前記データ、及び前記第3の命令アドレスと前記第3のデータアドレスとを示す前記データ第1の複数の連続データキャッシュミスを示す第1のデータセット部分として受信するステップを含む、請求項に記載の方法。
  6. 前記受信するステップは、
    前記第1の命令アドレスと第1のデータアドレスとを示す前記データ、前記第2の命令アドレスと前記第2のデータアドレスとを示す前記データ、前記第3の命令アドレスと前記第3のデータアドレスとを示す前記データ、及び前記第4の命令アドレスと前記第4のデータアドレスとを示す前記データ第1の複数の連続データキャッシュミスを示す第1のデータセット部分として受信するステップを含む、請求項3に記載の方法。
  7. 前記受信するステップ
    第2の複数の連続データキャッシュミスを示す第2のデータセットを受信するステップを更に含み、
    前記第1のデータセットを受信するステップと、前記第2のデータセットを受信するステップとは、連続データキャッシュミスを示すデータが受信されない予め決められた期間だけ間隔が空いている、請求項4から6のいずれかに記載の方法。
  8. 前記受信するステップは、
    前記ハードウェアパフォーマンスカウンタから一連の周期的バーストで前記複数の命令アドレスと前記複数のデータアドレスとを示す前記データを受信する、請求項1から7のいずれかに記載の方法。
  9. ソフトウェアアプリケーションをプロファイリングするための装置であって、
    前記ソフトウェアアプリケーションを実行するプロセッサと、
    前記プロセッサに有効に結合され、複数の命令アドレスと当該複数の命令アドレスのそれぞれに関連する複数のデータアドレスと示すデータを前記プロセッサに提供するハードウェアパフォーマンスカウンタと、を含み、
    前記プロセッサが、前記複数の命令アドレスが等しい場合に、当該等しい複数の命令アドレスに関連する前記複数のデータアドレスの差であるストライド積を2つ以上決定し、当該2つ以上のストライド積の最大公約数をストライド値として決定する、装置。
  10. 前記ハードウェアパフォーマンスカウンタは、第1の命令アドレスと、該第1の命令アドレスに関連する第1のデータアドレスと、第2の命令アドレスと、該第2の命令アドレスに関連する第2のデータアドレスと、第3の命令アドレスと、該第3の命令アドレスに関連する第3のデータアドレスとを示すデータを前記プロセッサに提供し、
    前記プロセッサが、
    前記第1の命令アドレスが前記第2の命令アドレスと等しい場合、前記第2のデータアドレスから前記第1のデータアドレスを引くことにより、第1のストライド積を決定し、
    前記第2の命令アドレスが前記第3の命令アドレスと等しい場合、前記第3のデータアドレスから前記第2のデータアドレスを引くことにより、第2のストライド積を決定し、
    当該第1のストライド積と当該第2のストライド積との最大公約数を前記ストライド値として決定する、請求項に記載の装置。
  11. 前記ハードウェアパフォーマンスカウンタは、前記ソフトウェアアプリケーションを実行する間にデータキャッシュミスが発生した場合前記複数の命令アドレスと前記複数のデータアドレスとを示す前記データを前記プロセッサに提供す請求項に記載の装置。
  12. 前記ソフトウェアアプリケーションを実行する間に第1のデータキャッシュミスが発生した場合、前記ハードウェアパフォーマンスカウンタが、前記第1の命令アドレスと前記第1のデータアドレスとを示すデータを前記プロセッサに提供する、請求項10に記載の装置。
  13. 前記ソフトウェアアプリケーションを実行する間に第2のデータキャッシュミスが発生した場合、前記ハードウェアパフォーマンスカウンタが、前記第2の命令アドレスと前記第2のデータアドレスとを示すデータを前記プロセッサに提供する、請求項12に記載の装置。
  14. 前記第1のデータキャッシュミスと、前記第2のデータキャッシュミスとが、前記第1の命令アドレスに関連する連続データキャッシュミスである、請求項13に記載の装置。
  15. 前記複数の命令アドレスと前記複数のデータアドレスとを示す前記データを前記プロセッサへ提供すべく、当該プロセッサが、前記ハードウェアパフォーマンスカウンタを一連の周期的バーストでサンプリングする、請求項9から14のいずれかに記載の装置。
  16. ソフトウェアアプリケーションをプロファイリングするための装置であって、
    複数の命令アドレスと、当該複数の命令アドレスのそれぞれに関連する複数のデータアドレスとをキャプチャするハードウェアパフォーマンスカウンタと、
    前記ハードウェアパフォーマンスカウンタに有効に結合され、前記複数の命令アドレスが等しい場合に、当該等しい複数の命令アドレスに関連する前記複数のデータアドレスの差であるストライド積を2つ以上決定するストライド決定モジュールと
    前記2つ以上のストライド積の最大公約数をストライド値として決定する最大公約数モジュールと、
    を含む装置。
  17. 前記ハードウェアパフォーマンスカウンタは、第1の命令アドレスと第1のデータアドレス、第2の命令アドレスと第2のデータアドレス、第3の命令アドレスと第3のデータアドレスとをキャプチャし、
    前記ストライド決定モジュールは、前記第1の命令アドレスが前記第2の命令アドレスと等しい場合、前記第2のデータアドレスから前記第1のデータアドレスを引くことにより第1のストライド積を決定し、前記第2の命令アドレスが前記第3の命令アドレスと等しい場合に、前記第3のデータアドレスから前記第2のデータアドレスを引くことにより第2のストライド積を決定し、
    最大公約数モジュールは、当該第1のストライド積と当該第2のストライド積との最大公約数を前記ストライド値として決定する、
    請求項16に記載の装置
  18. データキャッシュミスが発生したときに、前記ハードウェアパフォーマンスカウンタが、前記複数の命令アドレス及び前記複数のデータアドレスをキャプチャする、請求項16または17に記載の装置。
  19. 前記装置は、
    前記ストライド決定モジュールを、スキッピング位相と検査位相との間で遷移させる、前記ストライド決定モジュールに有効に結合された位相マネージャをさらに含み、
    前記スキッピング位相の間に処理されるキャッシュミスの数は、前記検査位相の間に処理されるキャッシュミスの数よりも少ない、請求項16から18のいずれかに記載の装置。
  20. 前記装置は、
    前記位相マネージャが第1のスキッピング位相から検査位相への第1の遷移を生じさせるよう構成されている、請求項19に記載の装置。
  21. 前記装置は、
    前記位相マネージャが前記検査位相から第2のスキッピング位相への第2の遷移を生じさせるよう構成されている、請求項20に記載の装置。
  22. 複数の命令アドレスと、当該複数の命令アドレスのそれぞれに関連する複数のデータアドレスとを示すデータをハードウェアパフォーマンスカウンタから受信するステップと
    前記複数の命令アドレスが等しい場合、当該等しい複数の命令アドレスに関連する前記複数のデータアドレスの差であるストライド積を2つ以上決定するステップと、
    前記2つ以上のストライド積の最大公約数をストライド値として決定するステップと、
    前記ストライド値に基づき、ストライドプロファイルデータを生成するステップと、
    前記ストライドプロファイルデータに基づき、プログラムをコンパイルするステップと、
    をマシンに実行させるプログラムを記録した機械可読媒体。
  23. 前記受信するステップは、前記ハードウェアパフォーマンスカウンタから、第1の命令アドレスと、該第1の命令アドレスに関連する第1のデータアドレスとを示すデータ、第2の命令アドレスと該第2の命令アドレスに関連する第2のデータアドレスとを示すデータ、第3の命令アドレスと、該第3の命令アドレスに関連する第3のデータアドレスとを示すデータを受信するステップを含み、
    前記ストライド積を2つ以上決定するステップは、
    前記第1の命令アドレスが前記第2の命令アドレスと等しい場合、前記第2のデータアドレスから前記第1のデータアドレスを引くことにより、第1のストライド積を決定するステップと、
    前記第2の命令アドレスが前記第3の命令アドレスと等しい場合、前記第3のデータアドレスから前記第2のデータアドレスを引くことにより、第2のストライド積を決定するステップと、を含み、
    前記最大公約数をストライド値として決定するステップは、
    前記第1のストライド積と前記第2のストライド積との最大公約数を決定することにより前記ストライド値を決定するステップを含む、請求項22に記載の機械可読媒体。
  24. 前記受信するステップは、前記ハードウェアパフォーマンスカウンタから一連の周期的バーストで前記複数の命令アドレスと前記複数のデータアドレスとを示す前記データを受信する、請求項22または23に記載の機械可読媒体。
JP2006501313A 2003-05-27 2004-05-12 ソフトウェアアプリケーションのストライドプロファイリング方法および装置 Expired - Fee Related JP4361084B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/446,004 US7181723B2 (en) 2003-05-27 2003-05-27 Methods and apparatus for stride profiling a software application
PCT/US2004/014845 WO2004107177A2 (en) 2003-05-27 2004-05-12 Methods and apparatus for stride profiling a software application

Publications (2)

Publication Number Publication Date
JP2006524375A JP2006524375A (ja) 2006-10-26
JP4361084B2 true JP4361084B2 (ja) 2009-11-11

Family

ID=33450967

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006501313A Expired - Fee Related JP4361084B2 (ja) 2003-05-27 2004-05-12 ソフトウェアアプリケーションのストライドプロファイリング方法および装置

Country Status (7)

Country Link
US (1) US7181723B2 (ja)
EP (1) EP1627311B1 (ja)
JP (1) JP4361084B2 (ja)
CN (2) CN1795438B (ja)
AT (1) ATE368891T1 (ja)
DE (1) DE602004007913T2 (ja)
WO (1) WO2004107177A2 (ja)

Families Citing this family (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7937691B2 (en) 2003-09-30 2011-05-03 International Business Machines Corporation Method and apparatus for counting execution of specific instructions and accesses to specific data locations
US7373637B2 (en) 2003-09-30 2008-05-13 International Business Machines Corporation Method and apparatus for counting instruction and memory location ranges
US7395527B2 (en) * 2003-09-30 2008-07-01 International Business Machines Corporation Method and apparatus for counting instruction execution and data accesses
US20050071821A1 (en) * 2003-09-30 2005-03-31 International Business Machines Corporation Method and apparatus to autonomically select instructions for selective counting
US7421681B2 (en) * 2003-10-09 2008-09-02 International Business Machines Corporation Method and system for autonomic monitoring of semaphore operation in an application
US8381037B2 (en) * 2003-10-09 2013-02-19 International Business Machines Corporation Method and system for autonomic execution path selection in an application
US7257657B2 (en) * 2003-11-06 2007-08-14 International Business Machines Corporation Method and apparatus for counting instruction execution and data accesses for specific types of instructions
US7496908B2 (en) * 2004-01-14 2009-02-24 International Business Machines Corporation Method and apparatus for optimizing code execution using annotated trace information having performance indicator and counter information
US7392370B2 (en) * 2004-01-14 2008-06-24 International Business Machines Corporation Method and apparatus for autonomically initiating measurement of secondary metrics based on hardware counter values for primary metrics
US7293164B2 (en) * 2004-01-14 2007-11-06 International Business Machines Corporation Autonomic method and apparatus for counting branch instructions to generate branch statistics meant to improve branch predictions
US7526757B2 (en) * 2004-01-14 2009-04-28 International Business Machines Corporation Method and apparatus for maintaining performance monitoring structures in a page table for use in monitoring performance of a computer program
US7415705B2 (en) 2004-01-14 2008-08-19 International Business Machines Corporation Autonomic method and apparatus for hardware assist for patching code
US7290255B2 (en) * 2004-01-14 2007-10-30 International Business Machines Corporation Autonomic method and apparatus for local program code reorganization using branch count per instruction hardware
US7895382B2 (en) 2004-01-14 2011-02-22 International Business Machines Corporation Method and apparatus for qualifying collection of performance monitoring events by types of interrupt when interrupt occurs
US7296130B2 (en) * 2004-03-22 2007-11-13 International Business Machines Corporation Method and apparatus for providing hardware assistance for data access coverage on dynamically allocated data
US7421684B2 (en) 2004-03-22 2008-09-02 International Business Machines Corporation Method and apparatus for autonomic test case feedback using hardware assistance for data coverage
US7299319B2 (en) * 2004-03-22 2007-11-20 International Business Machines Corporation Method and apparatus for providing hardware assistance for code coverage
US7526616B2 (en) * 2004-03-22 2009-04-28 International Business Machines Corporation Method and apparatus for prefetching data from a data structure
US8135915B2 (en) 2004-03-22 2012-03-13 International Business Machines Corporation Method and apparatus for hardware assistance for prefetching a pointer to a data structure identified by a prefetch indicator
US7480899B2 (en) * 2004-03-22 2009-01-20 International Business Machines Corporation Method and apparatus for autonomic test case feedback using hardware assistance for code coverage
US7421540B2 (en) * 2005-05-03 2008-09-02 International Business Machines Corporation Method, apparatus, and program to efficiently calculate cache prefetching patterns for loops
US20070006167A1 (en) * 2005-05-31 2007-01-04 Chi-Keung Luk Optimizing binary-level instrumentation via instruction scheduling
US20070130114A1 (en) * 2005-06-20 2007-06-07 Xiao-Feng Li Methods and apparatus to optimize processing throughput of data structures in programs
US8037465B2 (en) * 2005-09-30 2011-10-11 Intel Corporation Thread-data affinity optimization using compiler
US8176475B2 (en) 2006-10-31 2012-05-08 Oracle America, Inc. Method and apparatus for identifying instructions associated with execution events in a data space profiler
JP4491500B2 (ja) * 2007-01-30 2010-06-30 富士通株式会社 演算処理装置、情報処理装置及び演算処理装置の制御方法
US8621468B2 (en) * 2007-04-26 2013-12-31 Microsoft Corporation Multi core optimizations on a binary using static and run time analysis
US9104794B2 (en) * 2008-07-15 2015-08-11 Microsoft Technology Licensing, Llc Automatic incremental application dependency discovery through code instrumentation
US8051332B2 (en) 2008-07-15 2011-11-01 Avicode Inc. Exposing application performance counters for .NET applications through code instrumentation
JP5326708B2 (ja) 2009-03-18 2013-10-30 富士通株式会社 演算処理装置および演算処理装置の制御方法
CN102567206B (zh) * 2012-01-06 2014-10-29 华中科技大学 一种剖析cuda程序行为的方法
US10019341B2 (en) * 2014-09-25 2018-07-10 Intel Corporation Using hardware performance counters to detect stale memory objects
JP6341045B2 (ja) 2014-10-03 2018-06-13 富士通株式会社 演算処理装置および演算処理装置の制御方法
US20180173631A1 (en) * 2016-12-21 2018-06-21 Qualcomm Incorporated Prefetch mechanisms with non-equal magnitude stride
CN107329908A (zh) * 2017-07-07 2017-11-07 联想(北京)有限公司 一种数据处理方法和电子设备
CN107601411A (zh) * 2017-10-11 2018-01-19 荆门市双创专利技术服务有限公司 一种带有理瓶机玻璃胶生产装置
US10649688B1 (en) * 2018-11-01 2020-05-12 Intel Corporation Precise longitudinal monitoring of memory operations
US11288046B2 (en) * 2019-10-30 2022-03-29 International Business Machines Corporation Methods and systems for program optimization utilizing intelligent space exploration
US11115494B1 (en) * 2020-02-26 2021-09-07 International Business Machines Corporation Profile clustering for homogenous instance analysis

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US126591A (en) * 1872-05-07 Improvement in hair-restoratives
GB2247546B (en) * 1990-08-31 1995-03-01 Sun Microsystems Inc Method and apparatus for predictive caching
US5396604A (en) * 1991-07-12 1995-03-07 Hewlett-Packard Company System and method for reducing the penalty associated with data cache misses
US5444850A (en) * 1993-08-04 1995-08-22 Trend Micro Devices Incorporated Method and apparatus for controlling network and workstation access prior to workstation boot
US5778436A (en) * 1995-03-06 1998-07-07 Duke University Predictive caching system and method based on memory access which previously followed a cache miss
US5694568A (en) * 1995-07-27 1997-12-02 Board Of Trustees Of The University Of Illinois Prefetch system applicable to complex memory access schemes
US5857097A (en) * 1997-03-10 1999-01-05 Digital Equipment Corporation Method for identifying reasons for dynamic stall cycles during the execution of a program
US6098154A (en) * 1997-06-25 2000-08-01 Sun Microsystems, Inc. Apparatus and method for generating a stride used to derive a prefetch address
US6076151A (en) * 1997-10-10 2000-06-13 Advanced Micro Devices, Inc. Dynamic memory allocation suitable for stride-based prefetching
US6047363A (en) * 1997-10-14 2000-04-04 Advanced Micro Devices, Inc. Prefetching data using profile of cache misses from earlier code executions
US6047359A (en) * 1997-11-04 2000-04-04 The United States Of America As Represented By The Secretary Of The Navy Predictive read cache memories for reducing primary cache miss latency in embedded microprocessor systems
US6134643A (en) * 1997-11-26 2000-10-17 Intel Corporation Method and apparatus for cache line prediction and prefetching using a prefetch controller and buffer and access history
US6560706B1 (en) * 1998-01-26 2003-05-06 Intel Corporation Interface for ensuring system boot image integrity and authenticity
US6430680B1 (en) * 1998-03-31 2002-08-06 International Business Machines Corporation Processor and method of prefetching data based upon a detected stride
US6134710A (en) * 1998-06-26 2000-10-17 International Business Machines Corp. Adaptive method and system to minimize the effect of long cache misses
US6463535B1 (en) * 1998-10-05 2002-10-08 Intel Corporation System and method for verifying the integrity and authorization of software before execution in a local platform
US7430668B1 (en) 1999-02-15 2008-09-30 Hewlett-Packard Development Company, L.P. Protection of the configuration of modules in computing apparatus
US6571318B1 (en) * 2001-03-02 2003-05-27 Advanced Micro Devices, Inc. Stride based prefetcher with confidence counter and dynamic prefetch-ahead mechanism
US7103529B2 (en) * 2001-09-27 2006-09-05 Intel Corporation Method for providing system integrity and legacy environment emulation
US7093124B2 (en) * 2001-10-30 2006-08-15 Intel Corporation Mechanism to improve authentication for remote management of a computer system
US20030126591A1 (en) * 2001-12-21 2003-07-03 Youfeng Wu Stride-profile guided prefetching for irregular code
US20030145314A1 (en) * 2002-01-31 2003-07-31 Khoa Nguyen Method of efficient dynamic data cache prefetch insertion
US20030204840A1 (en) * 2002-04-30 2003-10-30 Youfeng Wu Apparatus and method for one-pass profiling to concurrently generate a frequency profile and a stride profile to enable data prefetching in irregular programs
US7155575B2 (en) * 2002-12-18 2006-12-26 Intel Corporation Adaptive prefetch for irregular access patterns

Also Published As

Publication number Publication date
US7181723B2 (en) 2007-02-20
WO2004107177A2 (en) 2004-12-09
DE602004007913T2 (de) 2008-04-30
CN102681947B (zh) 2015-12-16
CN1795438A (zh) 2006-06-28
CN1795438B (zh) 2012-03-21
US20040243981A1 (en) 2004-12-02
ATE368891T1 (de) 2007-08-15
EP1627311A2 (en) 2006-02-22
JP2006524375A (ja) 2006-10-26
DE602004007913D1 (de) 2007-09-13
WO2004107177A3 (en) 2005-07-28
CN102681947A (zh) 2012-09-19
EP1627311B1 (en) 2007-08-01

Similar Documents

Publication Publication Date Title
JP4361084B2 (ja) ソフトウェアアプリケーションのストライドプロファイリング方法および装置
US7496908B2 (en) Method and apparatus for optimizing code execution using annotated trace information having performance indicator and counter information
US8191049B2 (en) Method and apparatus for maintaining performance monitoring structures in a page table for use in monitoring performance of a computer program
US7328433B2 (en) Methods and apparatus for reducing memory latency in a software application
US7114036B2 (en) Method and apparatus for autonomically moving cache entries to dedicated storage when false cache line sharing is detected
US7373637B2 (en) Method and apparatus for counting instruction and memory location ranges
US7392370B2 (en) Method and apparatus for autonomically initiating measurement of secondary metrics based on hardware counter values for primary metrics
US8689190B2 (en) Counting instruction execution and data accesses
US7093081B2 (en) Method and apparatus for identifying false cache line sharing
US8949579B2 (en) Ineffective prefetch determination and latency optimization
US20050155022A1 (en) Method and apparatus for counting instruction execution and data accesses to identify hot spots
JP6320431B2 (ja) データをプリフェッチするためのコンピュータ・システム、コンピュータ・プログラム、コンピュータ実施方法
US20050155018A1 (en) Method and apparatus for generating interrupts based on arithmetic combinations of performance counter values
US8090752B2 (en) Monitoring memory consumption
US7937691B2 (en) Method and apparatus for counting execution of specific instructions and accesses to specific data locations
US20050071516A1 (en) Method and apparatus to autonomically profile applications
US20050071816A1 (en) Method and apparatus to autonomically count instruction execution for applications
JP2008210011A (ja) プロファイリング装置およびプロファイリングプログラム
Ibrahim et al. Characterizing the relation between Apex-Map synthetic probes and reuse distance distributions
US20050071608A1 (en) Method and apparatus for selectively counting instructions and data accesses
US20050071610A1 (en) Method and apparatus for debug support for individual instructions and memory locations
US7774759B2 (en) Methods and apparatus to detect a macroscopic transaction boundary in a program
US20190384690A1 (en) Method for estimating memory reuse-distance profile
Beyls et al. Visualization enables the programmer to reduce cache misses
Vestberg Low-Overhead Memory Access Sampler: An Efficient Method for Data-Locality Profiling

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20090304

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090310

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090603

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090616

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090702

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20090721

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20090811

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120821

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees