JP4749745B2 - コード・カバレッジ用のハードウェア支援を使用する自律テスト・ケース・フィードバックのための方法および装置 - Google Patents

コード・カバレッジ用のハードウェア支援を使用する自律テスト・ケース・フィードバックのための方法および装置 Download PDF

Info

Publication number
JP4749745B2
JP4749745B2 JP2005077200A JP2005077200A JP4749745B2 JP 4749745 B2 JP4749745 B2 JP 4749745B2 JP 2005077200 A JP2005077200 A JP 2005077200A JP 2005077200 A JP2005077200 A JP 2005077200A JP 4749745 B2 JP4749745 B2 JP 4749745B2
Authority
JP
Japan
Prior art keywords
code
instruction
data
access indicator
execution
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
JP2005077200A
Other languages
English (en)
Other versions
JP2005276201A (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.)
International Business Machines Corp
Original Assignee
International Business Machines 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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2005276201A publication Critical patent/JP2005276201A/ja
Application granted granted Critical
Publication of JP4749745B2 publication Critical patent/JP4749745B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3676Test management for coverage analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Devices For Executing Special Programs (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Test And Diagnosis Of Digital Computers (AREA)
  • Advance Control (AREA)

Description

本発明は、一般に改善されたデータ処理システムに関する。具体的に言えば、本発明は、データ処理システムにおいて性能データを取得するための方法および装置を提供する。さらに具体的に言えば、本発明は、データ処理システムにおいてコード・カバレッジ・データを取得する際の、ソフトウェア・ツールに対するハードウェア支援のための方法および装置を提供する。
関連出願の相互参照
本発明は、2003年9月30日出願、整理番号AUS920030477US1の「Method and Apparatus for Counting Instruction Execution and Data Accesses」という名称の米国特許第10/675777号と、2003年9月30日出願、整理番号AUS920030478US1の「Method and Apparatus for Selectively Counting Instructions and Data Accesses」という名称の米国特許第10/674604号と、2003年9月30日出願、整理番号AUS920030479US1の「Method and Apparatus for Generating Interrupts Upon Execution of Marked Instructions and Upon Access to Marked Memory Locations」という名称の米国特許第10/675831号と、2003年9月30日出願、整理番号AUS920030480US1の「Method and Apparatus for Counting Data Accesses and Instruction Executions that Exceed a Threshold」という名称の米国特許第10/675778号と、2003年9月30日出願、整理番号AUS920030481US1の「Method and Apparatus for Counting Execution of Specific Instructions and Accesses to Specific Data Locations」という名称の米国特許第10/675776号と、2003年9月30日出願、整理番号AUS920030482US1の「Method and Apparatus for Debug Support for Individual Instructions and Memory Locations」という名称の米国特許第10/675751号と、2003年9月30日出願、整理番号AUS920030483US1の「Method and Apparatus to Autonomically Select Instructions for Selective Counting」という名称の米国特許第10/675721号と、2003年9月30日出願、整理番号AUS920030484US1の「Method and Apparatus to Autonomically Count Instruction Execution for Applications」という名称の米国特許第10/674642号と、2003年9月30日出願、整理番号AUS920030485US1の「Method and Apparatus to Autonomically Take an Exception on Specified Instructions」という名称の米国特許第10/674606号と、2003年9月30日出願、整理番号AUS920030486US1の「Method and Apparatus to Autonomically Profile Applications」という名称の米国特許第10/675783号と、2003年9月30日出願、整理番号AUS920030487US1の「Method and Apparatus for Counting Instruction and Memory Location Ranges」という名称の米国特許第10/675872号と、2004年1月14日出願、整理番号AUS920030488US1の「Method and Apparatus for Maintaining Performance Monitoring Structures in a Page Table for Use in Monitoring Performance of a Computer Program」という名称の米国特許第10/757250号と、2004年1月14日出願、整理番号AUS920030543US1の「Method and Apparatus for Providing Pre and Post Handlers for Recording Events」という名称の米国特許第10/757192号と、2004年3月18日出願、整理番号AUS920030548US1の「Method and Apparatus for Determining Computer Program Flows Autonomically Using Hardware Assisted Thread Stack Tracking and Cataloged Symbolic Data」という名称の米国特許第10/803663号と、2004年1月14日出願、整理番号AUS920030555US1の「Method and Apparatus for Autonomically Moving Cache Entries to Dedicated Storage When False Cache Line Sharing is Detected」という名称の米国特許第10/757227号と、2004年1月14日出願、整理番号AUS920030556US1の「Method and Apparatus for Optimizing Code Execution Using Annotated Trace Information Having Performance Indicator and Counter Information」という名称の米国特許第10/757197号と、2004年3月22日出願、整理番号AUS920040059US1の「Method and Apparatus for Providing Hardware Assistance for Code Coverage」という名称の米国特許第10/807094号と、2004年3月22日出願、整理番号AUS920040061US1の「Method and Apparatus for Hardware Assistance for Data Access Coverage」という名称の米国特許第10/806576号と、2004年3月22日出願、整理番号AUS920040062US1の「Method and Apparatus for Providing Hardware Assistance for Data Acces Coverage on Dynamically Allocated Data」という名称の米国特許第10/806633号と、2004年3月22日出願、整理番号AUS920040063US1の「Method and Apparatus for Autonomic Test Case Feedback Using Hardware Assistance for Data Coverage」という名称の米国特許第10/806917号と、2004年3月22日出願、整理番号AUS920040064US1の「Method and Apparatus for Hardware Assistance for Prefetching Data」という名称の米国特許第10/806871号と、2004年3月22日出願、整理番号AUS920040065US1の「Method and Apparatus for Prefetching Data from a Data Structure」という名称の米国特許第10/806866号との出願に関する。上記すべての関連出願は同じ譲受人に譲渡され、参照により本明細書に組み込まれる。
データ処理システムおよびデータ処理システム内で実行中のアプリケーションの性能を分析および強化する際に、データ処理システム内のどのソフトウェア・モジュールがシステム・リソースを使用しているかを知ることが有用である。データ処理システムを効果的に管理および強化するためには、様々なシステム・リソースがいつどのように使用されているかを知る必要がある。性能ツールを使用してデータ処理システムを監視および検査し、データ処理システム内で様々なソフトウェア・アプリケーションが実行されている場合のリソース消費を決定する。たとえば性能ツールは、データ処理システム内で最も頻繁に実行されるモジュールおよび命令を識別すること、あるいは、最大量のメモリを割り振るかまたは最も多くのI/O要求を実行するそれらのモジュールを識別することができる。ハードウェア性能ツールを当該システムに組み込むか、または後で追加することができる。
知られたソフトウェア性能ツールの1つが追跡ツールである。追跡ツールは、複数の技法を使用して、実行中のプログラムに関する実行流れを示す追跡情報を提供することができる。1つの技法は、ある種のイベントが発生した時点でこれらをログ記録することによって、命令の特定シーケンスを追跡する。この技法は、イベント・ベースのプロファイル技法と呼ばれる。たとえば追跡ツールは、モジュール、サブルーチン、メソッド、関数、またはシステム・コンポーネントへのあらゆる入口およびこれらからのあらゆる出口をログ記録することができる。別の方法として、追跡ツールは、要求者と各メモリ割振り要求に割り振られたメモリ量とをログ記録することができる。通常、こうした各イベントについて、タイムスタンプが押印されたレコードが生成される。さらに入口および出口レコードと同様の対応するレコードのペアも使用して、任意のコード・セグメントの実行、I/Oまたはデータ伝送の開始および完了、ならびに多くの他の当該イベントを追跡する。
様々なコンピュータ・ファミリによって生成されるコードの性能を向上させるために、実行コード中のどこでプロセッサが時間を費やしているかを判別する必要があることが多く、こうした作業は一般に、コンピュータ処理技術分野では「ホット・スポット」の位置特定として知られている。理論的に言えば、コードの改善によって最も多くの恩恵を受ける可能性のある領域に焦点を当てるために、コード・レベルの命令および/またはソース・ラインでこうしたホット・スポットを分離することが望まれる。
他の追跡技法には、プログラムの実行流れを定期的にサンプリングして、プログラムがかなりの時間を費やしていることがわかるプログラム内の特定の位置を識別することが含まれる。この技法は、アプリケーションまたはデータ処理システムを規則的な間隔で定期的に中断するという考えに基づくものである。この技法は、サンプル・ベースのプロファイリング技法と呼ばれる。各中断時に、所定の時間長さまたは所定の当該イベント数に対して情報が記録される。たとえば、プロファイリングしているより大規模なプログラムの実行可能部分である、現在実行中のスレッドのプログラム・カウンタを、各間隔で記録することができる。これらの値は、後処理時間でのデータ処理システムに関するロード・マップおよび記号テーブル情報に対して解決可能であり、この分析からどこで時間が費やされているかのプロファイルが取得可能である。
現在使用可能なソフトウェア・ツールでは、テスト・カバレッジの決定は難しい問題である。プログラムに関するコードをテストする場合、どのコードが実行されており、どのコードが実行されていないかを判別する、容易なメカニズムは存在しない。この種の識別は、コード・カバレッジとも呼ばれる。コード・カバレッジを識別するためのソフトウェア技法およびツールが存在する。しかしながら、これらの技法およびツールには、通常、テストが実施されているコードの変更が含まれる。コードの変更またはインスツルメンテーション(instrument)には手間および時間がかかる場合があるため、こうしたプロセスは望ましくない。他のタイプの技法およびツールは、プログラムの静的解析からテスト・ケースを生成することに基づいている。この種の方法では、テストの際の完全なカバレッジを保証することはできない。
特定の状況または問題に関する答えを見つけるためにこうしたツールを作成することは、かなりの労力を要する可能性があり、さらにソフトウェア・ツール自体がテストを受けるシステムに影響を与えるため、較正が非常に困難である可能性がある。本発明は、ツールの開発および問題の分析に対するハードウェア支援が、ソフトウェア性能ツールの開発に必要な労力の量をかなり軽減できることを実現するものである。さらに、プロセッサの密度を上げることによって、追加のデバッグおよび分析機能を提供するためにハードウェア支援を含めることもできる。
米国特許第09/343438号
したがって、データ処理システムで実行されるコードのコード・カバレッジを分析する性能ツールに対するハードウェア支援を提供するための、改良された方法、装置、およびコンピュータ命令を有することが有利となるであろう。
本発明は、コードに関するカバレッジ・データを提示するための方法、装置、およびコンピュータ命令を提供するものである。コードに関連付けられた命令アクセス・インジケータを含むカバレッジ・データが取得される。プロセッサによるコードの実行に応答してデータ処理システム内でプロセッサによって設定される特定の命令アクセス・インジケータが、設定された命令アクセス・インジケータを形成するために識別される。各設定された命令アクセス・インジケータは、コードの一部に関連付けられる。カバレッジ・データの提示が生成される。設定された命令アクセス・インジケータは、この提示内で識別される。この提示は、たとえばグラフィック提示とすることができる。
本発明の新しい機能であると考えられる特徴は、添付の特許請求の範囲に記載されている。しかしながら、本発明自体ならびに好ましい使用方法、さらにその目的および利点は、以下の例示的な実施形態の詳細な説明を添付の図面と共に読みながら参照することで、最も良く理解されるであろう。
次に図1を参照すると、本発明が実施可能なデータ処理システムのブロック図が示されている。クライアント100は、本発明のプロセスをインプリメントするコードまたは命令を配置することのできるコンピュータの一例である。クライアント100は、Peripheral Component Interconnect(PCI)ローカル・バス・アーキテクチャを採用している。記載された例はPCIバスを採用しているが、Accelerated Graphics Port(AGP)およびIndustry Standard Architecture(ISA)などの他のバス・アーキテクチャも使用可能である。プロセッサ102および主メモリ104は、PCIブリッジ108を介してPCIローカル・バス106に接続される。PCIブリッジ108は、プロセッサ102用の一体化されたメモリ・コントローラおよびキャッシュ・メモリも含むことができる。直接コンポーネント相互接続またはアドイン・ボードを介して、PCIローカル・バス106への追加の接続を行うことができる。
記載された例では、ローカル・エリア・ネットワーク(LAN)アダプタ110、小規模コンピュータ・システム・インターフェースSCSIホスト・バス・アダプタ112、および拡張バス・インターフェース114が、直接コンポーネント接続によってPCIローカル・バス106に接続される。これに対して、オーディオ・アダプタ116、グラフィック・アダプタ118、およびオーディオ/ビデオ・アダプタ119は、拡張スロットに挿入されたアドイン・ボードによってPCIローカル・バス106に接続される。拡張バス・インターフェース114は、キーボードおよびマウス・アダプタ120、モデム122、および追加メモリ124に接続を提供する。SCSIホスト・バス・アダプタ112は、ハード・ディスク・ドライブ126、テープ・ドライブ128、およびCD−ROMドライブ130に接続を提供する。典型的なPCIローカル・バスのインプリメンテーションでは、3つまたは4つのPCI拡張スロットまたはアドイン・コネクタをサポートすることになる。
オペレーティング・システムはプロセッサ102上で動作し、図1のデータ処理システム100内の様々なコンポーネントに制御を与え、これを調整するために使用される。オペレーティング・システムは、Microsoft Corporationから入手可能なWindows XP(登録商標)などの市販のオペレーティング・システムとすることができる。Java(登録商標)などのオブジェクト指向プログラミング・システムは、オペレーティング・システムと共に動作可能であり、クライアント100上で実行中のJavaプログラムまたはアプリケーションからオペレーティング・システムへの呼出しを提供する。「Java」とは、Sun Microsystems,Incの商標である。オペレーティング・システムに対する命令、オブジェクト指向プログラミング・システム、およびアプリケーションまたはプログラムは、ハード・ディスク・ドライブ126などのストレージ・デバイス上に配置され、プロセッサ102が実行するために主メモリ104にロードすることが可能である。
通常の当業者であれば、図1のハードウェアがインプリメンテーションに応じて変更可能であることを理解されよう。図1に記載されたハードウェアに加えて、またはこれらの代わりに、フラッシュ読取り専用メモリ(ROM)、同等の不揮発性メモリ、または光ディスク・ドライブおよびその他などの、他の内部ハードウェアまたは周辺デバイスを使用することができる。また、本発明のプロセスをマルチプロセッサ・データ処理システムに適用することもできる。
たとえばクライアント100は、オプションでネットワーク・コンピュータとして構成された場合、SCSIホスト・バス・アダプタ112、ハード・ディスク・ドライブ126、テープ・ドライブ128、およびCD−ROM130を含まない可能性がある。その場合、コンピュータは適切にはクライアント・コンピュータと呼ばれ、LANアダプタ110、モデム122、またはその他などの、何らかのタイプのネットワーク通信インターフェースを含む。他の例として、クライアント100は、クライアント100が何らかのタイプのネットワーク通信インターフェースを備えているかどうかに関わらず、何らかのタイプのネットワーク通信インターフェースに依拠せずにブート可能なように構成された、スタンドアロン型システムとすることができる。さらに他の例として、クライアント100は、オペレーティング・システム・ファイルおよび/またはユーザ生成データを格納するための不揮発性メモリを提供するためのROMおよび/またはフラッシュRAMを備えるように構成された、携帯情報端末(PDA)とすることができる。図1に記載された例および前述の例は、アーキテクチャ上の制限を示唆するものではない。
本発明のプロセスは、たとえば主メモリ104、メモリ124などのメモリ内、あるいは1つまたは複数の周辺デバイス126〜130内に配置可能な、コンピュータ実施命令を使用して、プロセッサ102によって実行されるものである。
次に図2を見ると、本発明の好ましい実施形態に従った、情報を処理するためのプロセッサ・システムを示すブロック図が記載されている。プロセッサ210は、図1のプロセッサ102としてインプリメントすることができる。
好ましい実施形態では、プロセッサ210は単一集積回路スーパースカラ・マイクロプロセッサである。したがって、本明細書で以下に論じるように、プロセッサ210は様々なユニット、レジスタ、バッファ、メモリ、および他のセクションを含み、これらはすべて集積回路によって形成される。さらに、好ましい実施形態では、プロセッサ210は縮小命令セット・コンピュータ(「RISC」)技法に従って動作する。図2に示されるように、システム・バス211は、プロセッサ210のバス・インターフェース・ユニット(「BIU」)212に接続される。BIU212は、プロセッサ210とシステム・バス211との間での情報の転送を制御するものである。
BIU212は、プロセッサ210の命令キャッシュ214およびデータ・キャッシュ216に接続される。命令キャッシュ214はシーケンサ・ユニット218に命令を出力する。命令キャッシュ214からのこうした命令に応答して、シーケンサ・ユニット218は、プロセッサ210の他の実行回路に選択的に命令を出力する。
好ましい実施形態では、プロセッサ210の実行回路が、シーケンサ・ユニット218に加えて命令の実行に使用されるいくつかのプロセッサ・ユニットを含む。これらのプロセッサ・ユニットは実行ユニットとも呼ばれる。実行ユニットは、たとえばブランチ・ユニット220、固定小数点ユニットA(「FXUA」)222、固定小数点ユニットB(「FXUB」)224、複合固定小数点ユニット(「CFXU」)226、ロード/ストア・ユニット(「LSU」)228、および浮動小数点ユニット(「FPU」)230を含む。FXUA222、FXUB224、CFXU226、およびLSU228は、それらのソース・オペランド情報を汎用アーキテクチャ・レジスタ(「GPR」)232および固定小数点名前変更バッファ234から入力する。さらに、FXUA222およびFXUB224は、キャリー・ビット(「CA」)レジスタ245から「キャリー・ビット」を入力する。FXUA222、FXUB224、CFXU226、およびLSU228は、選択されたエントリで固定小数点名前変更バッファ234に格納するために、それらの演算の結果(宛先オペランド情報)を出力する。さらにCFXU226は、ソース・オペランド情報および宛先オペランド情報を、特定用途向けレジスタ処理ユニット(「SPRユニット」)270に入力およびここから出力する。
FPU230は、そのソース・オペランド情報を浮動小数点アーキテクチャ・レジスタ(「FPR」)236および浮動小数点名前変更バッファ238から入力する。FPU230は、選択されたエントリで浮動小数点名前変更バッファ238に格納するために、その演算の結果(宛先オペランド情報)を出力する。
Load(ロード)命令に応答して、LSU228はデータ・キャッシュ216から情報を入力し、こうした情報を名前変更バッファ234および238のうちの選択されたものにコピーする。こうした情報がデータ・キャッシュ216に格納されていない場合、データ・キャッシュ216はこうした情報をシステム・バス211に接続されたシステム・メモリ260から(BIU212およびシステム・バス211を介して)入力する。さらにデータ・キャッシュ216は、データ・キャッシュ216から(BIU212およびシステム・バス211を介して)システム・バス211に接続されたシステム・メモリ260に情報を出力することもできる。Store(ストア)命令に応答して、LSU228はGPR232およびFPR236のうちの選択された1つから情報を入力し、こうした情報をデータ・キャッシュ216にコピーする。
シーケンサ・ユニット218は、情報をGPR232およびFPR236へ入力し、これらから出力する。ブランチ・ユニット220は、命令およびプロセッサ210の現在の状態を示す信号をシーケンサ・ユニット218から入力する。こうした命令および信号に応答して、ブランチ・ユニット220は、プロセッサ210が実行するための命令シーケンスを格納する好適なメモリ・アドレスを示す信号を(シーケンサ・ユニット218に)出力する。ブランチ・ユニット220からのこうした信号に応答して、シーケンサ・ユニット218は示された命令シーケンスを命令キャッシュ214から入力する。1つまたは複数の命令シーケンスが命令キャッシュ214に格納されていない場合、命令キャッシュ214はこうした命令を、システム・バス211に接続されたシステム・メモリ260から(BIU212およびシステム・バス211を介して)入力する。
命令キャッシュ214から入力された命令に応答して、シーケンサ・ユニット218は、実行ユニット220、222、224、226、228、および230のうちの選択されたものに命令を選択的にディスパッチする。各実行ユニットは、特定クラスの命令のうちの1つまたは複数の命令を実行する。たとえば、FXUA222およびFXUB224は、加算、減算、AND、OR、およびXORなどの、第1クラスの固定小数点数学演算をソース・オペランドで実行する。CFXU226は、固定小数点の乗算および除算などの、第2クラスの固定小数点演算をソース・オペランドで実行する。FPU230は、浮動小数点の乗算および除算などの、浮動小数点演算をソース・オペランドで実行する。
名前変更バッファ234のうちの選択された1つに情報が格納される場合、こうした情報は、選択された名前変更バッファが割り振られる命令で指定されたように、格納場所(たとえばGPR232またはCAレジスタ242のうちの1つ)に関連付けられる。名前変更バッファ234のうちの選択された1つに格納された情報は、シーケンサ・ユニット218からの信号に応答して、GPR232(またはCAレジスタ242)のうちのその関連付けられたものにコピーされる。シーケンサ・ユニット218は、情報を生成した命令の「完了」に応答して、名前変更バッファ234のうちの選択された1つに格納されたこうした情報のコピーを指示する。こうしたコピーは「ライトバック」と呼ばれる。
名前変更バッファ238のうちの選択された1つに情報が格納されると、こうした情報はFPR236のうちの1つに関連付けられる。名前変更バッファ238のうちの選択された1つに格納された情報は、シーケンサ・ユニット218からの信号に応答して、FPR236のうちのその関連付けられた1つにコピーされる。シーケンサ・ユニット218は、情報を生成した命令の「完了」に応答して、名前変更バッファ238のうちの選択された1つに格納されたこうした情報のコピーを指示する。
プロセッサ210は、実行ユニット220、222、224、226、228、および230のうちの様々なもので複数の命令を同時に処理することによって、高い性能を達成する。したがって各命令は、それぞれが他の命令の段階と並行して実行可能な段階のシーケンスとして処理される。こうした技法は「パイプライン方式」と呼ばれる。例示的実施形態の重要な態様では、命令は通常6つの段階、すなわちフェッチ、復号、ディスパッチ、実行、完了、およびライトバックとして処理される。
フェッチ段階では、シーケンサ・ユニット218は、ブランチ・ユニット220およびシーケンサ・ユニット218に関連して上記で詳細に論じた命令のシーケンスを格納している1つまたは複数のメモリ・アドレスからの1つまたは複数の命令を、(命令キャッシュ214から)選択的に入力する。復号段階では、シーケンサ・ユニット218は4つまでのフェッチされた命令を復号する。
ディスパッチ段階では、シーケンサ・ユニット218は、ディスパッチされた命令の結果(宛先オペランド情報)に関して名前変更バッファ・エントリを予約した後に、4つまでの復号された命令を、実行ユニット220、222、224、226、228、および230のうちの(復号段階での復号に応答して)選択されたものに選択的にディスパッチする。ディスパッチ段階では、オペランド情報はディスパッチされた命令のための選択された実行ユニットに供給される。プロセッサ210は、プログラム済みシーケンスの順に命令をディスパッチする。
実行段階では、実行ユニットはそれらのディスパッチされた命令を実行し、上記で詳細に論じたように名前変更バッファ234および名前変更バッファ238の選択されたエントリに格納するために、それらの演算の結果(宛先オペランド情報)を出力する。この方法では、プロセッサ210は、プログラム済みシーケンスとは違った順序で命令を実行することができる。
完了段階では、シーケンサ・ユニット218は命令が「完了」したことを示す。プロセッサ210は、プログラム済みシーケンスの順に命令を「完了」する。
ライトバック段階では、シーケンサ218は、名前変更バッファ234および238からそれぞれGPR232およびFPR236に情報をコピーするように指示する。シーケンサ・ユニット218は、選択された名前変更バッファに格納された情報のこうしたコピーを指示する。同様に、特定の命令のライトバック段階では、プロセッサ210は特定の命令に応答して、そのアーキテクチャ状態を更新する。プロセッサ210は、プログラム済みシーケンスの順に命令のそれぞれの「ライトバック」段階を処理する。プロセッサ210は、指定された状況で、命令の完了段階およびライトバック段階を有利なようにマージする。
例示的実施形態では、各命令は、命令処理の各段階を完了するのに1マシン・サイクルを必要とする。それにもかかわらず、一部の命令(たとえば、CFXU226によって実行される複合固定小数点命令)では複数のサイクルを必要とする場合がある。したがって、先行命令の完了に必要な時間の変動に応答して、特定の命令の実行段階と完了段階との間に可変遅延が発生する場合がある。
完了バッファ248はシーケンサ218内に提供され、実行ユニット内で実行中の複数の命令の完了を追跡するものである。命令または命令グループが首尾よく完了したことが示されると、シーケンス順が指定されたアプリケーションでは、完了バッファ248を利用して、それら完了した命令の結果を関連付けられた汎用レジスタへ転送することを開始することができる。
さらにプロセッサ210は、プロセッサ210内の他のユニットと同様に命令キャッシュ214に接続された、プロセッサ監視ユニット240も含む。プロセッサ210のオペレーションは、この例示的実施形態では、命令実行リソースおよびストレージ制御の利用の詳細な情報の記述を提供することのできるソフトウェア・アクセス可能メカニズムである、実行監視ユニット240を利用して監視することができる。図2には示されていないが、実行監視ユニット240はプロセッサ210のそれぞれの機能ユニットに結合され、たとえば、イベント間の関係を再構築すること、偽トリガを識別すること、実行ボトルネックを識別すること、パイプライン停止を監視すること、アイドル状態のプロセッサ・サイクルを監視すること、ディスパッチの効率を決定すること、ブランチの効率を決定すること、位置合わせ不良のデータ・アクセスの実行ペナルティを決定すること、逐次化命令の実行頻度を識別すること、禁止された割込みを識別すること、および実行効率を決定することを含む、プロセッサ210のオペレーションのすべての面を監視することが可能である。
実行監視ユニット240は、選択されたイベントの発生をカウントするために使用される、PMC1およびPMC2とラベル表示されたカウンタ241〜242のインプリメンテーション依存番号(たとえば2〜8)を含む。実行監視ユニット240は、少なくとも1つの監視モード制御レジスタ(MMCR)をさらに含む。この例では、カウンタ241〜242の機能を指定する2つの制御レジスタ、MMCR243および244が存在する。カウンタ241〜242およびMMCR243〜244は、好ましいことに、CFXU26によって実行可能なMFSPR(SPRから移動)命令およびMTSPR(SPRへ移動)命令を介して読取りまたは書込み用にアクセス可能なSPRとしてインプリメントされる。しかしながら、一代替実施形態では、カウンタ241〜242およびMMCR243〜244は単なるI/Oスペース内のアドレスとしてインプリメントすることができる。他の代替実施形態では、制御レジスタおよびカウンタにはインデックス・レジスタを介して間接的にアクセスすることができる。この実施形態は、Intel CorporationからのプロセッサでのIA−64アーキテクチャで実施される。
さらにプロセッサ210は、命令キャッシュ214に接続された割込みユニット250も含む。図2には示されていないが、さらに割込みユニット250は、プロセッサ210内の他のプロセッサ・ユニットにも接続される。割込みユニット250は、他のプロセッサ・ユニットからの信号を受信すること、およびエラー処理の開始またはトラップ・プロセスなどのアクションを開始することができる。これらの例では、割込みユニット250を使用して、プログラムの実行中に発生する可能性のある割込みおよび例外が生成される。
本発明は、プログラム実行中に、特定の命令の実行と特定のメモリ位置へのアクセスとを監視する機能を提供するものである。この種の決定も、コード・カバレッジと呼ばれる。具体的には、特定の命令またはメモリ位置に関連付けられたインジケータを保持するために、予備フィールドを使用することができる。このインジケータは、命令の実行またはメモリ位置へのアクセスに応答して設定することができる。これらのインジケータの検査を使用して、どのコードが実行されたか、およびどのコードが実行されていないかを決定することができる。コードの実行中にどのメモリ位置がアクセスされたかまたはアクセスされていないかに関して、同様に識別することができる。別の方法としては、インジケータを命令またはメモリ位置に関連して他の位置に格納することができる。
インジケータが命令内に配置される場合、通常は予備フィールドが使用されるが、場合によってはインジケータに必要なスペースを含めるように命令を拡張することができる。この場合、プロセッサのアーキテクチャを変更する必要がある。たとえば、インジケータを収容するために64ビットのアーキテクチャを65ビットのアーキテクチャに変更することができる。データのアクセスに関して、インジケータをデータまたはデータが配置されたメモリの位置に関連付けることができる。
これらの図示された例では、これらのインジケータはアクセス・インジケータとも呼ばれる。データ・アクセス・インジケータはメモリ位置に関連付けられ、命令アクセス・インジケータは命令に関連付けられる。これらのインジケータは、通常、プログラム実行前の設定解除のときに初期化される。
プロセッサが命令を実行すると、その命令に関連付けられた命令アクセス・インジケータが設定される。メモリ位置へのアクセスの結果、そのメモリ位置に関連付けられたインジケータが設定されることになる。設定されているインジケータおよび設定されていないインジケータを検査することによって、コード・カバレッジを識別することができる。この検査は、コード・カバレッジのテスト用に設計されたソフトウェア・ツールでインプリメントされたプロセスを使用して実行することができる。この方法では、メモリ位置への命令およびデータ・アクセスに関して、コードの統計分析またはインスツルメンテーションの必要なしにコード・カバレッジをすることができる。
次に図3を見ると、本発明の好ましい実施形態に従った、インジケータに関連付けられた命令の処理に使用されるコンポーネントを示す図が記載されている。命令キャッシュ300はバンドル302を受け取る。命令キャッシュ300は、図2の命令キャッシュ214の一例である。バンドルとは命令のグループ化のことである。この種の命令のグループ化は、通常、Intel Corporationから入手可能なIA−64プロセッサに見られる。命令キャッシュ300は、実行用の命令を処理する。
この命令処理の一部として、命令キャッシュ300は命令用の異なる実行ユニットに命令をディスパッチする。信号304は、命令の実行が発生したときに完了バッファ306から受け取られる。完了バッファ306は、図2の完了バッファ248などの完了バッファの一例である。信号304は、実行が完了した命令を識別する。この識別は様々な形式を取ることができる。たとえば、完了バッファ306内のエントリに対応したエントリ数を使用して、実行が完了した命令を識別することができる。この方式の場合、命令キャッシュ300には、指定された命令がそのキャッシュ内のどこに常駐するかがわかる。プロセッサのインプリメンテーションに応じて、キャッシュ300内の配置など、どの命令が完了したかを他のインジケータを使用して識別することができる。
信号304が受け取られると、命令キャッシュ300は実行された命令に関連する命令アクセス・インジケータを設定する。信号304の受信に応答して、命令キャッシュ300は、実行を完了した命令に関連付けられた命令アクセス・インジケータ308をマーク付けまたは設定する。このインジケータは、特定のインプリメンテーションに応じて様々な位置にあるものとすることができる。たとえば命令アクセス・インジケータ308は、命令内、シャドー・メモリ内、またはページ・テーブル内の、予備のビットまたはフィールド内に位置することができる。
メモリ位置内のデータへのアクセスに関しては、データおよびインジケータは、命令キャッシュではなく図2のデータ・キャッシュ216などのデータ・キャッシュによって処理される。別の方法では、プロセッサは組み合わせられたデータおよび命令キャッシュを有することが可能であり、その場合インジケータは適宜設定される。
図示された例では、命令実行の完了を示す信号の生成が完了バッファ306によって生成されているように示されているが、この信号は、特定プロセッサのアーキテクチャおよび構成に応じて他のプロセッサ・ユニットによって生成することが可能である。たとえば、このユニットは実際に命令を処理している処理ユニットとすることができる。さらに、ハードウェアが順序違いのオペレーションをサポートしていない場合、実行のために命令をプロセッサ・ユニットへディスパッチすることは、命令が実行されたことを示す時間の受け入れ可能ポイントとすることができる。言い換えれば、命令が投機的に実行されない場合、プロセッサ内のディスパッチャはその命令を実行されたものとしてマーク付けすることができる。
次に図4には、本発明の好ましい実施形態に従った、アクセスされたメモリ位置を識別するインジケータの設定に使用される信号のデータ流れを示す図が記載されている。データ・キャッシュ400は、命令が実行されたときに、完了バッファ404から信号402を受け取る。信号402は、メモリ位置内のデータに実行された命令がアクセスしたことの表示も含む。
信号402の受信に応答して、データ・アクセス・インジケータ406が設定される。このデータ・アクセス・インジケータは、完了した命令がアクセスしたメモリ位置に関連付けられる。メタデータは、データ・アクセス・インジケータがメモリ位置自体に含まれていない場合に、インジケータの関連付けをメモリ位置にマッピングするために使用される。キャッシュ・ユニット内の命令/データの配置は、命令/データの物理メモリ内の位置を識別する。現在使用可能なすべてのキャッシュ・ユニットがこの機能を有する。キャッシュ・ユニットは、アクセス・インジケータを更新する場所も知っている。
次に図5を見ると、本発明の好ましい実施形態に従った、アクセス・インジケータを命令またはメモリ位置に関連付けるための1つのメカニズムを示す図が記載されている。プロセッサ500はキャッシュ502から命令を受け取る。この例では、インジケータは命令と共に、またはデータがみつかったメモリ位置内には格納されない。その代わりにインジケータは、ストレージの別の領域であるアクセス・インジケータ・シャドー・キャッシュ504に格納される。ストレージは、たとえばシステム・メモリ、フラッシュ・メモリ、キャッシュ、またはディスクなどの、任意のストレージ・デバイスとすることができる。
プロセッサ500がキャッシュ502から命令を受け取って実行する場合、プロセッサ500はキャッシュ502からの命令に対応して、アクセス・インジケータ・シャドー・キャッシュ504内に命令アクセス・インジケータを設定する。同様のプロセスが、データを含むメモリ位置へのアクセスに関して実行される。一実施形態では、実際のデータ・セグメントに影響を与えないそれぞれの対応するワードに、フル・シャドー・ワードが与えられる。言い換えれば、プロセッサ500は、キャッシュ502のアーキテクチャまたは構成を変更せずに維持することができる。これらの例では、記載されたマッピングはワードごとである。しかしながら、アクセス・インジケータ・シャドー・キャッシュ504内のビットがデータの1ワードに対応するものである、データ・ワード当たり1シャドー・ビットなどの、他の何らかのタイプのマッピングも使用可能である。
このタイプのアーキテクチャに関して、この機構を使用するコンパイラは、デバッグ・シンボルと同様の方法でデータ領域それ自体とは別の作業領域内にデバッグ情報を作成する。モジュールがロードされる場合、特別な情報であるアクセス・インジケータがローダによって準備され、その結果、命令がキャッシュ502にロードされるときに、アクセス・インジケータ・シャドー・キャッシュ504に組み込むために使用することができる。これらのキャッシュ領域は混合可能であり、オペレーションのモードごとにマーク付けするかまたは理解することができる。プロセッサ500は、関連するデータ・アクセスおよび命令の実行が生じたときに、アクセス・インジケータを設定する。これらの例では、プロセスが命令を実行している間に、プロセスはシャドー情報を使用するかどうかがわかるようにデバッガまたは分析プログラムによってプログラムされる。
次に図6を見ると、本発明の好ましい実施形態に従ったバンドルを示す図が記載されている。バンドル600は、命令スロット602、命令スロット604、命令スロット606、およびテンプレート608を含む。図に示されるように、バンドル600は128ビットを含む。各命令スロットは41ビットを含み、テンプレート608は5ビットを含む。テンプレート608は、現在のバンドル内で停止を識別するため、およびスロット内の命令を異なるタイプの実行ユニットにマッピングするために使用される。
バンドル600内の予備ビットは、本発明のインジケータを保持するために使用される。たとえばインジケータ610、612、および614が、それぞれ命令スロット602、604、および606内に配置される。これらのインジケータは特定のインプリメンテーションに応じて、様々な形および様々なサイズが可能である。インジケータは、単一ビットを使用するかまたは複数ビットを使用することができる。これらの例では単一ビットを使用して、命令が実行されたことを示すことができる。同様のフィールドの使い方を、データまたはメモリ位置をマーク付けするインジケータに使用することができる。IA64アーキテクチャの場合のように、実行が常にバンドル内の最初の命令で開始される場合、2つのビットを使用して最新の実行された命令を示すことができる。これは、ブランチ命令を有するテンプレートにのみ必要である。基本ブロックにフラグが立てられている場合、マーク付けする必要があるのはブランチ命令およびブランチに続く命令のみである。
図7を見ると、本発明の好ましい実施形態に従った、メタデータおよびアクセス・インジケータを生成するために使用されるコンポーネントを示すブロック図が記載されている。コンパイラは、生成されるメタデータを示すソースに埋め込まれたディレクティブをサポートする。メタデータは、どの命令またはメモリ位置が特定のアクセス・インジケータに関連付けられることになるかを識別するなど、何のオペレーションが実行されるかを示すために使用される。言い換えればメタデータは、個々の命令、命令グループ、およびメモリ位置へのアクセス・インジケータのマッピングを定義するものである。メモリ位置に関してメタデータは、特定のインプリメンテーションに応じて、個々のメモリ位置または異なるサイズの異なるメモリ位置グループに、アクセス・インジケータをマッピングすることができる。プロセッサ内のハードウェア・コンポーネントは、これらのアクセス・インジケータを使用して、メモリ位置にアクセスしたかまたは命令を実行したときにこれらのコンポーネントが実行した更新を反映させる。
コンパイラ700は、実行用の命令702と、コード・カバレッジ監視用のメタデータおよびアクセス・インジケータ704とを生成することができる。命令またはデータ・キャッシュ・ページがメモリにロードされると、オペレーティング・システム・プログラム・ローダ/リンカおよび/または実行監視プログラムはコンパイラ700によって生成されたメタデータおよびアクセス・インジケータ704を読み取り、メタデータおよびアクセス・インジケータ704をメモリにロードする。プロセッサ708は、コンパイラ700によって生成されたフォーマットでメタデータおよびアクセス・インジケータ704を受け入れ、メタデータおよびアクセス・インジケータ704をシャドー・メモリ705に取り込む。
代替の実施形態では、コンパイラの代わりに実行監視プログラムがメタデータおよびアクセス・インジケータを生成する。
一実施形態では、フォーマットは、それぞれのブロックまたはセクタ参照に関するメタデータおよび/またはアクセス・インジケータのシャドー・キャッシュ・エントリを有し、メタデータおよびアクセス・インジケータ704をその対応するシャドー・エントリに移動させるだけである。シャドー・キャッシュを有する代わりに、キャッシュそれ自体の内部フォーマットを修正して、メタデータおよびアクセス・インジケータ704を含むようにすることができる。命令ストリームそれ自体がメタデータを含むように修正される実施形態では、ローダが命令ストリームを更新して適切なメタデータおよび/またはアクセス・インジケータおよび作業領域を含むようにするか、あるいは、コンパイラ700がメタデータおよびアクセス・インジケータ704を含むようにコードを生成しているかの、いずれかである。いずれの場合にも、コードがロードされた後に、プロセッサがメタデータおよびアクセス・インジケータ704を受け取る。
さらにメタデータおよびアクセス・インジケータ704は、命令702に関連してシャドー・メモリ705に配置することができる。コンパイラ700は、テーブルまたはデバッグ・データ・セクションに情報を生成する。実行監視プログラムは、この情報をシャドー・メモリ705内のシャドー・データ領域にロードする。別の方法として、デバッグ領域は、オペレーティング・システムまたは実行監視プログラムおよび共に動作しているプロセッサが自動的に読み取ることができる。
その後、プロセッサ708は命令702を実行することができる。コンパイラ700は、モード・レジスタ710などのレジスタをプロセッサ708内に設定することができる。このレジスタが設定されると、プロセッサ708は、命令702を実行する際にシャドー・メモリ705内のメタデータおよびアクセス・インジケータ704に注目して、メタデータおよびアクセス・インジケータ704が、命令702で実行されている命令に関連付けられているかどうかを判別する。
モード・レジスタ710が設定されない場合、命令702が実行されるときにメタデータおよびアクセス・インジケータ704は無視される。モード・レジスタ710は、これらの例示的実施形態で命令へのアクセスにマーク付けする機構をオンおよびオフにする際に使用される。
メタデータおよびアクセス・インジケータ704内のメタデータを使用して、アクセス・インジケータに関連付けられることになる命令または命令グループを定義することに加えて、モード・レジスタ710を設定することができる。アクセス・インジケータが命令レベルに基づいて関連付けられる場合、アクセス・インジケータに関連付けられる各命令には、命令が実行されるときにその関連付けられるアクセス・インジケータが設定される。アクセス・インジケータが命令グループに関連付けられる場合、このアクセス・インジケータは、これらの例でグループ内のいずれかの命令が実行されるときに設定される。
メモリ位置712内のデータに関して、同様のプロセスを実行することができる。特定のインプリメンテーションに応じて、メタデータおよびアクセス・インジケータ704は、シャドー・メモリ705内ではなく命令内またはデータ内に配置することができる。しかしながら、メタデータおよびアクセス・インジケータ704をシャドー・メモリ705内に配置することによって、メタデータおよびアクセス・インジケータ704の生成は、メタデータおよびアクセス・インジケータ704がシャドー・メモリ705内に配置されるときに動的に実行することができる。
この機構によって、プログラムを修正する必要なしに、コード・カバレッジ監視用の命令の選択および識別を行うことができる。言い換えれば、コンパイラ700は、プロセッサ708による実行用に命令702がコンパイルされた後に、メタデータおよびアクセス・インジケータ704を生成することができる。モード・レジスタ710を設定することで、命令702を修正する必要なしに、プロセッサ708が実行インスツルメンテーション・シャドー・メモリ705内のメタデータおよびアクセス・インジケータ704を探すことになる。これらの例では、命令またはメモリ位置に関連付けられたアクセス・インジケータの存在により、命令702内の命令が実行され、かつ/またはデータがメモリ位置712内のメモリ位置にアクセスすると、プロセッサ708がアクセス・インジケータを設定することになる。
図8は、本発明の一実施形態例に従った、プログラムによって指定されたメモリ・アドレスを物理アドレスに変換する際にページ・テーブルが使用される、データ流れを示す例示的ブロック図を示すものである。図8に示されるように、プログラム・アドレス810(データまたは命令用)は、アクティブなアドレス・スペースを指定する様々な手段のうちの1つを使用し、アドレス・スペース・レジスタ820を介して仮想アドレスに変換される。プロセッサは結果として生じる仮想アドレスを使用してページ・テーブル830を検索し、ページ・テーブル830内で仮想アドレスに合致するページ記述子を捜す。合致するページ記述子のコンテンツは、一般に、仮想ページに関連付けられた物理アドレスおよび属性を含む。これらのコンテンツは、仮想アドレスを物理アドレスに変換するため、およびページの属性(たとえばアクセス権)を決定するために使用される。
本発明の他の実施形態では、ページ・テーブルは、命令アクセス・インジケータおよびデータ・アクセス・インジケータなどのアクセス・インジケータを格納するための、各エントリ用の追加フィールドを含むように拡張される。プロセスがページ・テーブルにアクセスして仮想から物理へのページ・アドレスのマッピングを実行する場合、これらの追加フィールドを照会すること、これらのフィールドから値を検索すること、およびページ・テーブルへのアクセスを生じさせる特定イベントに基づいてこれらのフィールド内の値を更新することが可能である。
別の方法として、性能のいかなる低下をも避けるために、変換索引バッファ(TLB)または有効−実アドレス変換バッファ(ERAT)と同様に、これらフィールド内のアクセス・インジケータ情報をプロセッサ・リソース内のキャッシュに入れることができる。たとえば、ページ・テーブルの上記フィールドで提供された仮想−実アドレス変換情報および実行指標情報をキャッシュに入れることが可能な、実行指標索引(Performance Indicator Look−Aside)バッファ(PILAB)を提供することができる。命令またはデータ・アドレス・アクセス要求が受け取られると、PILAB内のプログラムまたは仮想アドレスのルックアップを実行して、アドレス変換情報とアクセス・インジケータ情報の両方を取得することができる。PILABにプログラムまたは仮想アドレスが存在しない場合、ページ・テーブルを調べてこの情報を取得することができる。
図9は、本発明の一実施形態例に従った、例示的ページ・テーブル・エントリを示す図である。図9に示されるように、ページ・テーブル・エントリ900は、仮想ページ・アドレスを格納するためのフィールド910と、物理ページ・アドレスを格納するためのフィールド920と、コード・カバレッジの決定に関するデータを格納するためのコード・カバレッジ・フィールド930〜950とを含む。これらのフィールドは、テストを受けるコンピュータ・アプリケーションのコード・カバレッジを決定するために、テストまたは実行監視アプリケーションによって使用されるものである。これらのコード・カバレッジ・フィールドは、たとえば命令アクセス・インジケータ、データ・アクセス・インジケータ、またはプリフェッチ情報を含むことができる。これら追加フィールド930〜950の値は、テストまたは実行監視アプリケーションによってこれらのユニットに提供された情報に基づいて、プロセッサ内の様々なコンポーネントによって設定することができる。
たとえば、アクセス・インジケータが前述のように命令および/またはデータ部分に関連付けられる同様の方法では、アクセス・インジケータをページ・テーブル内のこれらの命令および/またはデータ部分に関連付けることができる。したがって、命令またはデータ部分が関連するアクセス・インジケータを有するかどうかを判別する場合、命令またはデータ部分の仮想アドレスを使用してページ・テーブル内のエントリを識別することが可能であり、追加フィールド930および940に格納された値をチェックして、アクセス・インジケータが物理ページまたは物理ページの一部に関連付けられているかどうかを調べることができる。すなわち、フィールド930で識別されたオフセット・レンジ内にある仮想アドレスに関連付けられたオフセットが、そこに格納されたアクセス・インジケータを有する場合、仮想アドレスに対応する命令は関連するアクセス・インジケータを有する。このインジケータは、命令が実行されるイベントで設定される。
アクセス・タイプ・フィールド940を使用して、メモリ位置へのアクセスに関して発生したアクセスのタイプが識別される。プリフェッチ情報フィールド950は、ポインタ、オフセット、およびアドレスなどの情報を含むことができる。したがって、たとえば命令またはデータの一部が物理ストレージから検索されなければならない場合、命令またはデータの一部の物理ストレージ位置を識別するためにページ・テーブルが調べられる。同時に、フィールド930〜950を照会し、アクセス・フィールド930内のインジケータを、ページが物理ストレージからフェッチされ、メモリまたはキャッシュにロードされたことを示すように設定することができる。
図9では、アクセス・インジケータを格納するための単一のフィールド、アクセス・タイプを識別するための単一のフィールド、およびプリフェッチ情報を格納するための単一のフィールドのみが示されているが、本発明はこれらに限定されるものでないことを理解されたい。むしろ、本発明の趣旨および範囲を逸脱することなく、物理ページに関連付けられた複数のアクセス・インジケータを格納するための任意数のフィールドなどが使用可能である。
次に図10を参照すると、本発明の好ましい実施形態に従った、命令へのアクセスをマーク付けするためのプロセスの流れ図が記載されている。図10に例示されたプロセスは、図2の命令キャッシュ214などの命令キャッシュで実施することができる。
プロセスは、バンドルを受け取ることによって開始される(ステップ1000)。次に、実行のためにバンドル内の命令が識別される(ステップ1002)。次に、命令が実行される(ステップ1004)。これらの例では、ステップ1004の命令の処理の一部に命令の実行が含まれる。次に、命令に関連付けられたインジケータが、命令の実行を示すように設定される(ステップ1006)。次に、未処理の命令がまだバンドル内に存在しているかどうかに関する判別が行われる(ステップ1008)。
未処理の命令がまだバンドル内に存在している場合、プロセスは前述のようにステップ1002に進む。追加の未処理の命令がバンドル内に存在しない場合、プロセスは終了する。代替の実施形態では、バンドルがブランチを持たない場合1ビットが設定され、ブランチが取られたときに当該ビットが最後に実施された命令を示す。
この例では、命令キャッシュがすべての情報を含み、命令が実行されたときに変更を反映するように更新されることになる命令アクセス・インジケータを含む領域に直接アクセスすることができる。完了した実行に関する情報は、完了バッファまたは完了バッファにアクセスするプロセッサ・ユニットによって提供される。
次に図11を見ると、本発明の好ましい実施形態に従った、命令アクセス・インジケータを設定するために命令キャッシュが従うプロセスを示すためのプロセスの流れ図が記載されている。図11に示されたプロセスは、図2の命令キャッシュ214などの命令キャッシュで実施することができる。
プロセスは、命令実行が完了したことを示す信号を受け取ることによって開始される(ステップ1100)。これらの例では、信号は図2の完了バッファ248などの完了バッファから受け取られる。この完了バッファは、実行が完了した命令を識別する情報を含む。次に、ストレージ内に更新情報が保存され(ステップ1102)、その後プロセスは終了する。この信号の受信に応答して、命令キャッシュ内のエントリをストレージに保存することができる。エントリは、完了バッファからの信号で受け取られた情報を使用して識別される。たとえば信号は、アイテム番号7に対応する命令の実行が完了したことを示すことができる。この命令に関する情報を命令キャッシュ内に作成されたレジスタに配置し、オペレーションを実行するための高速パスを提供することができる。情報をキャッシュに保存する場合、この情報はページ・テーブルまたはシャドー・メモリなどの他の場所に配置される。この更新には命令アクセス・インジケータが命令に関連付けられている場合、こうしたインジケータの設定も含まれる。
この方法では、プロセッサ内のハードウェア・コンポーネントの支援によって、命令に関するコード・カバレッジを識別することができる。このハードウェア支援により、命令が実行されたときに設定される命令アクセス・インジケータを介して、実行された命令を識別することができる。前述の例は、実行されたそれぞれの命令がマーク付けされる細分性を提供するものである。より粗い細分性を望む場合、このプロセスはコード・セグメントまたはサブルーチンなどのコードの一部に適用される。
次に図12を見ると、本発明の好ましい実施形態に従った、サブルーチンへのアクセスのマーク付けを示すためのプロセスの流れ図が記載されている。図12に示されたプロセスは、図2の命令キャッシュ214などの命令キャッシュで実施することができる。
プロセスは、実行された命令を識別することによって開始される(ステップ1200)。次に、命令が、監視用に選択されたサブルーチンの開始アドレスに配置されているかどうかの判別が行われる(ステップ1202)。命令がサブルーチンの開始にない場合、サブルーチンの開始アドレスにある命令用の命令アクセス・インジケータが予め設定されていたかどうかが判別される(ステップ1204)。開始アドレスにある命令用の命令アクセス・インジケータが予め設定されていたと判別された場合、次に、識別された命令がサブルーチン用の戻りアドレスに関するものであるかどうかが判別される(ステップ1206)。命令が戻りアドレスに関するものである場合、その戻り命令用の命令アクセス・インジケータがサブルーチンに関連付けられたメタデータに設定され(ステップ1208)、その後プロセスが終了する。
前述のステップ1206および1204を再度参照し、否定的に判別された場合、プロセスはステップ1200に戻る。ステップ1202で、識別された命令がサブルーチンの開始用である場合、プロセスは前述のようにステップ1208に進む。
次に図13を参照すると、本発明の好ましい実施形態に従った、コード・セグメントへのアクセスを識別するためのプロセスの流れ図が記載されている。図13に示されたプロセスは、図2の命令キャッシュ214などの命令キャッシュで実施することができる。
プロセスは、実行されることになる命令を識別することによって開始される(ステップ1300)。次に、識別された命令がブランチ命令であるかどうかが判別される(ステップ1302)。命令がブランチ命令である場合、その命令に関連付けられた命令アクセス・インジケータが設定され(ステップ1304)、その後プロセスは終了する。前述のように、このインジケータはいくつかの異なる方法で実施することができる。たとえばインジケータは、命令内の特別なフィールドまたは未使用のフィールド内、シャドー・メモリ内、あるいはページ・テーブル内に配置することができる。
ステップ1302を再度参照し、命令がブランチ命令でない場合、前の命令がブランチ命令であるかどうかが判別される(ステップ1306)。前の命令がブランチ命令である場合、プロセスはステップ1304に進み、前述のように命令アクセス・インジケータをマーク付けする。ステップ1306で前の命令がブランチ命令でない場合、プロセスは終了する。本来、ステップ1306はステップ1304と共に、ブランチが発生した場合ブランチ命令に続く命令をマーク付けする。
この方法では、本発明のメカニズムは、実行されたコード・セグメントをマーク付けするためのハードウェア支援を提供する。マーク付けされた命令アクセス・インジケータを検査することによって、コード・カバレッジを決定する際にコード・セグメントの実行を識別することができる。
次に図14を参照すると、本発明の好ましい実施形態に従った、コード・カバレッジ・データを分析するために使用されるコンポーネントを示すブロック図が記載されている。本発明のハードウェア支援メカニズムによって生成されたコード・カバレッジ情報を使用して、レポートまたはグラフィック提示を作成するためのソフトウェア・ツールを採用し、実行されたものとは異なる実行されていないコード領域を識別することができる。このコード・カバレッジ情報は、コードの実行中に発生するメモリ位置へのアクセスも含むことができる。この情報を使用してコードの新しいテストを開始し、コード・カバレッジ内の変化を示すように更新されたレポートまたは提示を生成することができる。
この例で、コード・カバレッジ・アプリケーション1400は、コード1404の実行によって生成されるアクセス・インジケータ・データ1402を取得する。このコードは、たとえばプログラム、アプリケーション、あるいはプログラムまたはアプリケーションの一部に関するコードとすることができる。アクセス・インジケータ・データは、命令アクセス・インジケータおよび/またはデータ・アクセス・インジケータを含む。
これらのインジケータは、コード1404の実行が開始されたときに、初期には設定解除されている。インジケータは、命令が実行されたとき、または命令の実行中にメモリ位置内のデータがアクセスされたときに、設定される。命令の実行によって、メモリ位置に関する命令アクセス・インジケータとデータ・アクセス・インジケータの両方が設定されるようにすることができる。コード1404の実行後、インジケータの一部またはすべてを設定することができる。
コード・カバレッジ・アプリケーション1400は、アクセス・インジケータ・データ1402を分析し、コード1404の実行中にカバーされていた、またはカバーされていなかった命令のパスを識別する。この実行データは、グラフィック・インターフェース(GUI)1406を使用して表示される。このデータの表示には、実行された命令を識別するため、およびアクセスされたデータに関するメモリ位置を識別するために、ハイライト表示あるいは様々な色またはグラフィック・インジケータの使用を含めることができる。GUI1406は、ユーザがコード1404のテストに使用するための新しいパラメータを設定するために使用することもできる。コード1404が再試験されると、新しいアクセスまたはカバレッジ情報が分析され、コード・カバレッジがどのように変更されたかをユーザが理解できるようにGUI1406に表示される。
図示された例では、コード・カバレッジ・アプリケーション1400は、定期的に実行してカバレッジをサンプリングし、更新されたレポートまたは提示を提供する、デーモンとすることができる。ユーザは様々なパラメータを変更するか、またはコード1404の実行に使用可能なシナリオのセットを定義することができる。
コード・カバレッジ・データを収集して、分析のためにユーザに提示することができる。次に図15を参照すると、本発明の好ましい実施形態に従った、実行された命令および実行されていない命令の提示を示すプロセスの流れ図が示されている。この例示的実施形態では、コード1500は、プロセッサによって実際に実行された命令に対して命令アクセス・インジケータをマーク付けするためにハードウェア支援を使用して実行されたソース・コードの一例である。
この例では、セクション1502、1504、および1506が実行されており、セクション1508、1510、1512、および1514は実行されていない命令である。コード1500は、実行された命令が緑などの1つの色を使用して提示され、実行されていない命令が赤などの他の色で提示されるように提示することができる。この方法では、ユーザは実行された命令と実行されていない命令とを容易に識別することができる。他の実施形態では、実行された命令または実行されていない命令のみが表示される。さらにグラフィック・インジケータは、実行された命令に関連付けるかまたはその隣に配置することができる。多くの異なるタイプの提示技法を使用して、コード・カバレッジ情報を表示することができる。たとえばグラフィカル・ユーザ・インターフェースは、ハイライト表示、様々なフォント、および実行された命令のみのディスプレイへの表示を採用することもできる。いずれのタイプの提示システムを使用しても、実行されたコード・ラインと実行されていないコード・ラインとをユーザに識別させることができる。
次に図16を見ると、本発明の好ましい実施形態に従った、コード・カバレッジ・データを収集するため、ならびにプログラム内でカバーされているパスおよびカバーされていないパスを表示するための、プロセスの流れ図が記載されている。図16に示されたプロセスは、コード・カバレッジまたはテスト・アプリケーションで実施することができる。図16に示されたプロセスは、命令の実行に関したコード・カバレッジ・データの収集を対象とするものである。
プロセスは、プログラムが使用するためのテスト・パラメータを受け取ることによって開始される(ステップ1600)。以下に、入力可能なコマンド・ラインの一例として、Test −code −data Applicationについて説明する。この例では、Testはテスト・プログラムであり、Applicationはテストを受けるアプリケーションであり、−codeはコード・カバレッジを示し、−dataはデータ・カバレッジを示す。次に、プログラムが実行される(ステップ1602)。ステップ1602でプログラムを実行することにより、プロセッサによるプログラムに関する命令実行中に、命令アクセス・インジケータなどのアクセス・インジケータの形でのコード・カバレッジ・データの生成が設定される。
次に、ハードウェア支援の実行命令を使用したコード・カバレッジ・データの収集が完了したかどうかが判別される(ステップ1604)。コード・カバレッジ・データの収集が完了していない場合、プロセスはステップ1602に戻ってプログラムの実行を続行する。そうでない場合、実行された命令が識別される(ステップ1606)。ステップ1606は図示されたこれらの例では、設定された命令アクセス・インジケータを使用して命令を識別することによってインプリメントされる。次に、実行されていない命令が識別される(ステップ1608)。ステップ1608はこれらの例では、設定されていない命令アクセス・インジケータを使用して命令を識別することによってインプリメントされる。次に、カバーされている実行のパスとカバーされていない実行のパスを識別する実行データが表示される(ステップ1610)。これらの例では表示はGUIであり、カバーされている実行パスとカバーされていない実行パスとを分析するためにグラフィックでユーザに提示することが可能である。
次に、プログラムの実行中に使用するための新しいパラメータが存在するかどうかが判別される(ステップ1612)。新しいパラメータがない場合、プロセスは終了する。新しいパラメータがある場合、前述のようにプロセスはステップ1600に進む。
この図示された例では、プログラムの実行後にカバレッジ・データの提示が表示される。インプリメンテーションに応じて、プログラムの実行中にデータを定期的に表示すること、およびユーザが実行中にパラメータを変更できるようにすることが可能であり、コード・カバレッジがどのように変化するかがわかる。
本発明のメカニズムは、データ・アクセスの形でカバレッジを決定するためのメカニズムも提供する。インジケータはメタデータと共に格納することが可能であり、メタデータはインスツルメンテーション用に特定ピースのデータを選択する。データがアクセスされたかどうかの表示をいくつかの異なる場所に格納することができる。たとえば、特別なビットでワードを拡張することが可能であり、シャドー・キャッシュ領域を提供することが可能であり、この情報を含むようにページ・テーブルを設計することが可能である。
データ・アクセス・カバレッジをサポートしている場合、コンパイラはメタデータ・デバッグ・セクション(シンボル・セクションと同様)の作成をサポートするように更新され、オペレーティング・システムは、リンカ/ローダならびに実行監視またはテスト・カバレッジ・デバイス・ドライバと共に、特別なオペレーション・モードを許容する。これらの技法は、メモリのワード当たり1つの特別ビットまたはワードを模倣している。様々なメカニズムを使用して、指定されたアプリケーションが実行された場合、指定されたデータ領域が実行されたことを示すようにビットが設定される。このサポートを示すための様々な方法がある。たとえば、各データ・バイトにビットを与えるか、または各データ・ワードにビットを与えることができる。コンパイラが生成したメタデータは、このマッピングをハードウェアに提供して使用することができる。マッピングはデータ・タイプによって異なる場合がある。データ・フィールドがアクセスされる場合、データ・アクセス・インジケータに適切なビットが設定される。マッピングに応じて、異なるデータ・アクセスに同じビットを設定することができる。
次に図17を見ると、本発明の好ましい実施形態に従った、データを含むメモリ位置へのアクセスをマーク付けするためのプロセスの流れ図が記載されている。このプロセスは、図示されたこれらの例でデータ・アクセスが発生すると必ず開始される。図17に示されたプロセスは、図2のデータ・キャッシュ216などのデータ・キャッシュで実施することができる。
プロセスは、メモリ位置のデータへのアクセスを検出することによって開始される(ステップ1700)。これらの例ではこのデータ・アクセスは、命令の実行中にデータがアクセスされたことを示すように完了バッファによって生成された信号を介して、データ・キャッシュによって識別される。一実施形態では、実行された命令が識別され、命令キャッシュ・ユニットはそのデータ・オペランドを認識して完了バッファからの信号を受け取り、命令のデータ・オペランドがアクセスされたことを示す信号をデータ・キャッシュ・ユニットに送る。別の方法では、アクセスされたデータの表示を、完了バッファがデータ・キャッシュに直接送ることができる。この方法では、完了バッファがデータ情報を知る必要が生じることになる。
次に、アクセスを示すためのデータを含むメモリ位置に関連付けられたデータ・アクセス・インジケータが設定される(ステップ1702)。図示されたこれらの例では、データ・アクセス・インジケータをシャドー・メモリ内またはページ・テーブル内に配置することができる。インジケータの設定はプロセッサが選択されたモードまたは特殊なモードの場合に行われ、バイト、ワード、またはダブル・ワードなどの長さを有するデータ用にビットが設定される。次にメモリ位置アクセスが処理され(ステップ1704)、その後プロセスは終了する。
テスト・カバレッジの決定は困難な問題であり、データ・アクセスおよびデータ使用を理解することが役立つ場合がある。言い換えれば、割振り済みの配列が使用されているか、または静的なデータ・ピースが用いられているかを知ることが役立つ。さらに、テスト・データの境界もテスト・カバレッジでは重要である。たとえば、配列に十分なスペースが割り振られているかどうかを判別することが有用である。この判別は、配列外へのアクセスがあったかどうかを判別することによって実行することができる。
本発明のメカニズムは、動的データ領域カバレッジで使用するための実行プログラムがアクセス可能なコール・フロー・ツリーの構造および保守を提供するものである。mallocなどのデータの割振りが要求されると、ツリーを構築するためのルーチンが呼び出される。コール・スタックを決定するための方法は、malloc時に呼出しシーケンスを決定するためにスタックを探索することである。他の方法は、データ・アクセス・インジケータの設定を介して生成されたハードウェア情報を使用することである。これと同様の技法は、参照により本明細書に組み込まれた、2004年3月18日出願、整理番号AUS920030548US1の「Method and Apparatus for Determining Computer Program Flows Autonomically Using Hardware Assisted Thread Stack Tracking and Cataloged Symbolic Data」という名称の米国特許出願第10/803663号に記載されている。この技法は、以下ではコール・スタックと呼ばれる呼出しシーケンスを識別するために使用される。このツリーはメモリ内で維持され、デバイス・ドライバはアプリケーション・プログラミング・インターフェース(API)呼出しなどの呼出しを介してこれにアクセスし、現在のスレッドに関するコール・スタック情報を読み取ることができる。コール・スタックを維持しアドレスをシンボル名に変換するようにハードウェア・スレッドを維持するためのプロセスは、2004年3月18日出願、整理番号AUS920030548US1の「Method and Apparatus for Determining Computer Program Flows Autonomically Using Hardware Assisted Thread Stack Tracking and Cataloged Symbolic Data」という名称の米国特許出願第10/803663号に記載されている。デバイス・ドライバから検索されたコール・スタックは、スタックをスレッド指向ツリーに移動させるアークフロー(arcflow)プログラムに送られる。このプロセスは、1999年6月30日出願、整理番号AT9−98−850の「Method and System for Merging Event−Based Data and Sampled Data Into Postprocessed Trace Output」という名称の米国特許第09/343438号に記載されている。1つの方法には、フラグを立てるために開始領域、終了領域、および終了領域に続く1バイトを示すことが含まれる。さらにこのメモリ領域内に他の統計を維持することもできる。他のハードウェア支援機能、アクセス数、キャッシュ・ミス、サイクルなどを含む、他の統計の例を維持することができる。
次に図18を見ると、本発明の好ましい実施形態に従った、データ・キャッシュが従うプロセスを示すためのプロセスの流れ図が記載されている。図18に示されたプロセスは、図2のデータ・キャッシュ216などのデータ・キャッシュで実施することができる。
プロセスは、メモリ位置内の命令アクセス・データの実行が完了したことを示す信号が受け取られることによって開始される(ステップ1800)。通常この信号は、完了バッファから受け取られる。更新情報はストレージ内に保存され(ステップ1802)、その後プロセスは終了する。データ・キャッシュ内のレジスタに格納された情報が保存される。この情報はページ・テーブルに保存することが可能であり、さらにシャドー・キャッシュなどの他のストレージにデータ・アクセス・インジケータを設定することもできる。ページ・テーブルに保存される情報には、通常、命令がアクセスしたデータによるどのような変更も含まれる。一方で、他のストレージに保存される情報には、メモリ位置へのアクセスが発生したことを示すためのデータ・アクセス・インジケータの設定が含まれる。
次に図19を見ると、本発明の好ましい実施形態に従った、ランタイム中に動的メモリ割振りが発生した場合にコール・スタック情報を取得するためのプロセスの流れ図が記載されている。図19に示されたプロセスは、ソフトウェアで実施することができる。プロセスは、動的メモリ割振りを検出することによって開始される(ステップ1900)。動的メモリ割振りは、命令がメモリの割振りを必要とする場合に、ランタイム中に要求される。次に、コール・スタック情報が取得される(ステップ1902)。その後、割り振られたメモリが識別される(ステップ1904)。次にレポート用メモリがマーク付けされ(ステップ1906)、その後プロセスは終了する。メモリは、割り振られたメモリ内のデータへのアクセスをマーク付けするタイミングをデータ・キャッシュなどのハードウェアに知らせるための、レポート作成用にマーク付けされる。メモリ割振りは、エラーのチェックが可能なように、メモリ割振りルーチンが指定より多くのメモリを割り振るようにすることができる。たとえば、メモリ割振りルーチンは追加のバイトを割り振ること、ならびに開始アドレス、終了アドレス、および終了アドレスに続く1バイトにフラグを立てることが可能である。言い換えれば、これらのマーク付けされたアドレスへのアクセスが生じた場合に、これらのフラグが立てられたセクションにデータ・アクセス・インジケータが設定されることになる。これらの例では、終了アドレスに続く1バイトは、このメモリ位置へのアクセスによってデータ・アクセス・インジケータが設定されるようにマーク付けされる。この方法では、使用するのに十分なメモリが割り振られているかどうかが判別される。プログラムの実行中にこのデータ・アクセス・インジケータが設定された場合、割り振られたメモリの領域を越えてアクセスが発生するため、メモリの割り振りが不十分である可能性がある。
次に図20を見ると、本発明の好ましい実施形態に従った、メモリが割振り解除される場合に、プログラムの実行中に発生するデータ・アクセスに関する情報を送信するためのプロセスの流れ図が記載されている。図20に示されたプロセスは、ソフトウェアで実施することができる。
プロセスは、フリー要求などのメモリ割振り解除が検出されることによって開始される(ステップ2000)。次に割り振られたメモリ内のデータへのアクセスを識別する情報が収集される(ステップ2002)。次に、処理のためにアクセス・データおよびコール・スタック情報が送信され(ステップ2004)、その後プロセスは終了する。このデータは、処理のためにソフトウェア・ツールに送信される。ステップ2004は、ソフトウェア・ツールがアクセスできる場所にデータを配置することを含むことができる。
これらの例では、データはメモリが割振り解除されるときにリアルタイムで送られる。情報を集めて処理のために送ることが可能な他の時間には、監視プロセスによって実行されるサンプリングが含まれる。他の場合には、プログラムが実行を完了した後に情報を送ることができる。データへのアクセスを識別する情報は、メモリ位置の識別以外の情報を含むことができる。たとえば当該情報は、メモリの割振りを要求したコードの識別および割り振られたメモリのサイズも含むことができる。さらに、相互参照された出願に記載されたハードウェア支援メカニズムを使用して、メモリ位置へのアクセス数を記録することもできる。
次に図21を見ると、本発明の好ましい実施形態に従った、初期化またはアクセスされていない領域を識別するためにコール・フロー・ツリーを生成するためのプロセスの流れ図が記載されている。図21に示されたプロセスは、コード・カバレッジを識別するために使用されるソフトウェア・ツールで実施することができる。このプロセスは、図19および20で収集された情報を使用して、初期化またはアクセスされていない領域を識別するためのコール・フロー・ツリーを生成する。このコール・フロー・ツリーは、アクセスされたメモリ位置ならびにアクセスされていないメモリ位置に関する情報も含む。
プロセスは、アクセス・データおよびコール・スタック情報が受け取られると開始される(ステップ2100)。次に、受け取られたデータおよびコール・スタック情報が処理される(ステップ2102)。次に、発呼者およびコード割振りメモリを識別するコール・フロー・ツリーが生成される(ステップ2104)。次に、データ・アクセス情報を含むリーフ・ノードIDデータが生成され(ステップ2106)、その後プロセスは終了する。データ領域に関するアクセス情報が、データがアクセスされたメモリを割り振ったノードに関連付けられたリーフ・ノードに配置される。
本発明のメカニズムは、データ領域へのアクセスに関するカバレッジを使用して、初期化されていない、アクセスされていない、またはアクセスされたデータの領域に関する情報を提供する。これらのデータ領域を識別する際に、どのデータ領域がアクセスされているか、およびどのデータ領域がアクセスされていないかを示す方法で、オリジナルのソース・コードをマーク付けまたは提示することができる。データの動的割振りに関して、動的メモリ割振りが発生するソース・コードの部分にフラグを立てることが可能であり、その結果、実行中に割り振られたメモリ領域は、それらのメモリ領域内でアクセスが発生したときにデータ・アクセス・インジケータにマーク付けされる。さらに、コード内の命令にマーク付けして、静的データ構造がアクセスされたときに、ハードウェアにインジケータを設定させるようにすることもできる。
次に図22を見ると、本発明の好ましい実施形態に従った、データ領域のカバレッジを示すグラフィカル・レポートを示す図が記載されている。この例では、レポート2200が領域2202内のデータ・アクセス・カバレッジを示している。この領域は静的データ領域を示す。領域2202内のセクション2204、2206、および2208は、データ・アクセスが発生したメモリ位置である。これらのセクションは、コードの実行中に設定されたデータ・アクセス・インジケータを特定することによって識別される。
コール・フロー・ツリー2210は、領域2212に示されるように動的にメモリを割り振ったコードのセクションをノードDが表す、コール・フロー・ツリーの一例である。領域2212内のこの情報は、コール・フロー・ツリー2210内のノードDに関連付けられたリーフ・ノード内で特定された情報である。領域2212内のセクション2214は、領域2212のアクセスされた部分を示す。
次に図23を見ると、本発明の好ましい実施形態に従った、表示情報を生成するためのプロセスの流れ図が示されている。図23に示されたプロセスは、データ・アクセスのカバレッジを決定するためのソフトウェア・ツールで実施することができる。
プロセスは、静的および動的データに関するデータ・アクセス情報を取得することによって開始される(ステップ2300)。この情報には、コードを実行するために割り振られたデータ・アクセス・インジケータを取得することが含まれる。取得される他の情報には、前述のようにメモリの動的割振り時に生成されるコール・フロー・ツリーが含まれる。
次に、静的および動的データへのアクセスに関するカバレッジ・マップが生成される(ステップ2302)。次に、カバレッジ・マップが表示され(ステップ2304)、その後プロセスは終了する。カバレッジ・マップは図22のレポート2200と同様である。レポート・プログラムは、レポーティング構造でオフセットを使用できるようにするためのサポートを有することができる。たとえば、c:\program files\appl.exe(func1:100)を使用して、func1の位置100からmallocが発行されたことを示すことができる。
プロセッサ・バスは高速であり、メモリ・アクセスはプロセッサの速度よりもかなり遅い。これは、データ処理システムの性能がプロセッサの速度ではなくメモリ・アクセスによってゲート制御または制限される場合には、なおさらである。この現象の結果、複数レベルのキャッシュを使用し、データへのアクセスをより迅速にするためにこれらのキャッシュにデータをプリフェッチするよう試行することになる。しかしながら、通常、プリフェッチの試行はコードまたはストライド駆動型であり、データ依存型の動的アクセスは適切に処理しない。既存の方式のほとんどが、コンパイラまたはプログラマにコード・ストリームでのプリフェッチ・ヒントの作成を要求するものである。オブジェクト・コードが生成されると、これらのヒントからプリフェッチを可能にする情報が与えられる。しかしながら、このシステムではコードを変更する機会がほとんど与えられない。その例には、ガーベッジ・コレクションまたはポインタ追跡のためのJavaオブジェクトにおける参照追跡が含まれる。
本発明のメカニズムは、ハードウェア支援を使用することによってプリフェッチを向上させる。メタデータを使用して、プリフェッチ・インジケータをデータに関連付けることができる。たとえば、プリフェッチ・インジケータ・データは、データがプリフェッチされるポインタとして扱われるものであることを示すことができる。プリフェッチ・インジケータそれ自体を、データ構造を示すポインタとすることができる。データがキャッシュにロードされると、プロセッサはポインタ・プリフェッチ条件を検出し、データによって示されたキャッシュ・ラインをプリフェッチする。
次に図24を見ると、本発明の好ましい実施形態に従った、メタデータを使用してキャッシュにデータをプリフェッチするためのプロセスの流れ図が記載されている。図24に示されたプロセスは、これらの例のロード/ストア・ユニットで実施することができる。これらの例では、プリフェッチされるデータはポインタである。
プロセスは、命令をロードすることによって開始される(ステップ2400)。次に、プリフェッチのためのメタデータが命令に関連付けられているかどうかが判別される(ステップ2402)。これらの例では、メタデータは命令に関連付けられたプリフェッチ・インジケータである。
プリフェッチのためのメタデータが命令に関連付けられている場合、ハードウェアがデータをプリフェッチすることに決定したかどうかが判別される(ステップ2404)。好ましい実施形態では、命令キャッシュは、いつ命令キャッシュが投機的にプリフェッチするか、およびプリフェッチするかどうかを判別する。たとえば命令キャッシュは、特に目立ったキャッシュ・ミスがない、およびかなり以前から使用されていない交換可能なキャッシュ・エントリがあると、決定することができる。この場合、命令キャッシュは投機的にプリフェッチする。しかしながら、命令キャッシュに目立ったミスがある、および/または交換に便利なキャッシュ・ラインがない場合、投機的にプリフェッチしないことがある。キャッシュ・ミスの数および/または交換可能なキャッシュ・ラインの数に関するしきい値を設定し、プリフェッチ・インジケータが存在する場合に命令キャッシュがデータをプリフェッチするかどうかを判別することができる。たとえば、目立ったキャッシュ・ミスが選択されたしきい値よりも少ない場合、プリフェッチを行うことができる。これらの図示された例では、キャッシュ・ラインの交換が望ましい場合、および交換のために選択されたキャッシュ・ラインの数が選択されたしきい値よりも多い場合も、プリフェッチを行うことができる。ロード・ストア・ユニットは、キャッシュ・ユニットに投機的にロードするように要求を発行することができるが、実際にプリフェッチするかどうかはキャッシュ・ユニットが判別する。
別の方法として、ロード・ストア・ユニットは、ハードウェア・インプリメンテーションに応じてキャッシュ・ユニットに投機的にロードするかどうかを判別することができる。ハードウェアがデータのプリフェッチを決定すると、データは命令に関連付けられたメタデータを使用してキャッシュにプリフェッチされる(ステップ2406)。これらの例では、データはポインタである。このポインタはデータ構造またはデータ・ブロックを指すポインタである。次に処理のために命令がユニットに送信され(ステップ2408)、その後プロセスは終了する。
ステップ2404を再度参照すると、ハードウェアがデータをプリフェッチしないと決めた場合、前述のようにプロセスはステップ2408に戻る。ステップ2402でプリフェッチ用のメタデータが命令に関連付けられていない場合、前述のようにプロセスはステップ2408に進む。これらの例では、ハードウェアは、プリフェッチを実行するべきであるという表示をハードウェアが発行する前、発行すると同時、または発行した後に、処理のために命令をユニットに送ることができる。
本発明のメカニズムは、データ構造またはデータ・ブロックを指すポインタのプリフェッチに加えて、データ構造内のメモリ位置からデータをプリフェッチする機能を提供する。ポインタと共にストライドまたはオフセットを使用して、プリフェッチされるデータを識別することができる。別の方法として、アドレスを使用して望ましいデータの場所を識別することができる。
次に図25を見ると、本発明の好ましい実施形態に従った、開始点からどのデータがプリフェッチされるかの識別を含むメタデータを示すためのプロセスの流れ図が記載されている。図24に示されたプロセスは、図2のロード・ストア・ユニット228などのロード・ストア・ユニットに実装することができる。
プロセスは、プリフェッチを示すメタデータを検出することによって開始される(ステップ2500)。メタデータは、ポインタによって識別されたデータ構造からどのデータがプリフェッチされるかの識別を含むことができる。このメタデータは、ポインタの形のプリフェッチ・インジケータを含むことができる。メタデータは、オフセットまたはアドレスを使用することによって、データそれ自体の識別も含むことができる。キャッシュ・ユニットの状態に基づいて、プリフェッチを実行すべきであるかどうかを判別する(ステップ2502)。これらの例のプリフェッチは、キャッシュ・ユニットの状態に応じてプロセスが選択的に実行される、投機的なものである。たとえば何らかの値を超える数のキャッシュ・ミスが発生した場合、プリフェッチは実行されず、プロセスは終了する。
ステップ2502で、プリフェッチが実行される場合、プリフェッチ用に選択されたメモリ内のポイントが配置される(ステップ2504)、この選択されたメモリ・ポイントは、ポインタおよびオフセットまたはストライド、あるいはメモリ・アドレスを使用してメタデータ内で識別することができる。次に、メモリ内の選択されたポイントからキャッシュ内へデータがプリフェッチされ(ステップ2506)、その後プロセスは終了する。ステップ2502を参照すると、プリフェッチが実行されない場合、プロセスは終了する。
したがって本発明は、コード・カバレッジ用のハードウェア支援を提供するための改良された方法、装置、およびコンピュータ命令を提供するものである。本発明のメカニズムは、プログラムの実行中に命令の実行およびメモリ位置へのアクセスを監視する機能を可能にするものである。メモリ位置における命令の実行またはデータへのアクセスを示すための、アクセス・インジケータが提供される。これらインジケータの設定は、プロセッサ内の様々なコンポーネントなどのハードウェアによって実行される。この方法でソフトウェア・ツールは、より良いカバレッジを供えたカバレッジ・データを取得および分析し、テストされるコードの変更を避けることができる。
さらに、前述の流れ図に示された各ステップは、プログラム実行時にカバレッジを決定する際に支援を提供するハードウェアに関して、ハードウェア内の様々なコンポーネントが実行可能なプロセスの論理流れを提供する。具体的に言えば、これらのステップは、プロセッサ内のマイクロコードまたはハードウェア論理として実施することができる。これらの例でマイクロコードは、プロセッサを直接制御する最も下位の命令である。通常、単一のマシン言語命令がいくつかのマイクロコード命令に変換される。マイクロコードはハードウェアまたはソフトウェアの形を取ることができる。現在の多くのプロセッサでは、マイクロコードはプロセッサにハードワイヤードされる。
以上、本発明について、完全に機能しているデータ処理システムとの関連において説明してきたが、本発明のプロセスが命令のコンピュータ読取り可能媒体の形および様々な形で配布可能であること、ならびに本発明が、当該配布を実施するために実際に使用される特定タイプの信号伝搬媒体に関わらず等しく適用されることを、当業者であれば理解するであろうということに留意されたい。コンピュータ読取り可能媒体の例には、フロッピィ・ディスク、ハード・ディスク・ドライブ、RAM、CD−ROM、DVD−ROMなどの追記型媒体、ならびに、たとえば無線周波および光波の伝送などの伝送形式を使用する、デジタルおよびアナログの通信リンク、有線または無線の通信リンクなどの伝送型媒体が含まれる。コンピュータ読取り可能媒体は、特定のデータ処理システムで実際に使用するために復号される符号化フォーマットの形を取ることができる。
本発明の記述は例示および説明の目的で提示したものであり、すべてを網羅することまたは本発明の開示された形式に限定することを意図するものではない。当業者であれば、多くの修正および変形が明らかとなろう。たとえば、様々なプロセッサ・アーキテクチャが、ユニットを横切って情報を伝送するために使用される様々なメカニズムを利用して、本明細書に指定された機能を異なるユニットに渡って配布できることに留意されたい。さらに、本発明の機能を実施するものとして特定のプロセッサ・ユニットについて説明してきたが、これらの様々な機能をハードウェア内の他のプロセッサ・ユニットに組み込むことも可能である。また、図面に記載されたステップは、実行ユニットによって使用されるマイクロコードなどの、プロセッサ内の様々なプロセッサ・ユニットによって特異的に使用されるハードウェア回路または命令のいずれとしても実装可能である。
当該実施形態は、本発明の原理、実際の応用例を最も良く説明するように、ならびに他の当業者が、特定の用途に好適なように企図された様々な修正を伴う様々な実施形態に関して本発明を理解できるように、選択され説明されたものである。
本発明が実施可能なデータ処理システムを示すブロック図である。 本発明の好ましい実施形態に従った、情報を処理するためのプロセッサ・システムを示すブロック図である。 本発明の好ましい実施形態に従った、インジケータに関連付けられた命令の処理に使用されるコンポーネントを示す図である。 本発明の好ましい実施形態に従った、アクセスされたメモリ位置を識別するインジケータの設定に使用される信号のデータ流れを示す図である。 本発明の好ましい実施形態に従った、アクセス・インジケータを命令またはメモリ位置に関連付けるための1つのメカニズムを示す図である。 本発明の好ましい実施形態に従ったバンドルを示す図である。 本発明の好ましい実施形態に従った、インジケータなどのメタデータを生成するために使用されるコンポーネントを示すブロック図である。 本発明の一実施形態例に従った、プログラムによって指定されたメモリ・アドレスを物理アドレスに変換する際にページ・テーブルが使用される、データ流れを示す例示的ブロック図である。 本発明の一実施形態例に従った、例示的ページ・テーブル・エントリを示す図である。 本発明の好ましい実施形態に従った、命令へのアクセスをマーク付けするためのプロセスの流れ図である。 本発明の好ましい実施形態に従った、命令アクセス・インジケータを設定するために命令キャッシュが従うプロセスを示すためのプロセスの流れ図である。 本発明の好ましい実施形態に従った、サブルーチンへのアクセスのマーク付けを示すためのプロセスの流れ図である。 本発明の好ましい実施形態に従った、コード・セグメントへのアクセスを識別するためのプロセスの流れ図である。 本発明の好ましい実施形態に従った、コード・カバレッジ・データを分析するために使用されるコンポーネントを示すブロック図である。 本発明の好ましい実施形態に従った、実行された命令および実行されていない命令の提示を示すプロセスの流れ図である。 本発明の好ましい実施形態に従った、コード・カバレッジ・データを収集するため、ならびにプログラム内でカバーされているパスおよびカバーされていないパスを表示するための、プロセスの流れ図である。 本発明の好ましい実施形態に従った、データを含むメモリ位置へのアクセスをマーク付けするためのプロセスの流れ図である。 本発明の好ましい実施形態に従った、データ・キャッシュが従うプロセスを示すためのプロセスの流れ図である。 本発明の好ましい実施形態に従った、ランタイム中に動的メモリ割振りが発生した場合にコール・スタック情報を取得するためのプロセスの流れ図である。 本発明の好ましい実施形態に従った、メモリが割振り解除される場合に、プログラムの実行中に発生するデータ・アクセスに関する情報を送信するためのプロセスの流れ図である。 本発明の好ましい実施形態に従った、初期化またはアクセスされていない領域を識別するためにコール・フロー・ツリーを生成するためのプロセスの流れ図である。 本発明の好ましい実施形態に従った、データ領域のカバレッジを示すグラフィカル・レポートを示す図である。 本発明の好ましい実施形態に従った、表示情報を生成するためのプロセスの流れ図である。 本発明の好ましい実施形態に従った、メタデータを使用してキャッシュにデータをプリフェッチするためのプロセスの流れ図である。 本発明の好ましい実施形態に従った、開始点からどのデータがプリフェッチされるかの識別を含むメタデータを示すためのプロセスの流れ図である。
符号の説明
211 システム・バス
212 BIU
214 命令キャッシュ
216 データ・キャッシュ
218 シーケンサ・ユニット
220 ブランチ・ユニット
222 固定小数点ユニットA
224 固定小数点ユニットB
226 複合固定小数点ユニット
228 ロード/ストア・ユニット
230 浮動小数点ユニット
232 GPR
234 名前変更バッファ
236 FPR
238 名前変更バッファ
240 SPRユニット
242 キャリー・ビット・レジスタ
240 実行監視ユニット
241 PMC1
242 PMC2
243 MMCR
244 MMCR
248 完了バッファ
250 割込みユニット

Claims (24)

  1. データ処理システムで、コードに関するカバレッジ・データを提示するための方法であって、
    前記コードに関連付けられた命令アクセス・インジケータを含む前記カバレッジ・データを、テスト・パラメータに応じて取得する第1のステップと、
    前記データ処理システムのプロセッサによって設定された特定の命令アクセス・インジケータを、前記プロセッサによる前記コードの実行に応じて識別し、前記特定の命令アクセス・インジケータと前記コードとの関連付けを得る第2のステップと、
    前記コードの実行後、前記コードとの関連付けが得られた前記特定の命令アクセス・インジケータを区別して前記カバレッジ・データを提示し、前記コードの実行中に前記テスト・パラメータの変更があった際に前記カバレッジ・データの変化の様子を提示する第3のステップとを有する方法。
  2. 前記プロセッサによる前記コードの実行中に設定解除された状態の命令アクセス・インジケータを識別して提示するステップをさらに有する請求項1に記載の方法。
  3. 前記命令アクセス・インジケータは第1の色を使用して識別・提示され、前記設定解除された状態の命令アクセス・インジケータは第2の色を使用して識別・提示される請求項2に記載の方法。
  4. 前記命令アクセス・インジケータはグラフィック・インジケータを使用して識別・提示され、前記設定解除された状態の命令アクセス・インジケータは前記グラフィック・インジケータを使用して識別・提示される請求項2に記載の方法。
  5. 前記第3のステップは前記コードの実行中に定期的に実行される請求項2に記載の方法。
  6. 前記第3のステップは、前記コードの実行の完了、時間の満了、および前記コード内での選択された命令タイプの少なくとも1つで実行される請求項2に記載の方法。
  7. 前記コードの一部は前記コード内の単一の命令であり、前記コード内のあらゆる命令は異なる命令アクセス・インジケータに関連付けられる請求項1に記載の方法。
  8. 前記コードの一部は前記コード内のサブルーチンである請求項1に記載の方法。
  9. 前記コードの一部は前記コード内のブランチ命令である請求項1に記載の方法。
  10. コードに関するカバレッジ・データを提示するためのデータ処理システムであって、
    前記コードに関連付けられた命令アクセス・インジケータを含む前記カバレッジ・データを、テスト・パラメータに応じて取得する取得手段と、
    前記データ処理システムのプロセッサによって設定された特定の命令アクセス・インジケータを、前記プロセッサによる前記コードの実行に応じて識別し、前記特定の命令アクセス・インジケータと前記コードとの関連付けを得る識別手段と、
    前記コードの実行後、前記コードとの関連付けが得られた前記特定の命令アクセス・インジケータを区別して前記カバレッジ・データを提示し、前記コードの実行中に前記テスト・パラメータの変更があった際に前記カバレッジ・データの変化の様子を提示する生成手段とを有するデータ処理システム。
  11. 前記識別手段は第1の識別手段であり、
    さらに前記プロセッサによる前記コードの実行中に設定解除された状態の命令アクセス・インジケータを識別して提示する第2の識別手段を有する請求項10に記載のデータ処理システム。
  12. 前記命令アクセス・インジケータは第1の色を使用して識別・提示され、前記設定解除された状態の命令アクセス・インジケータは第2の色を使用して識別・提示される請求項11に記載のデータ処理システム。
  13. 前記命令アクセス・インジケータはグラフィック・インジケータを使用して識別・提示され、前記設定解除された状態の命令アクセス・インジケータは前記グラフィック・インジケータを使用して識別・提示される請求項11に記載のデータ処理システム。
  14. 前記生成手段は、前記コードの実行中に定期的に実行する請求項11に記載のデータ処理システム。
  15. 前記生成手段は、前記コードの実行の完了、時間の満了、および前記コード内での選択された命令タイプの少なくとも1つに応じて実行する請求項11に記載のデータ処理システム。
  16. 前記コードの一部は前記コード内の単一の命令であり、前記コード内のあらゆる命令は異なる命令アクセス・インジケータに関連付けられる請求項11に記載のデータ処理シ
    ステム。
  17. 前記コードの一部は前記コード内のサブルーチンである請求項11に記載のデータ処
    理システム。
  18. 前記コードの一部は前記コード内のブランチ命令である請求項11に記載のデータ処
    理システム。
  19. コードに関するカバレッジ・データを提示するためのコンピュータ読取り可能媒体に記憶されたコンピュータ・プログラムであって、
    前記コードに関連付けられた命令アクセス・インジケータを含む前記カバレッジ・データを、テスト・パラメータに応じて取得する第1の命令と、
    データ処理システムのプロセッサによって設定された特定の命令アクセス・インジケータを、前記プロセッサによる前記コードの実行に応じて識別し、前記特定の命令アクセス・インジケータと前記コードとの関連付けを得る第2の命令と、
    前記コードの実行後、前記コードとの関連付けが得られた前記特定の命令アクセス・インジケータを区別して前記カバレッジ・データを提示し、前記コードの実行中に前記テスト・パラメータの変更があった際に前記カバレッジ・データの変化の様子を提示する第3の命令とを有するコンピュータ・プログラム。
  20. 前記プロセッサによる前記コードの実行中に設定解除された状態の命令アクセス・インジケータを識別して提示する第4の命令をさらに有する請求項19に記載のコンピュータ・プログラム。
  21. 前記命令アクセス・インジケータは第1の色を使用して識別・提示され、前記設定解除された状態の命令アクセス・インジケータは第2の色を使用して識別・提示される請求項20に記載のコンピュータ・プログラム。
  22. 前記命令アクセス・インジケータはグラフィック・インジケータを使用して識別・提示され、前記設定解除された状態の命令アクセス・インジケータは前記グラフィック・インジケータを使用して識別・提示される請求項20に記載のコンピュータ・プログラム。
  23. 前記第3の命令は、前記コードの実行中に定期的に実行される請求項20に記載のコンピュータ・プログラム。
  24. 前記第3の命令は、前記コードの実行の完了、時間の満了、および前記コード内での選択された命令タイプの少なくとも1つで実行される請求項20に記載のコンピュータ・プログラム。
JP2005077200A 2004-03-22 2005-03-17 コード・カバレッジ用のハードウェア支援を使用する自律テスト・ケース・フィードバックのための方法および装置 Expired - Fee Related JP4749745B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/808716 2004-03-22
US10/808,716 US7480899B2 (en) 2004-03-22 2004-03-22 Method and apparatus for autonomic test case feedback using hardware assistance for code coverage

Publications (2)

Publication Number Publication Date
JP2005276201A JP2005276201A (ja) 2005-10-06
JP4749745B2 true JP4749745B2 (ja) 2011-08-17

Family

ID=34987786

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005077200A Expired - Fee Related JP4749745B2 (ja) 2004-03-22 2005-03-17 コード・カバレッジ用のハードウェア支援を使用する自律テスト・ケース・フィードバックのための方法および装置

Country Status (4)

Country Link
US (2) US7480899B2 (ja)
JP (1) JP4749745B2 (ja)
CN (1) CN100357911C (ja)
TW (1) TWI353526B (ja)

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
US8381037B2 (en) 2003-10-09 2013-02-19 International Business Machines Corporation Method and system for autonomic execution path selection in an application
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
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
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
FR2871907B1 (fr) * 2004-06-22 2006-09-08 Thales Sa Dispositif de controle de la couverture structurelle d'un logiciel et procede mettant en oeuvre le dispositif
US20060225051A1 (en) * 2005-04-05 2006-10-05 Cisco Technology, Inc. Method and system for code coverage
CN101661425B (zh) * 2008-08-26 2012-03-21 国际商业机器公司 测试覆盖分析方法和装置
US9058421B2 (en) * 2009-06-16 2015-06-16 Freescale Semiconductor, Inc. Trace correlation for profiling subroutines
US20110154117A1 (en) * 2009-12-22 2011-06-23 General Electric Company, A New York Corporation Methods and apparatus to perform log file analyses
US20110320766A1 (en) * 2010-06-29 2011-12-29 Youfeng Wu Apparatus, method, and system for improving power, performance efficiency by coupling a first core type with a second core type
US8769497B2 (en) * 2010-07-20 2014-07-01 General Electric Company System and method for use in indicating execution of application code
KR20120040841A (ko) 2010-10-20 2012-04-30 엘지전자 주식회사 영상 표시기기에서 포인터 이동방법 및 그를 이용한 영상 표시 기기
US9087153B2 (en) 2011-11-04 2015-07-21 International Business Machines Corporation Code coverage framework
US8776025B2 (en) * 2011-11-04 2014-07-08 International Business Machines Corporation Integrated debugger and code coverage tool
US8863307B2 (en) 2012-06-05 2014-10-14 Broadcom Corporation Authenticating users based upon an identity footprint
CN102736979B (zh) * 2012-06-29 2014-12-31 南京大学 一种基于符号执行的带反馈测试用例生成方法
CN103440199B (zh) * 2013-08-27 2016-08-31 百度在线网络技术(北京)有限公司 测试引导方法和装置
US10360140B2 (en) * 2013-11-27 2019-07-23 Entit Software Llc Production sampling for determining code coverage
US9454467B2 (en) * 2013-12-12 2016-09-27 Tencent Technology (Shenzhen) Company Limited Method and apparatus for mining test coverage data
CN104714829B (zh) * 2013-12-15 2017-11-28 中国航空工业集团公司第六三一研究所 一种保证目标码和源代码一致性的编译链接方法
US20150261688A1 (en) * 2014-03-14 2015-09-17 International Business Machines Corporation Extended page table for i/o address translation
CN105095069B (zh) * 2015-06-19 2018-06-08 北京京东尚科信息技术有限公司 一种人工智能应答系统测试方法及系统
US10275248B2 (en) 2015-12-07 2019-04-30 International Business Machines Corporation Testing computer software using tracking bits
CN106294129A (zh) * 2016-07-27 2017-01-04 北京小米移动软件有限公司 代码覆盖率测试方法及装置
US10210076B2 (en) 2016-09-26 2019-02-19 International Business Machines Corporation White box testing
CN108959059B (zh) * 2017-05-19 2020-12-25 腾讯科技(深圳)有限公司 一种测试方法以及测试平台
CN108733568A (zh) * 2018-05-25 2018-11-02 平安科技(深圳)有限公司 应用测试方法、装置、设备及可读存储介质
US10691372B1 (en) * 2018-12-07 2020-06-23 Western Digital Technologies, Inc. Transistor threshold voltage maintenance in 3D memory
CN110765017A (zh) * 2019-10-24 2020-02-07 上海创景信息科技有限公司 基于risc-v扩展指令的源码覆盖率测试方法和系统

Family Cites Families (141)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2253423A5 (ja) * 1973-11-30 1975-06-27 Honeywell Bull Soc Ind
US4291371A (en) * 1979-01-02 1981-09-22 Honeywell Information Systems Inc. I/O Request interrupt mechanism
US5103394A (en) * 1984-04-30 1992-04-07 Hewlett-Packard Company Software performance analyzer
US5113507A (en) * 1988-10-20 1992-05-12 Universities Space Research Association Method and apparatus for a sparse distributed memory system
US5212794A (en) * 1990-06-01 1993-05-18 Hewlett-Packard Company Method for optimizing computer code to provide more efficient execution on computers having cache memories
DE69130138T2 (de) * 1990-06-29 1999-05-06 Digital Equipment Corp., Maynard, Mass. Sprungvorhersageeinheit für hochleistungsfähigen Prozessor
US5276833A (en) * 1990-07-02 1994-01-04 Chips And Technologies, Inc. Data cache management system with test mode using index registers and CAS disable and posted write disable
US5193180A (en) * 1991-06-21 1993-03-09 Pure Software Inc. System for modifying relocatable object code files to monitor accesses to dynamically allocated memory
US5644692A (en) * 1991-12-06 1997-07-01 Lucent Technologies Inc. Information display apparatus and methods
US5414827A (en) * 1991-12-19 1995-05-09 Opti, Inc. Automatic cache flush
US5537572A (en) * 1992-03-31 1996-07-16 Vlsi Technology, Inc. Cache controller and method for dumping contents of a cache directory and cache data random access memory (RAM)
US5581778A (en) * 1992-08-05 1996-12-03 David Sarnoff Researach Center Advanced massively parallel computer using a field of the instruction to selectively enable the profiling counter to increase its value in response to the system clock
DE4423559A1 (de) * 1993-11-09 1995-05-11 Hewlett Packard Co Datenverbindungsverfahren und Vorrichtung für Multiprozessor-Computersysteme mit gemeinsamem Speicher
US5652858A (en) * 1994-06-06 1997-07-29 Hitachi, Ltd. Method for prefetching pointer-type data structure and information processing apparatus therefor
EP0689141A3 (en) * 1994-06-20 1997-10-15 At & T Corp Disruption-based hardware support for system performance profiling
US6006033A (en) * 1994-08-15 1999-12-21 International Business Machines Corporation Method and system for reordering the instructions of a computer program to optimize its execution
US5761103A (en) * 1995-03-08 1998-06-02 Texas Instruments Incorporated Left and right justification of single precision mantissa in a double precision rounding unit
US5659679A (en) * 1995-05-30 1997-08-19 Intel Corporation Method and apparatus for providing breakpoints on taken jumps and for providing software profiling in a computer system
US5875294A (en) 1995-06-30 1999-02-23 International Business Machines Corporation Method and system for halting processor execution in response to an enumerated occurrence of a selected combination of internal states
JP3290567B2 (ja) * 1995-08-24 2002-06-10 富士通株式会社 プロファイル計装方法
US5748878A (en) * 1995-09-11 1998-05-05 Applied Microsystems, Inc. Method and apparatus for analyzing software executed in embedded systems
US5752062A (en) * 1995-10-02 1998-05-12 International Business Machines Corporation Method and system for performance monitoring through monitoring an order of processor events during execution in a processing system
US5797019A (en) * 1995-10-02 1998-08-18 International Business Machines Corporation Method and system for performance monitoring time lengths of disabled interrupts in a processing system
US5691920A (en) * 1995-10-02 1997-11-25 International Business Machines Corporation Method and system for performance monitoring of dispatch unit efficiency in a processing system
JP3717212B2 (ja) * 1995-10-27 2005-11-16 株式会社日立製作所 情報処理装置及び情報処理ユニット
US5774724A (en) * 1995-11-20 1998-06-30 International Business Machines Coporation System and method for acquiring high granularity performance data in a computer system
US5758061A (en) * 1995-12-15 1998-05-26 Plum; Thomas S. Computer software testing method and apparatus
US5805879A (en) * 1996-02-23 1998-09-08 Cyrix Corporation In a pipelined processor, setting a segment access indicator during execution stage using exception handling
US5822763A (en) * 1996-04-19 1998-10-13 Ibm Corporation Cache coherence protocol for reducing the effects of false sharing in non-bus-based shared-memory multiprocessors
US5794028A (en) * 1996-10-17 1998-08-11 Advanced Micro Devices, Inc. Shared branch prediction structure
US5937437A (en) * 1996-10-28 1999-08-10 International Business Machines Corporation Method and apparatus for monitoring address translation performance
US5862381A (en) * 1996-11-26 1999-01-19 International Business Machines Corporation Visualization tool for graphically displaying trace data
US5887159A (en) * 1996-12-11 1999-03-23 Digital Equipment Corporation Dynamically determining instruction hint fields
US5870576A (en) * 1996-12-16 1999-02-09 Hewlett-Packard Company Method and apparatus for storing and expanding variable-length program instructions upon detection of a miss condition within an instruction cache containing pointers to compressed instructions for wide instruction word processor architectures
US6189072B1 (en) * 1996-12-17 2001-02-13 International Business Machines Corporation Performance monitoring of cache misses and instructions completed for instruction parallelism analysis
US5938760A (en) * 1996-12-17 1999-08-17 International Business Machines Corporation System and method for performance monitoring of instructions in a re-order buffer
US5822790A (en) * 1997-02-07 1998-10-13 Sun Microsystems, Inc. Voting data prefetch engine
SE520343C2 (sv) * 1997-02-12 2003-07-01 Ericsson Telefon Ab L M Förfarande, system och dator för grenprediktion
US5950009A (en) * 1997-03-10 1999-09-07 International Business Machines Coporation Method and apparatus for profile-based reordering of program portions in a computer program
US5970439A (en) * 1997-03-13 1999-10-19 International Business Machines Corporation Performance monitoring in a data processing system
US5928334A (en) * 1997-03-28 1999-07-27 International Business Machines Corporation Hardware verification tool for multiprocessors
US6026235A (en) * 1997-05-20 2000-02-15 Inprise Corporation System and methods for monitoring functions in natively compiled software programs
US5966537A (en) * 1997-05-28 1999-10-12 Sun Microsystems, Inc. Method and apparatus for dynamically optimizing an executable computer program using input data
US6094709A (en) * 1997-07-01 2000-07-25 International Business Machines Corporation Cache coherence for lazy entry consistency in lockup-free caches
US5987598A (en) * 1997-07-07 1999-11-16 International Business Machines Corporation Method and system for tracking instruction progress within a data processing system
US5926176A (en) * 1997-07-31 1999-07-20 Think & Do Software, Inc. Control program tracking and display system
US5987250A (en) * 1997-08-21 1999-11-16 Hewlett-Packard Company Transparent instrumentation for computer program behavior analysis
JPH1185515A (ja) * 1997-09-10 1999-03-30 Ricoh Co Ltd マイクロプロセッサ
US5940618A (en) * 1997-09-22 1999-08-17 International Business Machines Corporation Code instrumentation system with non intrusive means and cache memory optimization for dynamic monitoring of code segments
US5995754A (en) * 1997-10-06 1999-11-30 Sun Microsystems, Inc. Method and apparatus for dynamically optimizing byte-coded programs
US6101524A (en) * 1997-10-23 2000-08-08 International Business Machines Corporation Deterministic replay of multithreaded applications
US5966538A (en) * 1997-10-31 1999-10-12 Hewlett-Packard Company Method and apparatus for automatically determining which compiler options should be used when compiling a computer program
US5938778A (en) * 1997-11-10 1999-08-17 International Business Machines Corporation System and method for tracing instructions in an information handling system without changing the system source code
US6199154B1 (en) * 1997-11-17 2001-03-06 Advanced Micro Devices, Inc. Selecting cache to fetch in multi-level cache system based on fetch address source and pre-fetching additional data to the cache for future access
US6442585B1 (en) * 1997-11-26 2002-08-27 Compaq Computer Corporation Method for scheduling contexts based on statistics of memory system interactions in a computer system
US6119075A (en) * 1997-11-26 2000-09-12 Digital Equipment Corporation Method for estimating statistics of properties of interactions processed by a processor pipeline
US6070009A (en) * 1997-11-26 2000-05-30 Digital Equipment Corporation Method for estimating execution rates of program execution paths
US6256775B1 (en) * 1997-12-11 2001-07-03 International Business Machines Corporation Facilities for detailed software performance analysis in a multithreaded processor
US6182210B1 (en) 1997-12-16 2001-01-30 Intel Corporation Processor having multiple program counters and trace buffers outside an execution pipeline
US6631514B1 (en) 1998-01-06 2003-10-07 Hewlett-Packard Development, L.P. Emulation system that uses dynamic binary translation and permits the safe speculation of trapping operations
JPH11194957A (ja) * 1998-01-07 1999-07-21 Matsushita Electric Ind Co Ltd デバッグ支援装置、並列実行情報生成装置、及びこれらに適用されるプログラムを記録した記録媒体
US6374364B1 (en) * 1998-01-20 2002-04-16 Honeywell International, Inc. Fault tolerant computing system using instruction counting
US6311327B1 (en) * 1998-03-02 2001-10-30 Applied Microsystems Corp. Method and apparatus for analyzing software in a language-independent manner
US6134676A (en) * 1998-04-30 2000-10-17 International Business Machines Corporation Programmable hardware event monitoring method
US6189141B1 (en) * 1998-05-04 2001-02-13 Hewlett-Packard Company Control path evaluating trace designator with dynamically adjustable thresholds for activation of tracing for high (hot) activity and low (cold) activity of flow control
US6079032A (en) * 1998-05-19 2000-06-20 Lucent Technologies, Inc. Performance analysis of computer systems
US6317820B1 (en) 1998-06-05 2001-11-13 Texas Instruments Incorporated Dual-mode VLIW architecture providing a software-controlled varying mix of instruction-level and task-level parallelism
US6243804B1 (en) * 1998-07-22 2001-06-05 Scenix Semiconductor, Inc. Single cycle transition pipeline processing using shadow registers
US6189142B1 (en) * 1998-09-16 2001-02-13 International Business Machines Corporation Visual program runtime performance analysis
US6324689B1 (en) * 1998-09-30 2001-11-27 Compaq Computer Corporation Mechanism for re-writing an executable having mixed code and data
US6223338B1 (en) * 1998-09-30 2001-04-24 International Business Machines Corporation Method and system for software instruction level tracing in a data processing system
US6192513B1 (en) * 1998-11-02 2001-02-20 Hewlett-Packard Company Mechanism for finding spare registers in binary code
US6351844B1 (en) * 1998-11-05 2002-02-26 Hewlett-Packard Company Method for selecting active code traces for translation in a caching dynamic translator
US6826749B2 (en) * 1998-12-08 2004-11-30 Nazomi Communications, Inc. Java hardware accelerator using thread manager
US6636950B1 (en) * 1998-12-17 2003-10-21 Massachusetts Institute Of Technology Computer architecture for shared memory access
US6230313B1 (en) * 1998-12-23 2001-05-08 Cray Inc. Parallelism performance analysis based on execution trace information
US6378066B1 (en) * 1999-02-04 2002-04-23 Sun Microsystems, Inc. Method, apparatus, and article of manufacture for developing and executing data flow programs, and optimizing user input specifications
US6330662B1 (en) * 1999-02-23 2001-12-11 Sun Microsystems, Inc. Apparatus including a fetch unit to include branch history information to increase performance of multi-cylce pipelined branch prediction structures
US6430741B1 (en) * 1999-02-26 2002-08-06 Hewlett-Packard Company System and method for data coverage analysis of a computer program
US6647301B1 (en) * 1999-04-22 2003-11-11 Dow Global Technologies Inc. Process control system with integrated safety control system
US7086035B1 (en) 1999-05-13 2006-08-01 International Business Machines Corporation Method and system for counting non-speculative events in a speculative processor
US6446029B1 (en) * 1999-06-30 2002-09-03 International Business Machines Corporation Method and system for providing temporal threshold support during performance monitoring of a pipelined processor
US20030040955A1 (en) * 1999-07-02 2003-02-27 The Nasdaq Stock Market, Inc., A Delaware Corporation Market monitoring architecture for detecting alert conditions
US7254806B1 (en) * 1999-08-30 2007-08-07 Ati International Srl Detecting reordered side-effects
US6557167B1 (en) * 1999-09-03 2003-04-29 International Business Machines Corporation Apparatus and method for analyzing performance of a computer program
US6542985B1 (en) * 1999-09-23 2003-04-01 Unisys Corporation Event counter
US6594820B1 (en) * 1999-09-28 2003-07-15 Sun Microsystems, Inc. Method and apparatus for testing a process in a computer system
US6574727B1 (en) 1999-11-04 2003-06-03 International Business Machines Corporation Method and apparatus for instruction sampling for performance monitoring and debug
US6973417B1 (en) 1999-11-05 2005-12-06 Metrowerks Corporation Method and system for simulating execution of a target program in a simulated target system
US6681387B1 (en) * 1999-12-01 2004-01-20 Board Of Trustees Of The University Of Illinois Method and apparatus for instruction execution hot spot detection and monitoring in a data processing unit
US6848029B2 (en) 2000-01-03 2005-01-25 Dirk Coldewey Method and apparatus for prefetching recursive data structures
US6549998B1 (en) * 2000-01-14 2003-04-15 Agere Systems Inc. Address generator for interleaving data
US6772322B1 (en) 2000-01-21 2004-08-03 Intel Corporation Method and apparatus to monitor the performance of a processor
US6721875B1 (en) 2000-02-22 2004-04-13 Hewlett-Packard Development Company, L.P. Method and apparatus for implementing a single-syllable IP-relative branch instruction and a long IP-relative branch instruction in a processor which fetches instructions in bundle form
US6735666B1 (en) * 2000-02-22 2004-05-11 Wind River Systems, Inc. Method of providing direct user task access to operating system data structures
US6865663B2 (en) * 2000-02-24 2005-03-08 Pts Corporation Control processor dynamically loading shadow instruction register associated with memory entry of coprocessor in flexible coupling mode
EP1150213B1 (en) * 2000-04-28 2012-01-25 TELEFONAKTIEBOLAGET LM ERICSSON (publ) Data processing system and method
US6973542B1 (en) 2000-07-18 2005-12-06 International Business Machines Corporation Detecting when to prefetch inodes and then prefetching inodes in parallel
US6782454B1 (en) 2000-09-29 2004-08-24 Sun Microsystems, Inc. System and method for pre-fetching for pointer linked data structures
US20020073406A1 (en) * 2000-12-12 2002-06-13 Darryl Gove Using performance counter profiling to drive compiler optimization
US6480938B2 (en) * 2000-12-15 2002-11-12 Hewlett-Packard Company Efficient I-cache structure to support instructions crossing line boundaries
US6857083B2 (en) * 2000-12-18 2005-02-15 International Business Machines Corporation Method and system for triggering a debugging unit
US7448025B2 (en) * 2000-12-29 2008-11-04 Intel Corporation Qualification of event detection by thread ID and thread privilege level
US7093236B2 (en) * 2001-02-01 2006-08-15 Arm Limited Tracing out-of-order data
US20030066055A1 (en) * 2001-04-26 2003-04-03 Spivey John Michael Profiling computer programs
US7487301B2 (en) * 2001-05-22 2009-02-03 Nxp B.V. Method and system for accelerated access to a memory
US20020199179A1 (en) * 2001-06-21 2002-12-26 Lavery Daniel M. Method and apparatus for compiler-generated triggering of auxiliary codes
US6742179B2 (en) * 2001-07-12 2004-05-25 International Business Machines Corporation Restructuring of executable computer code and large data sets
US6687794B2 (en) 2001-10-18 2004-02-03 International Business Machines Corporation Prefetching mechanism for data caches
US20030131343A1 (en) * 2001-10-19 2003-07-10 French Ronan J. Framework for system monitoring
US7093154B2 (en) * 2001-10-25 2006-08-15 International Business Machines Corporation Critical adapter local error handling
JP4171887B2 (ja) 2002-12-02 2008-10-29 ブリヂストンスポーツ株式会社 マルチピースソリッドゴルフボール
US7290254B2 (en) 2003-03-25 2007-10-30 Intel Corporation Combining compilation and instruction set translation
US6944722B2 (en) * 2003-04-14 2005-09-13 Sun Microsystems, Inc. Method and system for postmortem identification of falsely shared memory objects
US7181723B2 (en) 2003-05-27 2007-02-20 Intel Corporation Methods and apparatus for stride profiling a software application
US7194732B2 (en) 2003-06-26 2007-03-20 Hewlett-Packard Development Company, L.P. System and method for facilitating profiling an application
US20050071516A1 (en) 2003-09-30 2005-03-31 International Business Machines Corporation Method and apparatus to autonomically profile applications
US20050071816A1 (en) 2003-09-30 2005-03-31 International Business Machines Corporation Method and apparatus to autonomically count instruction execution for applications
US7395527B2 (en) 2003-09-30 2008-07-01 International Business Machines Corporation Method and apparatus for counting instruction execution and data accesses
US20050071612A1 (en) 2003-09-30 2005-03-31 International Business Machines Corporation Method and apparatus for generating interrupts upon execution of marked instructions and upon access to marked memory locations
US20050071611A1 (en) 2003-09-30 2005-03-31 International Business Machines Corporation Method and apparatus for counting data accesses and instruction executions that exceed a threshold
US7373637B2 (en) 2003-09-30 2008-05-13 International Business Machines Corporation Method and apparatus for counting instruction and memory location ranges
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
US20050071608A1 (en) 2003-09-30 2005-03-31 International Business Machines Corporation Method and apparatus for selectively counting instructions and data accesses
US20050071609A1 (en) 2003-09-30 2005-03-31 International Business Machines Corporation Method and apparatus to autonomically take an exception on specified instructions
US20050071821A1 (en) 2003-09-30 2005-03-31 International Business Machines Corporation Method and apparatus to autonomically select instructions for selective counting
US20050071610A1 (en) 2003-09-30 2005-03-31 International Business Machines Corporation Method and apparatus for debug support for individual instructions and memory locations
US6925424B2 (en) * 2003-10-16 2005-08-02 International Business Machines Corporation Method, apparatus and computer program product for efficient per thread performance information
US20050091456A1 (en) * 2003-10-23 2005-04-28 Huck Jerome C. Determining an arrangement of data in a memory for cache efficiency
US7162594B2 (en) * 2003-11-19 2007-01-09 Buffalo Inc. Memory module indicator device
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
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
US7114036B2 (en) 2004-01-14 2006-09-26 International Business Machines Corporation Method and apparatus for autonomically moving cache entries to dedicated storage when false cache line sharing is detected
US7197586B2 (en) 2004-01-14 2007-03-27 International Business Machines Corporation Method and system for recording events of an interrupt using pre-interrupt handler and post-interrupt handler
US7987453B2 (en) 2004-03-18 2011-07-26 International Business Machines Corporation Method and apparatus for determining computer program flows autonomically using hardware assisted thread stack tracking and cataloged symbolic data
US20050210450A1 (en) 2004-03-22 2005-09-22 Dimpsey Robert T Method and appartus for hardware assistance for data access coverage
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
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
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
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

Also Published As

Publication number Publication date
US20090100414A1 (en) 2009-04-16
US7480899B2 (en) 2009-01-20
CN100357911C (zh) 2007-12-26
TWI353526B (en) 2011-12-01
CN1677364A (zh) 2005-10-05
JP2005276201A (ja) 2005-10-06
TW200614002A (en) 2006-05-01
US20050210339A1 (en) 2005-09-22
US7926041B2 (en) 2011-04-12

Similar Documents

Publication Publication Date Title
JP4749745B2 (ja) コード・カバレッジ用のハードウェア支援を使用する自律テスト・ケース・フィードバックのための方法および装置
US8171457B2 (en) Autonomic test case feedback using hardware assistance for data coverage
US7299319B2 (en) Method and apparatus for providing hardware assistance for code coverage
US7620777B2 (en) Method and apparatus for prefetching data from a data structure
US7574587B2 (en) Method and apparatus for autonomically initiating measurement of secondary metrics based on hardware counter values for primary metrics
US7114036B2 (en) Method and apparatus for autonomically moving cache entries to dedicated storage when false cache line sharing is detected
US7496908B2 (en) Method and apparatus for optimizing code execution using annotated trace information having performance indicator and counter information
US7526757B2 (en) Method and apparatus for maintaining performance monitoring structures in a page table for use in monitoring performance of a computer program
US7296130B2 (en) Method and apparatus for providing hardware assistance for data access coverage on dynamically allocated data
US7093081B2 (en) Method and apparatus for identifying false cache line sharing
US7373637B2 (en) Method and apparatus for counting instruction and memory location ranges
US7395527B2 (en) Method and apparatus for counting instruction execution and data accesses
US7181599B2 (en) Method and apparatus for autonomic detection of cache “chase tail” conditions and storage of instructions/data in “chase tail” data structure
US20050155022A1 (en) Method and apparatus for counting instruction execution and data accesses to identify hot spots
US8135915B2 (en) Method and apparatus for hardware assistance for prefetching a pointer to a data structure identified by a prefetch indicator
US20050155018A1 (en) Method and apparatus for generating interrupts based on arithmetic combinations of performance counter values
US20050071611A1 (en) Method and apparatus for counting data accesses and instruction executions that exceed a threshold
US20050071816A1 (en) Method and apparatus to autonomically count instruction execution for applications
US20050210450A1 (en) Method and appartus for hardware assistance for data access coverage
US20050071610A1 (en) Method and apparatus for debug support for individual instructions and memory locations
US20050071609A1 (en) Method and apparatus to autonomically take an exception on specified instructions

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080318

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080604

RD12 Notification of acceptance of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7432

Effective date: 20080604

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20080605

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20081202

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20081226

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20090407

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090522

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20090525

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20090722

A912 Re-examination (zenchi) completed and case transferred to appeal board

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20090918

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20110512

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110518

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: 20140527

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees