JP2021521521A - プロセッサをデバッグする方法 - Google Patents

プロセッサをデバッグする方法 Download PDF

Info

Publication number
JP2021521521A
JP2021521521A JP2020555391A JP2020555391A JP2021521521A JP 2021521521 A JP2021521521 A JP 2021521521A JP 2020555391 A JP2020555391 A JP 2020555391A JP 2020555391 A JP2020555391 A JP 2020555391A JP 2021521521 A JP2021521521 A JP 2021521521A
Authority
JP
Japan
Prior art keywords
test
randomized
subtests
processor
file
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.)
Granted
Application number
JP2020555391A
Other languages
English (en)
Other versions
JP7209736B2 (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.)
Advanced Micro Devices Inc
Original Assignee
Advanced Micro Devices Inc
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 Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of JP2021521521A publication Critical patent/JP2021521521A/ja
Application granted granted Critical
Publication of JP7209736B2 publication Critical patent/JP7209736B2/ja
Active 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/22Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
    • G06F11/2205Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested
    • G06F11/2236Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested to test CPU or processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/32Circuit design at the digital level
    • G06F30/33Design verification, e.g. functional simulation or model checking
    • G06F30/3323Design verification, e.g. functional simulation or model checking using formal methods, e.g. equivalence checking or property checking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/22Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
    • G06F11/2252Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using fault dictionaries
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/22Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
    • G06F11/2273Test methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/32Circuit design at the digital level
    • G06F30/33Design verification, e.g. functional simulation or model checking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/32Circuit design at the digital level
    • G06F30/33Design verification, e.g. functional simulation or model checking
    • G06F30/3308Design verification, e.g. functional simulation or model checking using simulation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2115/00Details relating to the type of the circuit
    • G06F2115/10Processors

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Evolutionary Computation (AREA)
  • Geometry (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)
  • Test And Diagnosis Of Digital Computers (AREA)

Abstract

製造されたプロセッサ上でランダムに生成され、ランダムに実行される実行ファイルの実行に基づいて、プロセッサを設計する方法を提供する。極めて特有なテスト生成制約ルールと組み合わせて、プロセッサのテストにおいて複数のレベルでランダム化を実施することによって、マイクロアーキテクチャ機能に高度にフォーカスを合わせたテストが、高度のランダム順列を、その特有の機能にストレスを加えるように同時に適用しながら実施される。これにより、従来のテスト方法では検出できなかったプロセッサのエラー及びバグの検出及び診断が可能になる。エラー及びバグが検出され、診断されると、異常が発生しないようにプロセッサを再設計することができる。プロセッサのエラー及びバグを除去することによって、計算効率及び信頼性が向上したプロセッサを製造することができる。【選択図】図1

Description

