(57)【要約】【課題】データ処理システムに関し、追跡データの管理や取り扱いを容易にするための新たな追跡データの表現を提供する。【解決手段】追跡回路２２、６は、実行済みプログラム命令列を表現し、実行済みプログラム命令列の開始アドレスを示す開始アドレスインジケータと、この開始アドレスから始まる実行済みプログラム命令列内の分岐結果列を示す分岐結果インジケータと、この分岐結果列が検出された回数のカウントを示すカウントインジケータとを含む追跡対象３４を形成する。この追跡回路は、オンチップ２２であっても、オフチップ６であってもよい。追跡対象は、当該追跡対象によって表現されたプログラム命令列に続く次のプログラム命令列の開始アドレスのインジケータを含んでいてもよい。【選択図】図３
2018163656.tif 000002
【特許請求の範囲】
【請求項１】
プログラムのプログラム命令を実行する処理回路と、
複数の追跡対象を生成する追跡回路と、
を具備し、
追跡対象は、実行済みプログラム命令列を、
前記実行済みプログラム命令列の開始アドレスを示す開始アドレスインジケータ、
前記開始アドレスから始まる前記実行済みプログラム命令列内の分岐結果列を示す分岐結果インジケータ、及び
前記分岐結果列が検出された回数のカウントを示すカウントインジケータ、
として表現する、
ことを特徴とするデータ処理を行う装置。
【請求項２】
前記追跡対象には、前記実行済みプログラム命令列の後に実行される次のプログラム命令列の開始アドレスを示す次アドレスインジケータが含まれる、ことを特徴とする請求項１に記載の装置。
【請求項３】
前記カウントインジケータは１で飽和状態となり、前記追跡対象は、プログラム命令が実行されたか否かを示す範囲データを提供する、ことを特徴とする請求項１に記載の装置。
【請求項４】
前記処理回路は、各プログラム命令列を実行する複数のプロセッサを備え、前記追跡回路は、前記プログラム命令列を別々に表現する前記追跡対象を生成するよう構成されている、ことを特徴とする請求項１に記載の装置。
【請求項５】
前記処理回路は、前記処理回路によって実行された分岐命令の分岐命令結果を示すデータと、前記処理回路によって実行された分岐命令の非静的分岐ターゲットのプログラム命令アドレスを前記追跡回路に提供するよう構成されている、ことを特徴とする請求項１に記載の装置。
【請求項６】
前記処理回路は、前記処理回路によって実行されたプログラム命令のプログラム命令アドレスを同期点として示すデータを前記追跡回路に提供するよう構成されている、ことを特徴とする請求項５に記載の装置。
【請求項７】
前記追跡回路は、前記処理回路から受信したプログラム命令アドレスデータに応じて、現在追跡中のプログラム命令列の追跡を終了し、次に追跡するプログラム命令列の追跡を開始するよう構成されている、ことを特徴とする請求項５に記載の装置。
【請求項８】
前記追跡回路は、前記追跡対象をまとめてプロファイル前駆データを形成し、前記プロファイル前駆データは、前記プログラムと共に、所定のプログラム命令列が前記処理回路によって何回実行されたかを示す、ことを特徴とする請求項１に記載の装置。
【請求項９】
前記追跡回路は、前記追跡対象をまとめてプロファイル前駆データを形成し、前記プロファイル前駆データは、各分岐ターゲットアドレスを有する分岐命令アドレスのペア数を示す、ことを特徴とする請求項２に記載の装置。
【請求項１０】
前記プロファイル前駆データには、各開始アドレスによって支持された前記追跡対象を示すデータが含まれる、ことを特徴とする請求項９に記載の装置。
【請求項１１】
前記プロファイル前駆データを形成する追跡対象の前記開始アドレスの少なくとも一部は、前記プロファイル前駆データを形成する他の追跡対象の開始アドレスからのアドレスオフセットとして示される、ことを特徴とする請求項１０に記載の装置。
【請求項１２】
前記追跡対象は、共有中間分岐ノードを通過し、リーフノードで個別に終端する共通開始アドレスから始まる各分岐結果列に対応する複数の分岐実行パスを特定する、ことを特徴とする請求項１に記載の装置。
【請求項１３】
前記リーフノードの各々は、当該リーフノードで終端する分岐実行パスが前記処理回路によって実行された回数のカウントを示す関連カウントインジケータを有する、ことを特徴とする請求項１２に記載の装置。
【請求項１４】
所定の中間ノードを含む追跡対象では、前記共通開始アドレスから前記所定の中間ノードまで延びるプログラム命令列が実行された回数のカウントが、前記所定の中間ノードを含む実行パスのリーフノードと関連付けられたカウント値の合計で示される、ことを特徴とする請求項１３に記載の装置。
【請求項１５】
リーフノードの少なくとも一部は、前記リーフノードで終端する分岐実行パスの後に前記処理回路によって実行される次のプログラム命令のアドレスを示す関連次アドレスインジケータを有する、ことを特徴とする請求項１２に記載の装置。
【請求項１６】
前記プロファイル前駆データは、前記分岐結果列のランレングス符号化を行う、ことを特徴とする請求項８に記載の装置。
【請求項１７】
前記処理回路は、集積回路のプロセッサコアであり、前記追跡回路は、
前記集積回路内のオンチップ追跡回路、及び
通信インタフェースを介して前記集積回路に接続されたオフチップ追跡回路、
のいずれかである、ことを特徴とする請求項１に記載の装置。
【請求項１８】
複数の追跡対象を生成するプログラムのプログラム命令を実行する処理回路と接続するための追跡回路であって、
追跡対象は、実行済みプログラム命令列を、
前記実行済みプログラム命令列の開始アドレスを示す開始アドレスインジケータ、
前記開始アドレスから始まる前記実行済みプログラム命令列内の分岐結果列を示す分岐結果インジケータ、及び
前記分岐結果列が検出された回数のカウントを示すカウントインジケータ、
として表現する、ことを特徴とする追跡回路。
【請求項１９】
プログラムのプログラム命令を実行する工程と、
複数の追跡対象を生成する工程と、
を具備し、
追跡対象は、実行済みプログラム命令列を、
前記実行済みプログラム命令列の開始アドレスを示す開始アドレスインジケータ、
前記開始アドレスから始まる前記実行済みプログラム命令列内の分岐結果列を示す分岐結果インジケータ、及び
前記分岐結果列が検出された回数のカウントを示すカウントインジケータ、
として表現する、ことを特徴とするデータ処理方法。
【請求項２０】
プログラムの実行を分析する方法であって、
前記プログラムのプログラム命令を特定するデータを受信する工程と、
実行済みプログラム命令列を、
前記実行済みプログラム命令列の開始アドレスを示す開始アドレスインジケータ、
前記開始アドレスから始まる前記実行済みプログラム命令列内の分岐結果列を示す分岐結果インジケータ、及び
前記分岐結果列が検出された回数のカウントを示すカウントインジケータ、
として表現する追跡対象を特定するデータを受信する工程と、
前記プログラム命令を特定するデータと、所定のプログラム命令が少なくとも何回実行されたか判定する前記追跡対象を特定するデータとを分析する工程と、
を具備する、ことを特徴とする方法。
【請求項２１】
前記分析工程では、前記所定のプログラム命令がどの実行パスに含まれているかを判断する、ことを特徴とする請求項１９に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、データ処理システムの分野に関し、特に、データ処理システム内で実行されたプログラム命令列に対応する追跡データの表現に関するものである。
【背景技術】
【０００２】
データ処理システムに追跡メカニズムを備えることで、そのデータ処理システムが追跡するプログラム命令を通る実行パス(path)を示す追跡データを生成することにより、プログラム命令列の実行を分析することができることが知られている。このような追跡メカニズムは、例えば、ますます複雑化するデータ処理システムやそれに関連するプログラムで行われるデバッグ及び診断処理において有用である。
【０００３】
追跡メカニズムを提供する上で生じる課題は、管理や取り扱いが困難となり得る大量の追跡データが生成される場合があるということである。この追跡データ量はさまざまな方法で削減し得る。いくつかの追跡メカニズムの形態において、追跡データは、プログラム自体が利用可能である場合に、プログラムを通して実行パスを追跡するのに必要な情報、例えば、条件付き分岐命令についての実行済み又は未実行の結果、プログラムフローのデータに依存する変更、周期的な同期アドレスデータを与えるだけである。さらに、追跡データは、さまざまな圧縮技術により圧縮が行われ、データ量の低減と、追跡データの取り扱いの簡素化が図られてもよい。このような圧縮技術は、追跡データがさまざまな実行スレッド（例えば、マルチコアプロセッサ内におけるさまざまなプロセッサによって実行されるさまざまなスレッド）を示す列に分けられる場合に、交互に配置されたさまざまなスレッドからの追跡データを圧縮する場合と比較して、より高度な圧縮を可能にするスレッド内に高い相関度が得られる傾向があるため、効率向上が図られることがある。
【発明の概要】
【０００４】
本開示の少なくともいくつかの実施例によれば、プログラムのプログラム命令を実行する処理回路と、
複数の追跡対象を生成する追跡回路と、
を具備し、
追跡対象は、実行済みプログラム命令列を、
前記実行済みプログラム命令列の開始アドレスを示す開始アドレスインジケータ、
前記開始アドレスから始まる前記実行済みプログラム命令列内の分岐結果列を示す分岐結果インジケータ、及び
前記分岐結果列が検出された回数のカウントを示すカウントインジケータ、
として表現する、
ことを特徴とするデータ処理を行う装置が提供される。
【０００５】
本開示の少なくともいくつかの実施例によれば、複数の追跡対象を生成するプログラムのプログラム命令を実行する処理回路と接続するための追跡回路であって、
追跡対象は、実行済みプログラム命令列を、
前記実行済みプログラム命令列の開始アドレスを示す開始アドレスインジケータ、
前記開始アドレスから始まる前記実行済みプログラム命令列内の分岐結果列を示す分岐結果インジケータ、及び
前記分岐結果列が検出された回数のカウントを示すカウントインジケータ、
として表現する、ことを特徴とする追跡回路が提供される。
【０００６】
本開示の少なくともいくつかの実施例によれば、
プログラムのプログラム命令を実行する工程と、
複数の追跡対象を生成する工程と、
を具備し、
追跡対象は、実行済みプログラム命令列を、
前記実行済みプログラム命令列の開始アドレスを示す開始アドレスインジケータ、
前記開始アドレスから始まる前記実行済みプログラム命令列内の分岐結果列を示す分岐結果インジケータ、及び
前記分岐結果列が検出された回数のカウントを示すカウントインジケータ、
として表現する、ことを特徴とするデータ処理方法が提供される。
【０００７】
本開示の少なくともいくつかの実施例によれば、プログラムの実行を分析する方法であって、
前記プログラムのプログラム命令を特定するデータを受信する工程と、
実行済みプログラム命令列を、
前記実行済みプログラム命令列の開始アドレスを示す開始アドレスインジケータ、
前記開始アドレスから始まる前記実行済みプログラム命令列内の分岐結果列を示す分岐結果インジケータ、及び
前記分岐結果列が検出された回数のカウントを示すカウントインジケータ、
として表現する追跡対象を特定するデータを受信する工程と、
前記プログラム命令を特定するデータと、所定のプログラム命令が少なくとも何回実行されたか判定する前記追跡対象を特定するデータとを分析する工程と、
を具備する、ことを特徴とする方法が提供される。
【０００８】
本技術のさらなる態様、特徴及び利点は、添付の図面と併用される以下の実施例の説明から明らかとなるであろう。
【図面の簡単な説明】
【０００９】
【図１】オンチップ前駆データ形成を用いたデータ処理システムを概略的に示す図である。
【図２】オフチップ前駆データ形成を用いたデータ処理システムを概略的に示す図である。
【図３】実行済みプログラム命令列と、その列を示す関連する追跡対象を概略的に示す図である。
【図４】実行済みプログラム命令列を示す追跡対象のさらなる例を概略的に示す図である。
【発明を実施するための形態】
【００１０】
図１は、オンチップ前駆データ形成を用いたデータ処理システム２を概略的に示す図である。このデータ処理システム２は、オフチップ追跡回路６を介してプログラム可能な汎用コンピュータ８に接続されたシステムオンチップ集積回路４を備えている。集積回路４は、プロセッサコア１４、１６が実行するプログラム命令１２が格納されたメモリ１０を備えている。プロセッサコア１４、１６と関連付けられている各キャッシュメモリ１８、２０には、プログラム命令１２と操作されるデータが格納されている。
【００１１】
オンチップ追跡回路２２は、プロセッサコア１４、１６に接続され、それらによるプログラム命令の実行を監視する。プログラム命令を実行する処理回路として機能するプロセッサコア１４、１６は、該コア１４、１６が実行した条件付き分岐命令の分岐命令結果を示すデータと、コア１４、１６が追跡した非静的分岐ターゲットのプログラム命令アドレスをオンチップ追跡回路２２に提供する。さらに、プロセッサコア１４、１６は、定期的に同期点アドレスを提供するなど、コア１４、１６が実行したプログラム命令のプログラム命令アドレスを示すデータを同期点として提供してもよい。オンチップ追跡回路２２は、コア１４、１６から受信したデータのバッファリングを行うのに用いられ、本実施例では、それデータを用いて、以下にさらに説明するように、追跡対象を含むプロファイル前駆データのオンチップ生成を行う。
【００１２】
オンチップ追跡回路２２は、それぞれ独立した一連の実行特徴データを各コア１４、１６から受信し、これらのデータはそれぞれ別々に処理されて、各プロファイル前駆データ、すなわち、コア１４に対して一連のプロファイル前駆データ、コア１６に対しても一連のプロファイル前駆データが形成されてもよい。
【００１３】
オンチップ追跡回路２２は、コア１４、１６から受信したバッファリングされたデータを処理して、追跡対象を形成する。各追跡対象は、実行済みプログラム命令列の開始アドレスを示す開始アドレスインジケータと、その開始アドレスから始まる実行済みプログラム命令列内における分岐結果列を示す分岐結果インジケータと、オンチップ追跡回路２２によって監視され、生成されたプロファイル前駆データによって表されるプログラム命令の実行ウィンドウ内において分岐結果列が検出された回数のカウントを示すカウントインジケータとを用いて、実行済みプログラム命令列を表す。生成されたプロファイル前駆データには、複数の追跡対象が含まれ、それぞれ観測された実行済みプログラム命令列を示している。
【００１４】
プロファイル前駆データの追跡対象は、その実行済みプログラム命令列内で実行された特定のプログラム命令を識別するため、プログラム命令１２と組み合わせて考慮されてもよい。追跡対象に次アドレスインジケータが含まれる他の実施例では、プロファイル前駆データを単独で用いて、各分岐ターゲットが対応する受け取った分岐命令の使用カウントを得ることもできる。
【００１５】
このような追跡対象を含むプロファイル前駆データにより、実行挙動をコンパクトに表現することができるが、ウィンドウ全体を通して正確なエンドツーエンド実行フローの判定を行うことはできない。どちらかといえば、実行をより統計に基づく観点から捉えることにより、実行済みプログラム命令列を、それらが検出された回数と共に特定することができる。
【００１６】
コード範囲のテストを行うこと、すなわち、プログラム全体の中でどのプログラム命令が実行されたか又は実行されなかったかチェックすることを目的としたいくつかの実施例では、カウントインジケータは、１で飽和することにより、特定のコードシーケンスが少なくとも一回実行されたか否かを示してもよい。
【００１７】
少なくともいくつかの実施例では、追跡対象には、次アドレスインジケータを含む追跡対象の実行済みプログラム命令列に続いて実行される次のプログラム命令列の開始アドレスを示す次アドレスインジケータが含まれていてもよい。従って、追跡対象には、事実上、次の追跡対象を示すリンク情報が含まれていてもよい。これにより、追跡対象が互いにどのようにリンクし合うのかに関する情報の少なくとも一部を回復することが可能となり、プログラム実行フローをより包括的な視点で捉えることができる。
【００１８】
オンチップ追跡回路２２は、コア１４、１６から受信したバッファリングされたデータを分析する際、この受信データを、受信したプログラム命令アドレスデータ（例えば、データ依存分岐ターゲットデータ、同期点データなど）を用いて、追跡対象と関連付けられるシーケンスに分け、形成される追跡対象間の境界を示すのに用いられてもよく、それにより、現時点で追跡されたプログラム命令列の追跡終了と、次に追跡を行うプログラム命令列の追跡開始をトリガする。
【００１９】
前述したように、図１の例におけるオンチップ追跡回路２２によって形成された追跡対象を含むプロファイル前駆データは、実際のプログラム実行フローを理解するために実行されたプログラム命令１２と共に分析が行われてもよい。これは、現在コンパクトに表現されているプロファイル前駆データを、オフチップ追跡回路６に転送することによって行われてもよく、そこからデータは汎用コンピュータ８によって読み出すことができる。また、この汎用コンピュータ８は、プロファイル前駆データとともに、集積回路４によって実行されたプログラム命令１２の別のコピーにアクセスすることにより、そのプロファイル前駆データに特定された追跡対象に対応するさまざまなプログラム命令列内で特定のプログラム命令の識別を行ってもよい。
【００２０】
追跡対象を含むプロファイル前駆データは、さまざまな形態を取ってもよい。いくつかの形態の例としては、プロファイル前駆データを形成する追跡対象の開始アドレスは、プロファイル前駆データ内の他の追跡対象の開始アドレスからのアドレスオフセットとして表されてもよい。従って、比較的少ない絶対アドレスがプロファイル前駆データ内で特定され、他の追跡対象のアドレスが、これらの絶対的に特定された比較的少ない開始アドレスからのオフセットを用いて導かれる必要がある。これにより、プロファイル前駆データをさらにコンパクトにすることができる。
【００２１】
追跡対象の形態は、いくつかの実施例では、それぞれが一つの実行パスを特定するような形態であってもよい。他の実施例では、追跡対象は、共通開始アドレスから始まり、共有中間分岐ノードを通過して、各リーフノード(leaf node)で個々に終端する各分岐結果列に対応する複数の分岐実行パスを特定してもよい。このような構成により、実行パスをよりコンパクトに表現することで、プロファイル前駆データのデータ量を減らしてもよい。このような実施例では、各リーフノードは、該当する一連のプロファイル前駆データに示すように、そのリーフノードで終端する実行パスが実行された回数のカウントを示す関連カウントインジケータを有していてもよい。このような構成では、追跡対象の所定の中間ノードは、共通開始アドレスからその所定中間ノードを通過するまで延在するプログラム命令列が何回実行されたかのカウントを、その所定中間ノードを含む実行パスのリーフノードと関連付けられたカウント値の合計で表してもよい。これにより、各中間ノードから最終的なリーフノードまで前方へ追跡を行うことにより、各リーフノードカウントの合計を得ることができ、それにより、当該中間ノードについてのカウントが得られる。
【００２２】
リーフノードは、そのリーフノードで終端する分岐実行パスに続いて、処理回路によって実行された次のプログラム命令のアドレスを示す関連する次アドレスインジケータを有していてもよい。そのような関連する次アドレス値は必ずしも入手可能であるとは限らないので、すべてのリーフノードが有していなくてもよい。前述したように、追跡対象には、その追跡対象についての開始アドレスから始まる実行済みプログラム命令列内の分岐結果列を示す分岐結果が含まれる。プロファイル前駆データのデータ量は、分岐結果列のランレングス符号化を行う分岐結果インジケータを用いて減らしてもよい。
【００２３】
図１は、オンチップ追跡回路２２によって、追跡対象を含むプロファイル前駆データを形成する実施例を示す。図２は、その追跡対象を含むプロファイル前駆データを形成する役割を果たすのがオフチップ追跡回路６である実施例を示す。図２の実施例では、オンチップ追跡回路２２は、処理回路（コア１４、１６）によって実行された分岐命令についての分岐命令結果を示すデータ（Ｅ／Ｎデータ）をオフチップ追跡回路６に渡す。さらに、オンチップ追跡回路２２は、実行された分岐命令の非静的分岐ターゲット（例えば、データ依存分岐ターゲット）のプログラムアドレス、並びに、プログラム命令アドレス又は周期的な同期点として機能するプログラム命令を示すアドレスデータ（［ａｄｄｒ］）をオフチップ追跡回路６に渡す。
【００２４】
図２の本実施例では、オフチップ追跡回路６は、オンチップ追跡回路２２から送られてきたデータから追跡対象を形成する。オフチップ追跡回路によって形成されたプロファイル前駆データは、次に、汎用コンピュータ８に送られて、プログラム命令１２と共に分析され、デバッグ及び診断情報（並びにプログラム命令１２や集積回路４の動作に関する他の情報）が得られる。
【００２５】
ターゲット対象を形成する追跡回路は、オンチップ追跡回路２２やオフチップ追跡回路６内に設けられた専用ハードウェアであってもよい。または、自身のプログラムコードを実行することにより追跡対象を形成するよう機能する専用小型プロセッサコアなど、より汎用のハードウェア（例えば、追跡対象を生成するよう機能するファームウェア）であってもよい。また、他の実施例では、追跡回路は、汎用コンピュータ８の処理回路によって設けられてもよく、この汎用コンピュータ８は、プログラム制御の下実行して、プロファイル前駆データを形成し、そのような汎用コンピュータ８によって形成されたプロファイル前駆データは、他の場所への送信のためよりコンパクトに表現されているという利点を生かして、分析のために他の場所へ送られる。
【００２６】
図３は、分岐命令Ｂと、分岐命令ではないのでプログラムフローが変わる点を形成できない命令Ｉとを含むプログラム命令列を概略的に示す。図示の例では、命令２４に対応するａｄｄｒ０で、プログラム命令列が入力される。その後、プログラムフローは、プログラム命令２４から条件付き分岐命令２６へと３回通過する。開始アドレスａｄｄｒ０の後にプログラム命令列を実行する場合、さらに２つの条件付き分岐命令２８、３０は通過して実行されず、その後、実行済み（取られた）分岐命令２６に達する。分岐命令２６、２８、３０が実行されたか否かは、図３では、ＥかＮで示される。
【００２７】
３回目に分岐命令２６と遭遇する時は、実行されないので、この命令２４の開始アドレスａｄｄｒ０までジャンプして戻ることはない。従って、分岐命令２６についての分岐結果列は、実行済み、実行済み、未実行（Ｅ、Ｅ、Ｎ）となる。図示のループ内の各分岐命令２８、３０は、３回すべてにおいて未実行なので、分岐結果は、未実行、未実行、未実行（Ｎ、Ｎ、Ｎ）となる。
【００２８】
３回目の分岐命令２６の未実行の後、プログラムフローは、実行済み（取られた）分岐命令であり、新しい開始アドレスａｄｄｒ１への分岐をトリガする分岐命令３２へと進む。
【００２９】
また、図３では、図３に示す一連の実行パスに対応する追跡対象３４も概略的に示す。具体的には、追跡対象３４は、命令２４の命令アドレスに対応する列の開始アドレスを示す開始アドレスインジケータ［ａｄｄｒ０］を含んでいる。列の最初の２つのトラバース（パス０(path0)、パス１(path1)）の分岐命令２８、３０、２６に対応する分岐結果列を示す分岐結果インジケータは、Ｎ、Ｎ、Ｅで示され、未実行、未実行、実行済みを示している。カウントインジケータ＃２は、この分岐結果列、すなわち、Ｎ、Ｎ、Ｅが２回発生したものとして検出されたことを示すものである。追跡対象３４は、開始アドレスａｄｄｒ０で開始するさらにもう一つの実行パス、すなわち、命令２４から分岐命令３２まで延びる実行パスを示す。このパスの分岐結果インジケータは、このパスに沿って続くように、分岐命令２８、３０、２６、３２の結果に対応して、未実行、未実行、未実行、実行済みである。このパスは、カウントインジケータ＃１で示されるように、１回追跡される。この実行パスは、パス２(path2)に対応する。
【００３０】
追跡対象３４には示されていないが、いくつかの実施例では、追跡対象は、当該追跡対象に示されるプログラム命令列に続いて実行される次のプログラム命令列の開始アドレスを示す働きをしてもよい。例えば、追跡対象３４は、分岐命令３２の実行後に実行されるプログラム命令列の開始アドレスａｄｄｒ２に対するポインタをさらに含んでいてもよい。
【００３１】
以下の疑似コードは、例の追跡対象を生成するために、データを特定する分岐結果とアドレスデータを受け取った際に行われ得る処理をプログラミングで表現したものである。このような疑似コードは、例えば、図１のオンチップ追跡回路２２や図２のオフチップ追跡回路によってファームウェアとして実行されたコードに対応してもよい。また、この疑似コード内のコメントは、図４に示すような各追跡対象内で複数の実行パスをリーフや分岐で表現した追跡対象の可能な形態を示している。
＃事前デコードプロファイルを構築するための疑似コード
＃入力はイベント列(a sequence of events)
＃ＡＤＤＲ（アドレス）−特定アドレスへの分岐
＃分岐(BRANCH)（Ｅ）−次の分岐が取られた
＃分岐(BRANCH)（Ｎ）−次の分岐が取られなかった
Sequence = {
start_addr: address
branches: LIST OF (E or N)
next_addr: address
}
＃追跡対象なしで開始
MAP (Sequence -> integer) objects = []
＃現在形成中の列
Sequence current_seq = None
＃各イベントを処理
for Event evt in trace:
if evt is ADDR(addr):
if current_seq:
# この分岐は作業中の列を終端する
current_seq.next_addr = addr
if current_seq in objects:
# この列についてすでに対象が存在する
objects[current_seq] += 1
else:
# 新しい列、カウントが１の対象に追加
objects[current_seq] = 1
# 新しい列を開始
current_seq = {start_addr: addr, [], None}
else if evt is E or N:
current_seq.branches.append(evt)
＃最後の列を処理することでまとめる
if current_seq in objects:
objects[current_seq] += 1
else:
objects[current_seq] = 1
＃ここで‘対象’マップは一連の列から構成され、各列は、
＃−開始アドレス
＃−一連のＥ／Ｎインジケータ
＃−最終アドレス
＃−カウント
＃なお、所定の開始アドレスは、一般に、いくつかの列に位置する
＃後にこのデータ構造をプログラムプロファイルに変換するため
＃プログラム画像が利用可能となり次第
for Sequence s in objects:
pc = s.start_addr
for b in s.branches:
inspect image to find address pc' of next branch
add s.count to each instruction from pc to pc'
if b == E:
pc = target of b
add s.count to count of banches from b to target of b
else:
pc = pc'
add s.count to each instruction from pc to s.end_addr
＃データは共通のプレフィックスを統合することでよりコンパクトに表現可能である。
＃一つの開始アドレスにつき一つのエントリを有する新しい配列と列を作成
＃分岐データ構造として表現されたそのアドレスから開始
＃このよりコンパクトな構造は直接形成可能である。
＃
＃このコンパクトなデータ構造からプログラムプロファイルを作成するには、
＃元のフラットなデータ構造に展開してもよいし、直接処理してもよい。
【００３２】
図４は、各追跡対象内で複数の実行パスをリーフや分岐で表現した複数の追跡対象を示す。最初の追跡対象は、絶対アドレス［ａｄｄｒ］を特定する。それ以降の追跡対象は、最初の追跡対象の開始アドレスからのオフセット値、すなわち、［Δａｄｄｒ］に基づいてそれぞれの開始アドレスを特定する。個々の追跡対象は、開始アドレスから延び、中間ノード(intermediate node)又はリーフノード(leaf node)に対応する分岐命令を通過する実行パスを表している。リーフノードは、観測／検出された分岐結果列を終端し、図４の表現では「ｏ」で示される。中間ノードは、観測された実行パスを終端せず、図４では「＃」で示される分岐結果を表している。リーフノードは、それに関連付けられたカウントインジケータと、必要に応じて、そのリーフノードに対応する分岐命令の後に実行されるプログラム命令列の次のアドレスを示す次アドレスインジケータを有している。中間ノードに対応する分岐命令が実行された回数は、示された分岐パス内でその中間ノードに続く各リーフノードに関連付けられたカウント値を合計することで判定してもよい。
【００３３】
本願において、「するよう構成された」という表現は、装置の構成要素が規定の動作を実行可能な構成を有することを意味するものとして用いられる。これに関し、「構成」とは、ハードウェアやソフトウェアの配置やそれらを相互に接続する方法を指す。例えば、上記装置は、そのような規定の動作を行うための専用ハードウェアを備えていたり、その機能を果たすようプロセッサやその他の処理装置をプログラミングしてもよい。「するよう構成された」という表現は、装置の構成要素に対して、その規定の動作を行うために何らかの変更を加える必要があるということを意味するものではない。
【００３４】
添付の図面を参照して本発明の例示的な実施例を詳細に説明してきたが、本発明はこのような明確な実施例に限定されるものではなく、添付の特許請求の範囲に記載の本発明の範囲や精神から逸脱することなく、当業者によってさまざまな変更及び改良を行えることを理解されたい。
【符号の説明】
【００３５】
２・・・データ処理システム
４・・・集積回路
６・・・オフチップ追跡回路
８・・・汎用コンピュータ
１０・・・メモリ
１２・・・プログラム命令
１４、１６・・・プロセッサコア
１８、２０・・・キャッシュメモリ
２２・・・オンチップ追跡回路
２８、３０、２６、３２・・・分岐命令
３４・・・追跡対象
【図１】
2018163656.tif 000003
【図２】
2018163656.tif 000004
【図３】
2018163656.tif 000005
【図４】
2018163656.tif 000006
【外国語明細書】
2018163656000001.pdf