(関連出願の相互参照)
本願は、2018年4月10日に出願された米国特許出願第15/950,147号の利点を主張するものであり、当該出願の内容は、参照により本明細書に援用される。
プロセッサのテストは、時間とコストのかかるプロセスである。従来のプロセッサ設計のテストには、プレシリコン検証(pre-silicon verification)及びポストシリコンバリデーション(post-silicon validation)の2種類のテストがある。
プレシリコン検証は、仮想環境でプロセッサのシミュレーションを実行して、設計の異常を検出する。プロセッサが遭遇する可能性のある実際のトラフィックシナリオを再現するために、定期的な間隔でトランザクションのシーケンスを生成するために疑似ランダムテスト生成がよく使用される。これらの疑似ランダムテストは、ISA(命令セットアーキテクチャ)命令セットだけでなく、プロセッサモード、仮想化、特権リング、システムの管理及び例外をランダムにカバーする。しかしながら、プレシリコン検証ツールは、プロセッサコアの特定の内部機能を対象とするのに必要な、はっきりとしたフォーカス(sharp focus)及び強力な順列(intense permutation)を提供しない。代わりに、これらのツールは、内部ノードの大部分がいつ刺激によって動かされたのかを伝えるために、内部カバレッジツールを使用しながら膨大な数のランダムサイクルを使用する。このプロセスは信じられないほど遅いだけではなく、仮想テスト環境の厳密なタイミング動作によって根本的に制限されている。
ポストシリコンバリデーションは、実際のアプリケーション環境で製造したプロセッサチップを動作させて、指定された動作条件で正しい動作を検証する。バリデーションの目的は、製品が性能及び機能に関して目標レベルのカスタマーエクスペリエンスを提供することを保証することである。バグを発見することは、その主要な目標ではない。しかしながら、バリデーションは、実際のアプリケーション環境が反復的で予測可能に動作するという事実によって、バグを発見する能力に制限がある。診断アプリケーション及びランダムエクササイザは、バリデーションプロセスの一部として使用されることがあるが、これらには重大な不利益がある。診断及びエクササイザは、合格/不合格の測定基準としてデータ完全性自己チェックを実行する必要があるため、その有効性に制限がある。これにより、マルチプロセッシング環境でテストがどのように機能できるのかについて、非常に制限的なルールの負担が課される。結果として、これらのデータ一貫性及び共有規則が、設計における機能的なバグを発見するのに重要な順列空間を制限する。
プロセッサの設計にバグ及びエラーがあると、これらがインストールされているコンピュータで望ましくない動作が発生する。例えば、プロセッサのバグは、デッドロック、例外、ストール及びデータ整合性の不具合が発生する場合がある。プロセッサを利用しているコンピュータでデッドロックが発生すると、コンピュータを再起動する必要があり、ユーザの保存されていないデータが全て失われる可能性がある。バグによる例外が発生すると、ユーザのアプリケーションが直ぐに終了したり、オペレーティングシステムがクラッシュしたりする可能性があり、何れもデータの損失やコンピュータのサービスの損失に繋がる可能性がある。同様に、バグによる他の例外やストールが発生すると、障害に対処するために追加のコンピュータリソースが必要になるので、コンピュータの速度が低下する。さらに、データ整合性に不具合が生じると、誤ったデータがユーザのファイル又はデータベースに書き込まれる可能性がある。これにより、コンピュータ上の安全なデータにアクセスするためにデータ整合性の不具合が悪用される場合があるので、コンピュータのセキュリティの脆弱性をもたらす場合がある。
従来技術に見られる制約によって制限されない、製造されたプロセッサに存在するバグを効率的に識別する方法の必要性が存在する。製造されたプロセッサのバグを識別した結果、プロセッサの設計を改善して、識別したバグを生成しなくなり、プロセッサがインストールされているコンピュータの動作を改善することができる。
添付の図面と併せて例として示される以下の説明から、より詳細な理解を得ることができる。図面における同様の符号は、同様の要素を示す。
特定の実施形態による、プロセッサ再設計プロセスのフロー図である。 特定の実施形態による、テストタイプのためのランダムサブテスト生成プロセスのフロー図である。 特定の実施形態による、ランダムランタイム実行プロセスのフロー図である。 特定の実施形態による、テストライブラリと制御データ構造との関係をグラフで表した図である。 特定の実施形態による、例示的なテンプレートファイルの一部を示す図である。 特定の実施形態による、例示的なテンプレートファイルの一部を示す図である。 特定の実施形態による、プロセッサのデバッグを実行するためにプロセッサを利用することができるコンピュータのブロック図である。
デバッグ方法の例示的な実施形態は、複数のテストタイプを有するテンプレートファイルの入力を受信することを含む。次に、複数のテストタイプ毎に、テンプレートファイルに基づくいくつかのランダム化されたサブテストが生成され、コンパイルされて、テストバイナリを形成する。次いで、各テストタイプのテストバイナリがリンクされて、テストライブラリを形成する。テストバイナリのサブセットは、テストライブラリからランダムに選択される。テストバイナリのサブセット内のテストバイナリは、各テストバイナリに関連する制御データ構造に従って、物理スレッドでランダムに実行される。テストバイナリのランダム実行においてバグ及びエラーが検出される。検出されたエラー及びバグに基づいてプロセッサが再設計される。
本開示の実施形態の実施態様は、製造されたプロセッサ上でランダムに生成され、ランダムに実行された実行ファイルを実行することによって、プロセッサのマイクロアーキテクチャのエラーを診断する。極めて特有なテスト生成制約ルールと組み合わせて、プロセッサのテストにおいて複数のレベルでランダム化を実施することによって、開示された実施形態の実施態様は、マイクロアーキテクチャ機能に高度にフォーカスを合わせたテストを実施することができ、同時に、その特有な機能を強調するように高度なランダム順列を適用することができる。これにより、従来のテスト方法では検出することができなかったプロセッサのエラーやバグを検出し、診断することが可能になる。エラー及びバグが検出され、診断されると、異常が生じないようにプロセッサを再設計することができる。プロセッサのエラー及びバグを除去することによって、計算効率及び信頼性が向上したプロセッサを製造することができる。
開示された実施形態によって提供される高度なフォーカスからの別の利点は、実際のプロセッサデバッグ環境において、未だ修正されていないいくつかの非常に広範なバグが存在する場合があるという点である。このような状況では、標準的なバリデーション技術は、既知の既存のバグに繰り返し遭遇するので、追加の新たなバグを見つけることができない。したがって、開示された実施形態の多くの実施態様は、マイクロアーキテクチャ構造に厳密にフォーカスを合わせることによってバイパスする(つまり、既知のバグ状態を刺激しない)ように容易に調整することができ、これにより、さらなる詳細なテストを実行することが可能になる。マイクロアーキテクチャ機能に厳密にフォーカスを当てる機能によって、デバッグプロセス中に進展した学習に基づいてテストを「調整」し、適合させることを可能にする。
開示された実施形態は、アプリケーション及び診断ソフトウェアの動作と比較して、全く異例であるソフトウェア動作を可能にし、促進する。このようにして、開示された実施形態は、従来技術では発見できないバグを抱えている可能性があるプロセッサのマイクロアーキテクチャのコーナーケース領域に容易にストレスを加える。
開示された実施形態は、多段階ランダムテストプロセスを実行することによって従来技術の欠点を克服することができ、その結果、より信頼性が高く、より高い計算効率を有するプロセッサが得られる。
図1は、特定の実施形態による、図2〜図6を参照して説明するプロセッサ再設計プロセス100のフロー図である。所定数Nのテストバイナリ205(図2に示す)を、テストタイプ毎にランダムサブテスト生成プロセス200に従ってランダムに生成する(ステップ110)。多くの実施形態では、数Nは、テストされているマイクロアーキテクチャに適切なコード順列の程度を提供するように構成されている。例えば、テスト実行時間が問題となるプレシリコンエミュレーション環境では、多くの場合、より少ないサブテスト(8〜16の間のNの値)が望ましい。実行時間が問題ではないポストシリコン環境では、数Nは百単位である。そして、所定数のテストバイナリ205を互いにリンクして、図4に示すテストライブラリ405を形成する(ステップ120)。
次に、プロセッサ602(図6に示す)のデータ空間は、ランタイム監視プログラム(runtime executive)によってランダム化される(ステップ130)。ランタイム監視プログラムは、テストライブラリ405からM個のテストバイナリ205をランダムに選択する(ステップ140)。Mの値は、所定のテストタイプに指定され、ランタイム監視プログラムによって実装される「ピック(pick)」順列制御によって決定される。ピック制御は、置換を伴うサンプル、置換を伴わないサンプル、スレッド数未満のサブテストのサブセットのサンプリング、又は、全てのスレッド上で行う単一のサブテストのサンプリング等のアルゴリズムを含む。選択されるピッキングのタイプは、テストの目的と、テストするマイクロアーキテクチャと、に依存する。例えば、クロス修正コード(cross modifying code)(CMC)テストは、全てのコア及びスレッドで行う同じサブテストをピックすることを望むであろう。そして、M個のテストバイナリ205の各々が、ピックアルゴリズムに従ってMX個の物理スレッドに割り当てられる(ステップ150)。テストバイナリ205の各々は、図3に示すランダムランタイム実行プロセス300に従って、各々の物理スレッド上で実行される(ステップ160)。次に、MX個の物理スレッドが実行され、エラー(例えば、例外、ストール、データ整合性の不具合)が1つ以上のスレッドで検出されるまで、ランタイム監視プログラムによって監視される(ステップ170)。検出されたエラーに基づいて、プロセッサ602は、検出されたエラーを生成しないように再設計される(ステップ180)。
プロセッサ再設計プロセス100は、追加のエラーを除去するために反復して繰り返されることが多い。多くの実施形態では、再設計プロセス(ステップ180)は、実験室での調査と、シミュレーション調査と、の組み合わせを含む。調査は、バグの行動特性を特徴付け、要因のセットサイズを演繹的に低減するために行われる。これは、バグの性質及び範囲を制限し、潜在的に問題のある設計コンポーネントを絞り込むのに役立つ。次に、これらの調査の結果を利用して、後続の反復で使用されるテストバイナリ205を生成するのに利用されるテンプレートファイル500(図5A及び図5Bに示す)を生成する。次いで、これらの調査の結果を利用して、プロセッサ再設計プロセス100を通して後続の反復の調査から得られる技術的学習を組み込む新たなテストバイナリ用のテンプレートファイル500を生成する。
実験室調査では、様々なオンチップデバッグツール(例えば、IEEE 1500及びP1687規格を実装するツール等)が使用されている。具体的なツールの例は、参照により本明細書に援用されている、StollonによるInstrumentation Design and Debug for Systems on Chip(Stollon、Neal. On-Chip Instrumentation Design and Debug for Systems on Chip. Springer US, 2011)に教示されている。スキャンツールを使用してデッドロックを分析し、不具合の時点で殆どの内部フロップの状態をダンプすることができる。例外及びライブロックは、(JTAG:Joint Test Action Group)バス等を介して外部から制御されるマイクロコード化されたモニタツールを使用して検出することができる。このようなツールを用いて、メモリ及び内部プロセッサ構造(例えば、L1/L2キャッシュ、分岐予測器及びパイプライントランスレーションルックアサイドバッファ(TLB))をプローブし、レジスタの内容を見ることができる。不具合ポイントのかなり上流で発生すると判断されたバグは、多くの場合、内部信号トレースキャプチャツールを使用して分析される。
バグの根本的な原因の仮説を、シミュレーションでテストする。次に、シミュレーションテストの結果に基づいて、バグを排除するために、プロセッサの新たなゲートモデルが開発される。
バグが完全に除去されると、プロセッサの新たなゲートモデルが製造され、プロセッサ602の新たな修正されたリビジョンのためのシリコンの新たな「スピン(spin)」が生成される。プロセッサ602の新たな修正されたリビジョンは、プロセッサ再設計プロセス100を使用してテストされる。その結果、プロセッサ再設計プロセス100は、現場(生産)に入る前に、発見が困難なバグを識別することができ、バグの識別と根本的原因との間のコストのかかるデバッグ時間を短縮することができる。
図2は、特定の実施形態による、特定のテストタイプのためのランダムサブテスト生成プロセス200の一実施形態を示す図である。特定のテストタイプのテンプレートファイル500が受信される(ステップ210)。いくつかの実施形態では、ランダム化のための任意のシードも受信される。テンプレートファイル500が解析され、テンプレートで指定されたルールに従って単一のアセンブリ言語ソースファイルが生成される(ステップ220)。ステップ220は、生成されるi個のサブテストの各々について繰り返される。
例えば、テンプレートファイル505において、test_bodyは「rand 100 100 1」として定義される。これにより、パーサは、(重み付け係数に従って)test_bodyブロックから正確に100個の命令をランダムに取り込む。さらに、パーサは、マクロのような操作(つまり、ADD_REG_MEMmの後に「link_reg16」、「base」、「disp」、「lock」等の名前のリストが続く)に遭遇すると、それを使用してインスタンス化されたオブジェクトを検索し、そのオブジェクトの制約及びルールによって定義された値をランダムに選択する。これらは、整数(イミディエートクラス)又は文字列(トークンクラス)とすることができる。これは、X86命令の構築方法である。命令マクロのタイプがオペレーション(OPS)ブロック510から選択され、これに関連するキー名を使用して、ソースレジスタ名及び宛先レジスタ名、即値(整数定数)、ロックプレフィックス、並びに、ラベルを生成又はラベルが命令に自動的に割り当てられるのを禁止するのに使用される特別な制御等のマクロのパラメータが選択される。例では、X86命令が示されているが、同じ技術を、他のプロセッサアーキテクチャ(例えば、X64、ARM又はARM64)に一般化することもできる。
例えば、プロセッサ再設計プロセス100をARMアーキテクチャに適合させるには、テンプレートファイル500を新たなアーキテクチャの命令セットに適合させる必要がある。この結果、新たなプロセッサのマイクロアーキテクチャのユニークな機能をターゲットとする所定のテストバイナリ205が得られる。結果として、プロセッサ再設計プロセス100は、X86環境における場合と同様に動作し、デバッグツールと同じ値を提供する。
次に、コンパイラは、テンプレートファイル500に指定されたルールに従って動作するi個のアセンブリ言語ソースファイルの各々を受信する(ステップ230)。次いで、コンパイラは、i個のアセンブリソースファイルをグループ化して所定のテストバイナリ205を形成する。所定のテストバイナリ205は、個別に実行されるi個のサブテストを含む。
ランダムサブテスト生成プロセス200は、N個のテストタイプの各々について繰り返される。したがって、各テンプレートで指定されたルールに従って、N個の所定のテストバイナリ205がランダム化され、生成される。例えば、特定の実施形態では、N個の所定のテストバイナリ205の各々が、特定のマイクロアーキテクチャ機能をテストするために生成される。その結果、N個の所定のテストバイナリがランタイムに実行されると、マイクロアーキテクチャの特定の機能の欠陥を検出することができる。
例えば、特定の実施形態では、N個の所定のテストバイナリ205の各々が、プロセッサのパイプラインの長さに亘ってマイクロアーキテクチャの特定の機能を個別にターゲットとする。多くの場合、N個の所定のテストバイナリ205は、プロセッサ602の分岐予測器、命令フェッチユニット、デコーダ、opキャッシュ、スケジューラ、実行ユニット、ロード/ストアユニット及びL1キャッシュ内の要素をカバーするテストも含む。
多くの実施形態では、N個の所定のテストバイナリ205のうち1つ以上は、共通のオペレーティングシステム相互排他的構造を使用する多くのスレッド間のメモリリソース共有、ランダムに及び従来のプロデューサ/コンシューマモデルの両方で実装された多数のスレッドに亘る監視/mwaitシナリオ、マイクロopキューループバッファリング(micro op queue loop buffering)、非一時的なロード/ストアのフェンシング(fencing)、コード再解釈とコードシフトの両方による分岐予測器エイリアシング、コード/データ仮想エイリアシング、opキャッシュフェッチモーディング、予測を阻止するためのディープ実行(deep execution)スケジューラ(ExSc)依存チェーン、予測を促す低ExSc依存状態(low ExSc dependency conditions)、スペックロックマップ状態(spec-lock-map conditions)及びスペックロックマップ中断(spec-lock-map aborts)、大量の分岐予測(heavy branch prediction)及び大量の予測ミス(heavy mis-prediction)、ストアからロードへのインターロック(store-to-load interlocks)及びストアからロードへの転送状態(store-to-load forwarding conditions)、整列/不整列クロッサによるDサイドテーブルウォークストーム(D-side table walk storms with aligned/misahgned crossers)、キャッシュ及びバスのロック、多くのスレッドで共有されている少ないキャッシュラインがロックや容量のエビクションと競合している激しい競合、及び、他の類似した状態を含む、いくつかの機能をテストする。
図3は、特定の実施形態による、M個の物理スレッドの各々によって実行されるランダムランタイム実行プロセス300の実施形態のフロー図である。ランダムランタイム実行プロセス300が動作する方法は、N個のテストタイプの各々に存在する制御データ構造410によって定義される。制御データ構造410は、N個の所定のテストバイナリ205の各々について生成される。
以下のコードスニペットは、制御データ構造410の例を示す。
control data structure declaration
struct test_list{
int array_size;
int timeout;
int data_parms;
int test_sampling;
int data_malloc_size;
void(*meminit)(unsigned int*,int);
funcptr*test_arr;
funcptr*test_end_arr;
int code_parms;
int exec_flags;
};

//Example of the structure definition for test type 20.(semaphore ping−pong test)
{NUM_TYPE20_TESTS,
40,
SHARED+RESTORE+DATA_ALIAS,
SAMPL_FEW,
0x20000,
&meminitRand96k,
predetermined_test_type20,
predetermined_test_type20_end,
ALT+ALIAS+RELOAD+SHIFT,
MUTE},
制御データ構造410は、所定のテストバイナリ205の各々の中から個々のサブテストを選択する方法を指定する(ステップ310)。例えば、特定の実施形態では、制御データ構造410は、サブテストのプールからサブテストをピッキングするための置換ポリシーを有するサンプルを指定する。代わりに、他の実施形態では、制御データ構造410は、サブテストをピッキングするための置換ポリシーを持たないサンプルを指定する。他の代替例では、制御データ構造410は、個々のサブテストが、任意に選択されたサブテストの小さな一時的なプールを生成することによって選択され、次いでこのプールからランダムにピックしてサブテストをスレッドに割り当てることを指定する。この結果、複数の物理スレッドに亘ってサブテストが複製される。また、いくつかの実施形態での制御データ構造410は、全ての論理スレッド及び物理スレッドに同じサブテストを投入することを指定する。
多くの実施形態では、制御データ構造410は、テストバイナリが実行されるときに利用されるアドレス空間も定義する(ステップ320)。例えば、特定の実施形態では、制御データ構造410は、デフォルトデータ空間の仮想エイリアスである代替データアドレス空間を指定する。代わりに、他の実施形態では、制御データ構造410は、テストバイナリのサブテストの仮想エイリアスである代替サブテストアドレスを指定する。
多くの実施形態では、制御データ構造410は、テストバイナリについてページングがどのように処理されるかを定義する(ステップ330)。例えば、特定の実施形態では、制御データ構造410は、デフォルトページングモード(例えば、4kB、2MB、1GBなど)が、このテストバイナリにおけるサブテストの実行を通して使用されることを要求する。さらに、多くの実施形態では、制御データ構造410は、代替のページングモードがサブテスト反復間でランダムに切り替えられることも指定する。
次に、選択されたサブテストが実行される(ステップ340)。いくつかの実施形態では、全てのサブテストは、同時に実行を開始するように同期される。これにより、テストが相互作用する最大の機会が与えられる。例えば、特定の実施形態では、サブテストは、異なる時間に完了するが、新たな反復毎にサブテストが同時に起動又は再起動される。特定の実施形態では、制御データ構造410は、CODE WRITABLE値を含む。CODE WRITABLE値は、自己書き換えコード(SMC:Self Modifying Code)テスト/クロス書き換えコード(CMC:Cross Modifying Code)テストのために、オペレーティングシステム(OS)からの書き込み可能コード許可を設定する。また、自己書き換えテスト後にテストを元の状態に復元するために、RELOADコマンドを用いてサブテストコードを再ロードすることもできる。さらに、多くの実施形態での制御データ構造410は、SHARED MEM値を含む。SHARED MEM値は、単一のデータ空間が所定のテストタイプの全てのサブテストによって共有されることを指定する。いくつかの場合、制御データ構造410は、巡回冗長検査(CRC)フラグも含む。CRCフラグは、データ画像のCRCが各サブテストの反復後に実行されることを指定する。
また、多くの場合、制御データ構造410は、各サブテスト実行中にデータ空間がどのように構成されるかを定義する(ステップ350)。例えば、特定の実施形態では、データ制御ファイルは、RESTORE DATAをいう値を含む。この値は、サブテストの各反復間にデータ空間を元の内容に復元するようにスレッド管理関数に指示する。RESTORE DATAの値は、各反復後に確定的なデータ画像が予想される状況で使用される。代わりに、他の実施形態では、制御データ構造410は、サブテスト反復間で共有データ空間のランダム化を引き起こす値RE−RAND DATAを含む。この値は、算術論理ユニット(ALU)の動作、アドレスシーケンス、及び、プロセッサ602内のコードフローパスを連続的に変化させるために利用される。
また、多くの場合、制御データ構造410は、後続の反復のために物理サブテストコードがどのように格納され、実行されるかを確立する(ステップ360)。例えば、多くの実施形態では、制御データ構造410は、値SHIFT PHYS CODEを含む。SHIFT PHYS CODE値は、サブテスト反復間で可変(小さい)数のバイトだけ物理サブテストコードをシフトする。SHIFT PHYS CODEは、分岐予測器のテストによく使用される。また、DATA_ALIAS及びCODE_ALIAS等の制御データ構造には、各反復間にサブテストがコード及び/又はデータにアクセスする仮想アドレスをランダムに切り替えるように動作するスイッチも存在する。コード及びデータは、一定の物理空間を占有するので、これらのアドレスは、監視プログラムによって選ばれ、割り当てられる仮想エイリアスである。仮想アドレス空間の動的シフトは、仮想アドレス(つまり、キャッシュ、トランスレーションルックアサイドバッファ(TLB)、分岐ターゲットバッファ(BTB)等)によってインデックス/タグ付けされるマイクロアーキテクチャ構造にストレスを加える。
多くの場合、制御データ構造410にはタイムアウトも含まれる。TIMEOUT値は、所定のテストタイプのランタイムの秒数を設定する。例えば、サブテストの新たなセットは、10秒毎にピックされる。したがって、タイムアウトが満了していない場合(ステップ370)、プロセス300が繰り返される。タイムアウトが満了すると、スレッドでエラーが検出される(ステップ380)。
図4は、特定の実施形態による、テストライブラリ405を形成するようにリンクされた個々のテストバイナリ205と、個々の制御データ構造410と、の関係をグラフで表した図である。具体的には、図4は、所定のテストバイナリ205の各々が、関連する制御データ構造410を有することを示している。
図5A及び図5Bは、特定の実施形態による、テンプレート500用の例示的なテンプレート505の一部を示す図である。テンプレートファイル500は、特定のテストタイプの構造及び確率的ルールを記述する。具体的には、テンプレートファイル500は、マクロの使用及びその頻度に関する命令をさらに含む。また、多くの場合、テンプレート500は、演算の動作(制限、ストライド、高頻度ターゲット及び低頻度ターゲット)に対処するためのルールも含む。特定の実施形態では、テンプレート500は、レジスタの使用を指定又は制限する。さらに、多くの実施形態のテンプレートファイル500は、分岐動作(予測、分岐/分岐せず、前進/後退、ターゲット距離)及びループ構造(サイズ及び反復範囲)のためのルールも指定する。さらに、テンプレートファイル500は、巡回符号ブロック、並びに、パブリック及びプライベート命令リンクの生成も可能にする。また、多くの場合、テンプレートファイル500は、スレッド間通信のルールも指定する。
例えば、特定の実施形態では、テンプレートファイル500は、若いopが古いopよりも前に推測的に発行され実行されることがないように全て順序に依存するロード及びロードopストアとして、様々な算術論理ユニット(ALU)演算を利用するように設計される。これにより、スケジューラキューは、非常に迅速にバックアップされ、ディスパッチストールが強制される。高い推測の程度と低い推測の程度の両方とも、実行ユニットのスケジューラにとってのマイクロアーキテクチャ境界条件である。したがって、これらは、フォーカス及びストレスを必要とする「危険信号」シナリオである。このタイプのテストは、マイクロプロセッサ602の設計検証エンジニアが直面する問題の非常に現実的な例を提供する。
テンプレートファイル500は、3つのタイプのブロックを含む。これらのブロック関数の各々は、C++又はRuby等の任意のオブジェクト指向言語で使用される「クラス」構造に類似している。「クラス」構造と同様に、ブロックはそれぞれ独自のメソッド及びインスタンス変数を有し、開始/終了ブロックによってインスタンス化される。他のオブジェクトプログラミング言語と同様に、オブジェクトには名前が付けられる。これらの名前は、ウェイトファイル内のインスタンス化された全てのオブジェクトのハッシュテーブルへのキーとして機能する。具体的には、ウェイトファイルは、op、イミディエート及びトークンを含む。
OPSブロック510は、命令のブロックを指定する。OPSブロック510内の各エントリは、通常、命令マクロの名前及び入力パラメータである。第1のパラメータ(整数)は、その特定のopの相対的な重み付け係数である。これは、opがそのブロックのリストからランダムに選択されている場合にのみ重要である。ランダム化は、以下のキーワードが「rand」の場合に発生する。「rand」の後に、ブロックからピックされるopの合計数を定義する3つの数値パラメータが続く。名前に続くキーワードが「sequential」である場合、重み付けパラメータが無視され、そのブロック内の各opが選択され、表示される順序でテストファイルに配置されることを意味する。これにより、テンプレートファイル500は、インラインコードスニペット又はサブルーチンを含むことができる。
OPSブロック510では、第2のパラメータ(例えば、ADD_REG_MEMm)は、命令マクロの名前であり、そのラインの全ての後続の要素は、そのマクロに対する入力パラメータである。マクロパラメータの各パラメータは、(先頭に$符号が付く)リテラル、又は、オブジェクトのハッシュテーブルへのキー、言い換えると、ウェイトファイルの他のブロックの名前である。例えば、図5Aに示すように、相対的な重み付け係数(1、2、3等)の後に命令マクロ(例えば、ADD_REG_MEMm)の名前が続き、その後に名前(「link_reg16」、「base」、「disp」、「lock」等)のリストが続く。さらに、これらの各々は、ウェイトファイル内に独自のブロックを有する。全てのマクロは、テキストヘッダファイルで定義される。このヘッダファイルは、パーサによって読み込まれ、その内容は、パーサが生成するサブテスト毎にソースコードの先頭にプリペンド(pre-pended)される。ソースファイル内のこれらのマクロ定義によって、コンパイラ/アセンブラは、各マクロインスタンスを1つ以上のアセンブリ言語命令に展開できる。プロセス全体で1つの予約されたキー名しかなく、それは、テスト実行が始まるOPSブロック510を示すために使用される「main」である。
また、OPSブロックは、SECTIONと呼ばれるopクラス内の特別な「命令」もサポートする。この特別なop SECTIONは、別のOPSブロック510への再帰呼び出しであるかのように使用される。例えば、「main」が連続して実行され、SECTIONコマンドが検出されると、test_bodyのopの処理を始めるようにパーサに指示する。この場合、これらのopが連続してピックされない。SECTIONは、SECTIONSがSECTIONS内のSECTIONS内に存在できるという意味で再帰的である。これにより、様々なopの組み合わせをテスト内に埋め込み、ユニークなセクションを相互にネストすることができる。この特定の再帰構造は、マイクロopキューループバッファのテストに適している。
また、テンプレートファイル500は、トークンブロック520も含む。トークンは、関連する相対的な重み付け係数を有する英数字文字列である。トークンブロック520は、レジスタのグループ、オペランドサイズの上書き、及び、他のプレフィックスを定義する。例えば、インデックスレジスタの選択を不均一にバイアスすることは、特定のアドレス領域にロード/ストアアクティビティをフォーカスさせるために使用できる。異なるタイプの命令によって使用されるソースレジスタ及び宛先レジスタのセットを制御することは、これらの相互依存性を強める又は弱めることができる。
例えば、図5A及び図5Bは、依存性テスト用のテンプレートファイル505を示している。この例では、インデックスレジスタ及び宛先レジスタは、16又は64ビットサイズのRAXに制限されている。さらに、ソースと宛先の両方としてRAXを暗示的に使用する演算CMPXCHGが利用される。したがって、あらゆるopの宛先は、シリアライズする依存性チェーンを生成する次の若いopのソースオペランドでもある。
また、多くの実施形態では、トークンブロック520はロックトークン530も含む。このロックトークン530は、ロードopストア演算にアトミック(ロック)動作を強制するために使用されるX86 LOCKプレフィックスの重み付け係数を指定する。ロックは、マシンの任意の他のトランザクションが、読み出し/修正/書き込みプロセス中にその特定のメモリ位置(キャッシュライン)にアクセスするのを妨げる。ロックされた演算は、マシンの困難なコヒーレンシ機能にストレスを加えるため、テストするために重要である。例えば、図5Bは、LOCKプレフィックスが付加された9個のロードopストアを示している。
また、テンプレートファイル500はイミディエートブロック540も含む。イミディエートブロック540は、イミディエートブロック内のライン毎に使用される以下の構文を介してランダムに生成される整数である。構文は、重み、開始、終了、ステップサイズ、and_mask、及び、or_maskの値を含む。重み値は、ブロック内の他の重み付けされた要素に対する、イミディエートブロック内のこの特定の式の相対的な重みを設定する。例えば、ブロックに3つの要素があり、第1の要素が1の重みを有する場合、第2の要素は3の重みを有し、第3の要素は4の重みを有する。つまり、これらがピックされる確率は以下のとおりである。つまり、第1の要素は1/8の確率を有し、第2の要素は3/8の確率を有し、最後の要素は4/8の確率を有する。
開始値は、値をランダムにピックする範囲の開始する(数値的に最小の)整数値を設定する。終了値は、範囲の終了する(数値的に最大の)整数値を設定する。ステップサイズ値は、ランダムピックを行うストライドのサイズを設定する。例えば、あるアドレス指定方式で変位フィールドに使用する、0−>0xFFFの範囲の64バイトのキャッシュライン整列値をランダムにピックするには、0の開始値、0x1000の終了値、0x40のステップサイズが使用される。このイミディエートオブジェクトに対してrand()メソッドを呼び出すと、集合{0、0x40、0x80、0xc0...0xFC0}の内のランダム整数が返される。
and_mask値は、開始、終了及びステップサイズを使用して計算された数に対して適用されるビットマスク(ビット単位のAND)である。例えば、特定の実施形態では、and_Maskは、アドレスビット48:12のランダム変動が、そのインデックスで8つすべての方向(ways)を迅速に満たしてエビクションを強制するように、単一の特定の線形インデックス(アドレスビット11:6)へのアドレス指定を制限することによって、L1データキャッシュ容量のエビクションを強制するために使用される。さらに、キャッシュライン内での整列の他の保証無しに、L1データキャッシュ(DC)の線形インデックス0を常にターゲットとする32ビットアドレスを生成するために、0xFFFFF03Fのand_maskが利用される。さらに、線形インデックス0をターゲットとし、DWORD(4バイト)整列も強制するために、0xFFFFF03Cのマスクが利用される。
or_mask値は、開始、終了、ステップサイズ及びand_maskを使用して計算された数に対して適用されるビットマスク(ビット単位のOR)である。例えば、クワッドワード(8バイト)アクセスのために4kbのページが不整列であるアドレスを常に生成する乱数を生成するために、0xFF9のor_maskが利用される。
特定の実施形態では、ランダムランタイム実行プロセス300は、ファームウェアベースであり、オペレーティングシステム、ビデオ、キーボード又はハードドライブを必要としない。これらの実施形態では、ランダムランタイム実行プロセス300は、リセット直後に自動的に呼び出され、BIOS ROMから人間の介入なしに実行されるメインメモリにロードされる。例えば、メモリ、スレッド、ページング管理及び例外処理等のように以前にOSにより提供されていたサービスは、修正又は再コンパイル無しにテストすることができ、ランタイム監視プログラムルーチンが利用できない場合がある。これらの実施形態では、ランタイム監視プログラムは、メモリ、スレッド、ページ管理及び例外処理に独自のサービスを提供する必要があるかもしれないが、サブテストバイナリ自体は修正を必要としない。これらの実施形態は、コンピュータがオペレーティングシステムを起動するのを妨げるほど深刻なバグを有するプロセッサをデバッグできるようにする。結果として、プロセッサ602をデバッグするために必要とされるのは、実行ファイルを保持するためのROMと、実行ファイルをロードして実行することができるメモリだけである。また、これらの実施形態は、GPUのデバッグにも適している。
図6は、プロセッサ602がプロセッサ再設計プロセス100を使用して再設計される例示的なデバイス600のブロック図である。デバイス600は、例えばサーバ、コンピュータ、ゲーム機、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話又はタブレットコンピュータを含む。デバイス600は、プロセッサ602と、メモリ604と、ストレージ606と、1つ以上の入力装置608と、1つ以上の出力装置610と、を含む。また、デバイス600は、オプションで入力ドライバ612及び出力ドライバ614も含む。デバイス600が、図6に示されていない追加の構成要素を含むことを理解されたい。
プロセッサ602は、中央演算処理装置(CPU)、グラフィックス処理ユニット(GPU)、同じダイ上に配置されたCPU及びGPU、又は、1つ以上のプロセッサコア602を含むことができ、各プロセッサコア602は、CPU又はGPUであってよい。メモリ604は、計算ノード又はプロセッサ602と同じダイ上に配置されてもよいし、計算ノード又はプロセッサ602とは別に配置されてもよい。一実施形態では、メモリ604は、例えば、ランダムアクセスメモリ(RAM)、ダイナミックRAM若しくはキャッシュ等の揮発性又は不揮発性メモリを含む。
ストレージ606は、例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク若しくはフラッシュドライブ等の固定記憶装置又はリムーバブル記憶装置を含む。入力装置608は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイク、加速度計、ジャイロスコープ、生体認証スキャナ又はネットワーク接続(例えば、無線IEEE802信号の送信及び/若しくは受信のための無線ローカルエリアネットワークカード)を含む。出力装置610は、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、1つ以上のライト、アンテナ又はネットワーク接続(例えば、無線IEEE802信号の送信及び/若しくは受信のための無線ローカルエリアネットワークカード)を含む。
入力ドライバ612は、計算ノード又はプロセッサ602及び入力装置608と通信し、計算ノード又はプロセッサ602が入力装置608から入力を受信するのを可能にする。出力ドライバ614は、計算ノード又はプロセッサ602及び出力装置610と通信し、プロセッサ602が出力装置610に出力を送信するのを可能にする。入力ドライバ612及び出力ドライバ614がオプションの構成要素であり、入力ドライバ612及び出力ドライバ614が存在しない場合にはデバイス600が同様に動作することに留意されたい。
本明細書の開示に基づいて多くの変形が可能であることを理解されたい。機能及び要素は、特定の組み合わせで上述されているが、各機能又は要素は、他の機能及び要素無しに単独で使用されてもよいし、他の機能及び要素を伴う又は伴わない様々な組み合わせで使用されてもよい。
提供される方法は、汎用コンピュータ、プロセッサ602又はプロセッサコアにおいて実施されてもよい。プロセッサ602の例は、汎用プロセッサ、専用プロセッサ、従来のプロセッサ、デジタル信号プロセッサ(DSP)、複数のマイクロプロセッサ、DSPコアに関連する1つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)回路、任意の他のタイプの集積回路(IC)、及び/又は、ステートマシンを含む。このようなプロセッサは、処理されるハードウェア記述言語(HDL)命令及びネットリストを含む他の中間データ(コンピュータ可読媒体上に記憶可能な命令)の結果を用いて製造プロセスを構成することによって製造されてもよい。このような処理の結果は、実施形態の態様を実施するプロセッサを製造する半導体製造プロセスにおいて用いられるマスクワークであってもよい。
本明細書で提供される方法又はフローチャートは、汎用コンピュータ又はプロセッサ602による実行のために非一時的なコンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェア又はファームウェアにおいて実施されてもよい。非一時的なコンピュータ可読記憶媒体の例としては、読み出し専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及びリムーバブルディスク等の磁気媒体、光磁気媒体、CD−ROMディスク及びデジタル多用途ディスク(DVD)等の光学媒体が挙げられる。

Claims (20)

  1. プロセッサをデバッグする方法であって、
    複数のテストタイプ毎にテンプレートファイルの入力を受信することと、
    前記複数のテストタイプからの特定のテストタイプ毎に、
    前記特定のテストタイプの各々のテンプレートファイルに従って、第1の所定数のランダム化されたサブテストを生成することと、
    前記第1の所定数のランダム化されたサブテストを前記特定のテストタイプのテストバイナリにコンパイルすることと、
    複数のテストタイプの各々の前記テストバイナリをリンクして、テストライブラリを形成することと、
    前記テストライブラリからテストバイナリのサブセットをランダムに選択することと、
    各テストバイナリの制御データ構造に従って、前記プロセッサのいくつかの物理スレッド上でテストバイナリの選択されたサブセットの各々を実行することであって、テストバイナリのサブセットの各テストバイナリから特定のランダム化されたサブテストをランダムに選択することと、選択された特定のランダム化されたサブテストの各々を実行することと、を含む、ことと、
    実行中に1つ以上のエラーを検出することと、
    検出された1つ以上のエラーに基づいて前記プロセッサを再設計することと、を含む、
    方法。
  2. 前記特定のランダム化されたサブテストをランダムに選択することは、置換ポリシーを有するサンプルを使用して実行される、
    請求項1の方法。
  3. 前記特定のランダム化されたサブテストをランダムに選択することは、置換ポリシーを有していないサンプルを使用して実行される、
    請求項1の方法。
  4. 前記特定のランダム化されたサブテストをランダムに選択することは、任意に選択されたサブテストの一時的なプールを生成し、前記一時的なプールからランダムにピッキングすることによって実行される、
    請求項1の方法。
  5. 前記制御データ構造は、前記選択された特定のランダム化されたサブテストを実行するためのページングモードをさらに指定し、
    前記実行することは、前記ページングモードに従って実行される、
    請求項1の方法。
  6. 前記ページングモードは、各テストバイナリ全体で使用されるデフォルトのページングモードである、
    請求項5の方法。
  7. 前記ページングモードは、前記特定のランダム化されたサブテストの各々が実行された後にランダムに切り替えられる、
    請求項5の方法。
  8. 前記実行することは、前記特定のランダム化されたサブテストの各々が行われた後に、前記特定のランダム化されたサブテストの物理コードを可変数のバイトだけランダムにシフトすることをさらに含む、
    請求項1の方法。
  9. 前記制御データ構造は、前記実行することのタイムアウトを指定し、
    前記方法は、
    前記タイムアウトが満了した後に、前記テストライブラリからテストバイナリの新たなサブセットをランダムに選択することをさらに含む、
    請求項1の方法。
  10. 前記特定のテストタイプの各々のテンプレートファイルは、前記テンプレート内の演算の相対頻度を指定する重み付けファイルを含み、
    前記第1の所定数のランダム化されたサブテストは、前記相対頻度に基づいて生成される、
    請求項1の方法。
  11. 前記特定のテストタイプの各々のテンプレートファイルは、前記テンプレート内のループのサイズ及び反復範囲を指定する重み付けファイルを含み、
    前記第1の所定数のランダム化されたサブテストは、前記ループのサイズ及び反復範囲に基づいて生成される、
    請求項1の方法。
  12. 前記特定のテストタイプの各々のテンプレートファイルは、前記テンプレート内の巡回符号ブロックを指定する重み付けファイルを含み、
    前記第1の所定数のランダム化されたサブテストは、前記巡回符号ブロックに基づいて生成される、
    請求項1の方法。
  13. 前記特定のテストタイプの各々のテンプレートファイルは、前記テンプレート内のレジスタ使用を指定する重み付けファイルを含み、
    前記第1の所定数のランダム化されたサブテストは、前記レジスタ使用に基づいて生成される、
    請求項1の方法。
  14. 前記特定のテストタイプの各々のテンプレートファイルは、前記テンプレート内の分岐予測動作を指定する重み付けファイルを含み、
    前記第1の所定数のランダム化されたサブテストは、前記分岐予測動作に基づいて生成される、
    請求項1の方法。
  15. 前記プロセッサのデータ空間は、前記実行する前にランダム化される、
    請求項1の方法。
  16. 前記制御データ構造は、選択された特定のランダム化されたサブテストの各々を実行するために、前記データ空間のデータアドレス空間をさらに指定し、
    選択された特定のランダム化されたサブテストの各々を実行することは、前記データアドレス空間内で実行される、
    請求項15の方法。
  17. 前記データアドレス空間は、前記データ空間の仮想エイリアスである、
    請求項16の方法。
  18. 前記実行することは、前記特定のランダム化されたサブテストの各々が実行された後に、前記データ空間を元の内容に復元することをさらに含む、
    請求項15の方法。
  19. 前記実行することは、前記特定のランダム化されたサブテストの各々が実行された後に、前記データ空間を再ランダム化することをさらに含む、
    請求項15の方法。
  20. 前記実行中に1つ以上のエラーを検出することは、前記データ空間において巡回冗長検査を実行することを含む、
    請求項15の方法。
JP2020555391A 2018-04-10 2019-02-19 プロセッサをデバッグする方法 Active JP7209736B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/950,147 US10534881B2 (en) 2018-04-10 2018-04-10 Method of debugging a processor
US15/950,147 2018-04-10
PCT/US2019/018490 WO2019199378A1 (en) 2018-04-10 2019-02-19 Method of debugging a processor

Publications (2)

Publication Number Publication Date
JP2021521521A true JP2021521521A (ja) 2021-08-26
JP7209736B2 JP7209736B2 (ja) 2023-01-20

Family

ID=68097260

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020555391A Active JP7209736B2 (ja) 2018-04-10 2019-02-19 プロセッサをデバッグする方法

Country Status (6)

Country Link
US (2) US10534881B2 (ja)
EP (1) EP3776213B1 (ja)
JP (1) JP7209736B2 (ja)
KR (1) KR102230173B1 (ja)
CN (1) CN112136116B (ja)
WO (1) WO2019199378A1 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10534881B2 (en) * 2018-04-10 2020-01-14 Advanced Micro Devices, Inc. Method of debugging a processor
US11204859B2 (en) * 2019-07-09 2021-12-21 International Business Machines Corporation Partial-results post-silicon hardware exerciser
US11194705B2 (en) 2020-05-11 2021-12-07 International Business Machines Corporation Automatically introducing register dependencies to tests
US11361136B2 (en) 2020-07-17 2022-06-14 International Business Machines Corporation Creating multiple use test case
US11226370B1 (en) 2020-09-10 2022-01-18 International Business Machines Corporation Recoverable exceptions generation and handling for post-silicon validation

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050125754A1 (en) * 1999-11-30 2005-06-09 Schubert Nils E. Hardware debugging in a hardware description language
US20070011522A1 (en) * 2005-06-06 2007-01-11 Denniston William B System and methods for functional testing of embedded processor-based systems
JP2012141707A (ja) * 2010-12-28 2012-07-26 Fujitsu Semiconductor Ltd プロセッサ検証プログラム
JP2013077173A (ja) * 2011-09-30 2013-04-25 Toshiba Corp テストケース生成プログラム及びテストケース生成装置
US20130132932A1 (en) * 2009-10-27 2013-05-23 Echostar Global B.V. Embedding dynamic information in electronic devices
US20160246599A1 (en) * 2015-02-25 2016-08-25 Mireplica Technology, Llc Hardware Instruction Generation Unit for Specialized Processors

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030033594A1 (en) * 2001-01-29 2003-02-13 Matt Bowen System, method and article of manufacture for parameterized expression libraries
US20030037321A1 (en) * 2001-01-29 2003-02-20 Matt Bowen System, method and article of manufacture for extensions in a programming lanauage capable of programming hardware architectures
KR20030058130A (ko) 2001-12-29 2003-07-07 엘지전자 주식회사 프로세서의 실시간 디버깅 장치
US7209851B2 (en) * 2003-02-14 2007-04-24 Advantest America R&D Center, Inc. Method and structure to develop a test program for semiconductor integrated circuits
US8352713B2 (en) * 2006-08-09 2013-01-08 Qualcomm Incorporated Debug circuit comparing processor instruction set operating mode
US8321489B2 (en) * 2006-09-15 2012-11-27 National Semiconductor Corporation Software reconfigurable digital phase lock loop architecture
US8892386B2 (en) * 2011-07-10 2014-11-18 International Business Machines Corporation Method and apparatus for post-silicon testing
DE112013007751B3 (de) * 2012-10-22 2023-01-12 Intel Corporation Hochleistungs-Zusammenschaltungs-Bitübertragungsschicht
US9886277B2 (en) * 2013-03-15 2018-02-06 Intel Corporation Methods and apparatus for fusing instructions to provide OR-test and AND-test functionality on multiple test sources
US9798575B2 (en) * 2013-05-06 2017-10-24 Sas Institute Inc. Techniques to manage virtual classes for statistical tests
US9766888B2 (en) * 2014-03-28 2017-09-19 Intel Corporation Processor instruction to store indexes of source data elements in positions representing a sorted order of the source data elements
US9424039B2 (en) * 2014-07-09 2016-08-23 Intel Corporation Instruction for implementing vector loops of iterations having an iteration dependent condition
US20170075789A1 (en) * 2015-09-10 2017-03-16 Google Inc. Method and apparatus for generating, capturing, storing, and loading debug information for failed tests scripts
US10534881B2 (en) * 2018-04-10 2020-01-14 Advanced Micro Devices, Inc. Method of debugging a processor

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050125754A1 (en) * 1999-11-30 2005-06-09 Schubert Nils E. Hardware debugging in a hardware description language
US20070011522A1 (en) * 2005-06-06 2007-01-11 Denniston William B System and methods for functional testing of embedded processor-based systems
US20130132932A1 (en) * 2009-10-27 2013-05-23 Echostar Global B.V. Embedding dynamic information in electronic devices
JP2012141707A (ja) * 2010-12-28 2012-07-26 Fujitsu Semiconductor Ltd プロセッサ検証プログラム
JP2013077173A (ja) * 2011-09-30 2013-04-25 Toshiba Corp テストケース生成プログラム及びテストケース生成装置
US20160246599A1 (en) * 2015-02-25 2016-08-25 Mireplica Technology, Llc Hardware Instruction Generation Unit for Specialized Processors

Also Published As

Publication number Publication date
JP7209736B2 (ja) 2023-01-20
CN112136116A (zh) 2020-12-25
US10534881B2 (en) 2020-01-14
US11093676B2 (en) 2021-08-17
EP3776213A4 (en) 2022-01-05
EP3776213A1 (en) 2021-02-17
KR102230173B1 (ko) 2021-03-19
EP3776213B1 (en) 2023-04-05
KR20200130752A (ko) 2020-11-19
WO2019199378A1 (en) 2019-10-17
US20200134248A1 (en) 2020-04-30
US20190311072A1 (en) 2019-10-10
CN112136116B (zh) 2023-05-16

Similar Documents

Publication Publication Date Title
JP7209736B2 (ja) プロセッサをデバッグする方法
Wang et al. Revery: From proof-of-concept to exploitable
Eceiza et al. Fuzzing the internet of things: A review on the techniques and challenges for efficient vulnerability discovery in embedded systems
US6658471B1 (en) Method and system for zero overhead software performance measurement instrumentation
US11204859B2 (en) Partial-results post-silicon hardware exerciser
US20120084759A1 (en) System and method for in-vivo multi-path analysis of binary software
Moudgill et al. Validation of Turandot, a fast processor model for microarchitecture exploration
Lin et al. GREBE: Unveiling exploitation potential for Linux kernel bugs
Campbell et al. Randomised testing of a microprocessor model using SMT-solver state generation
US8990622B2 (en) Post-silicon validation using a partial reference model
Cao et al. Symcrash: Selective recording for reproducing crashes
Donaldson et al. Counterexample-guided abstraction refinement for symmetric concurrent programs
Hsiao et al. Synthesizing formal models of hardware from RTL for efficient verification of memory model implementations
Hao et al. Syzdescribe: Principled, automated, static generation of syscall descriptions for kernel drivers
US20050251791A1 (en) Systems and methods for branch profiling loops of an executable program
Ding et al. Hardware support to improve fuzzing performance and precision
Das et al. A flexible framework for expediting bug finding by leveraging past (mis-) behavior to discover new bugs
US20050251790A1 (en) Systems and methods for instrumenting loops of an executable program
Hóu et al. An isabelle/hol formalisation of the SPARC instruction set architecture and the TSO memory model
Mohr et al. Synthesizing hardware-software leakage contracts for RISC-V open-source processors
Dang et al. Generating test programs to cover pipeline interactions
Joannou et al. Randomized testing of RISC-V CPUs using direct instruction injection
Vartanov Dynamic symbolic execution of Java programs using JNI
CN117313595B (zh) 用于功能验证的随机指令生成方法、设备及系统
Wang et al. ProbeBuilder: Uncovering opaque kernel data structures for automatic probe construction

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20220218

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20220218

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20220607

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220906

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20221206

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20221223

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230110

R150 Certificate of patent or registration of utility model

Ref document number: 7209736

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150