JP4888272B2 - ソフトウェアのシミュレーション方法、ソフトウェアのシミュレーションのためのプログラム、及びソフトウェアのシミュレーション装置 - Google Patents

ソフトウェアのシミュレーション方法、ソフトウェアのシミュレーションのためのプログラム、及びソフトウェアのシミュレーション装置 Download PDF

Info

Publication number
JP4888272B2
JP4888272B2 JP2007198001A JP2007198001A JP4888272B2 JP 4888272 B2 JP4888272 B2 JP 4888272B2 JP 2007198001 A JP2007198001 A JP 2007198001A JP 2007198001 A JP2007198001 A JP 2007198001A JP 4888272 B2 JP4888272 B2 JP 4888272B2
Authority
JP
Japan
Prior art keywords
access
thread
program
threads
software
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
JP2007198001A
Other languages
English (en)
Other versions
JP2009032197A (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.)
Fujitsu Semiconductor Ltd
Original Assignee
Fujitsu Semiconductor Ltd
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 Fujitsu Semiconductor Ltd filed Critical Fujitsu Semiconductor Ltd
Priority to JP2007198001A priority Critical patent/JP4888272B2/ja
Priority to EP08158811A priority patent/EP2037368A3/en
Priority to US12/213,871 priority patent/US20090037888A1/en
Publication of JP2009032197A publication Critical patent/JP2009032197A/ja
Application granted granted Critical
Publication of JP4888272B2 publication Critical patent/JP4888272B2/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/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3457Performance evaluation by simulation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3632Software debugging of specific synchronisation aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3664Environments for testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/524Deadlock detection or avoidance

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Software Systems (AREA)
  • Debugging And Monitoring (AREA)

Description

本発明は、一般に計算機利用設計に関し、詳しくはシステムLSIで実行するプログラムで発生するデッドロック等の問題抽出に関する。
シングルプロセッサ又はマルチプロセッサのシステムで動作する並列プログラムを開発する場合、データレース及びデッドロックの発生を的確に抽出する必要がある。抽出されたデータレース及びデッドロックに基づいて、ソフトウェア開発者が、発生原因をなくすようにプログラムを修正する。
データレースとは、排他制御が正しく行われないことに起因して1つの変数に対する多重アクセスの結果として生じるエラーである。プログラムの実行中に、あるスレッドがアドレス指定可能なメモリ位置をアクセスしているのと同時に、別のスレッドがそのメモリ位置の内容を変更する場合、プログラムにはデータレースが存在する。
デッドロックとは、例えば2つのスレッドが、互いに相手が必要としているリソースのロックを占有し、リソースの解放を待つ状態となり、何れのスレッドもリソースを解放しない結果、処理が進まなくなるというエラーである。より具体的には、複数のプロセスが起動している状態で、プロセスAがレコードcを排他的に使用しており、別なプロセスBが別のレコードeを排他的に使用しているとする。この時プロセスAが、プロセスBの使用しているレコードeを使用したいとすると、このレコードeが解放されるまで待ち状態となる。この時プロセスBが、同様にプロセスAの使用しているレコードcを使用したいとすると、このレコードcが解放されるまで待ち状態となってしまう。即ち、プロセスAとプロセスBとが待ち状態になりプロセスの進行が停止してしまう。
上記説明では、単純化のために2つのプロセス間での競合としてデータレースとデッドロックについて説明したが、実際の処理では、複数のプロセス間でデータレースやデッドロックが発生する場合もある。プロセスの数に限らずデータレースやデッドロックの現象は、システム動作の障害となる場合が多く、システムのパフォーマンスの大幅な低下を引き起こしてしまう。
データレース及びデッドロックを抽出するために、システムLSIの実機を使用してソフトウェアを実行し、そのソフトウェアのデバッグを行うことが考えられる。この場合、システムLSIの実機にデバッグ機能を組み込むことにより、プログラム中に設定したブレークポイントでプログラムの実行を停止させ、その時点でのレジスタスタックの内容、グローバルデータの値、プログラムの呼び出しスタックの内容等をチェックできるように構成する。またデバッグ対象がマルチスレッドの場合、あるスレッドがブレークポイントに達して実行を停止した時点で、他のスレッドの実行を停止するように構成することが望ましい。このようなデバッグ機能をLSIに組み込むことは、LSIが大規模で複雑なシステムの場合は比較的容易である。しかし民生機器等の電子機器の組み込みLSIの場合、元々の構成が比較的単純であり、複雑なデバッグ機能を搭載することはコスト増に繋がるために望ましくない。
SoC(System On a Chip)等のシステムLSIを設計・製造する工程について考えると、まず最初に、LSIのアーキテクチャ設計及び仕様設計を行う。その後RTL設計を行い、RTL記述に基づいてレイアウト設計し、工場でLSIを製造する。そして製造したLSIにてソフトウェアを実行して、ソフトウェアの動作確認を行う。
このようなLSIの設計・製造工程においては、最初にアーキテクチャ設計及び仕様設計を終了した時点で、システムLSIの仮想的なソフトウェアのモデルを作成することができる。従って、ソフトウェアのモデルをソフトウェアデバッガに接続し、ソフトウェアのモデル上で開発対象のソフトウェアの実行をシミュレートすれば、ソフト開発者がソフトウェアの開発・検証を行うことができる。このようにアーキテクチャ設計及び仕様設計という最初の工程を終了した後に直ちにソフトウェアの設計・検証を開始すれば、ソフトウェア設計にかかる莫大な時間をLSI設計・製造工程の中に隠すことができる。
ソフトウェアデバッガを用いてソフトウェアの検証をする場合、通常、トレースポイントをプログラム中に埋め込まなければならない。またプログラム中にプリント文等を埋め込んでデバッグ目的のために使用したりする。しかしこのようにプログラムに細工をすると、デバッグ対象のプログラムと実際の実行用のプログラムとで環境や動作条件が異なってしまい、何をデバッグ対象としているのかが明確でなくなる。即ち、デバッグ用に生成された実行可能オブジェクトと製品レベルの最適化コンパイルで生成された実行可能オブジェクトとでは、実行条件が異なってしまうので、実際のプログラムの実際の動作のデバッグをしていることにならない。
特開平9−101945号公報 特開2002−297414号公報
以上を鑑みて、本発明は、LSIのソフトウェアモデル上でプログラムの実行をシミュレートする際に、プログラムにデバッグ用の細工をすることなく、データレース及びデッドロック等を抽出可能なシミュレーション方法及びシミュレータを提供することを目的とする。
コンピュータによるソフトウェアのシミュレーション方法は、ソフトウェアによるシミュレータ上にソフトウェアとして実現したハードウェアのモデルにより複数のスレッドからなるプログラムを実行し、該シミュレータのモニタ機能により該ハードウェアのモデル内のリソースに対する該複数のスレッドによるアクセスをモニタしてアクセスに関する情報を収集し、該モニタ機能により、該収集された情報から複数のスレッドによる同一のリソース領域に対する重複するアクセスを抽出し、該モニタ機能により、該重複するアクセスを警告するメッセージを生成する各段階を含むことを特徴とする。
ソフトウェアのシミュレーションのためのプログラムは、ソフトウェアによるシミュレータ上にソフトウェアとして実現したハードウェアのモデルにより複数のスレッドからなるプログラムを実行し、該シミュレータのモニタ機能により該ハードウェアのモデル内のリソースに対する該複数のスレッドによるアクセスをモニタしてアクセスに関する情報を収集し、該モニタ機能により、該収集された情報から複数のスレッドによる同一のリソース領域に対する重複するアクセスを抽出し、該モニタ機能により、該重複するアクセスを警告するメッセージを生成する各段階をコンピュータに実行させる指令から構成される。
ソフトウェアのシミュレーション装置は、ソフトウェアとして実現したハードウェアのモデルを含むシミュレータプログラムと該ハードウェアのシステムでの実行を想定した複数のスレッドからなるプログラムとを格納するメモリと、該メモリに格納された該シミュレータプログラムを実行することにより該メモリに格納された該複数のスレッドからなるプログラムを該ハードウェアのモデル上で実行する演算処理ユニットを含み、該演算処理ユニットは、該シミュレータのモニタ機能により該ハードウェアのモデル内のリソースに対する該複数のスレッドによるアクセスをモニタしてアクセスに関する情報を収集し、該モニタ機能により、該収集された情報から複数のスレッドによる同一のリソース領域に対する重複するアクセスを抽出し、該モニタ機能により、該重複するアクセスを警告するメッセージを生成する各段階を実行することを特徴とする。
本発明の少なくとも1つの実施例によれば、ソフトウェアとして実現したハードウェアのモデルを含むシミュレータプログラムに、ハードウェアのモデルとは別のモニタ機能として、同一リソースに対する重複するアクセスを抽出する機能を設ける。これにより、LSIのソフトウェアモデル上でプログラムの実行をシミュレートする際に、プログラムにデバッグ用の細工をすることなく、データレース及びデッドロック等を抽出可能なシミュレーション方法及びシミュレータを提供することができる。
以下に、本発明の実施例を添付の図面を用いて詳細に説明する。
図1は、本発明によるSoCシミュレータを使用する構成の一例を示す図である。図1の構成は、ソフトウェアデバッガ10及びSoCシミュレータ11を含む。SoCシミュレータ11は、API(Application Program Interface)を介してソフトウェアデバッガ10に結合され、SoCモデル12、メモリモニタ13、キャッシュモニタ14、及びSW/HW(ソフトウェア/ハードウェア)モニタ15を含む。SoCモデル12は、システムLSIをソフトウェアでモデル化したものであり、ソフトウェアで実現された1つ又は複数のCPU21、周辺ブロック22、DRAM23、メモリ24、及びバス25を含む。ソフトウェアデバッガ10及びSoCシミュレータ11は、コンピュータ上で実行されている。
SoCモデル12のシステムLSIで実行するプログラムのソースコード17を作成し、このソースコード17をコンピュータでコンパイルすることにより、実行可能コード18を生成する。ソフトウェアデバッガ10は、ソースコード17と実行可能コード18とを参照しながら、ソースコード17のプログラムをデバッグする。実行可能コード18は、SoCモデル12のメモリ24に格納され、SoCモデル12のCPU21により実行される。即ち、システムLSIの実際のCPUによるプログラムの実行を、ソフトウェアとして実現されたSoCモデル12のCPU21によりシミュレートする。
SoCモデル12は、複数のスレッドを並行して実行するが、シングルプロセッサでマルチスレッド実行の構成、マルチプロセッサで各CPU毎に1スレッド実行の構成、マルチプロセッサで各CPU毎に複数スレッドの構成の何れの構成であってもよい。1つのシステムLSIでは複数のプログラムが実行されるので、ソースコード17及び実行可能コード18はそれぞれ複数個あってよい。なお1つのプログラムが複数のスレッドを生成してよいし、1つのプログラム自身も1つのスレッドとして考えてよい。
図1に示すSoCシミュレータ11は、SoCモデル12によりプログラムの実行をシミュレートすると共に、SoCモデル12とは別に設けたモニタ機能を含んでおり、このモニタ機能によりデータレースやデッドロック等を検出する。具体的には、メモリモニタ13、キャッシュモニタ14、及びSW/HWモニタ15がSoCモデル12からプログラム実行に関する種々の情報を収集し、更に収集された情報をSW/HWモニタ15で纏めて整理することにより、データレースやデッドロック等を検出する。
まずソフトウェアデバッガ10から、SoCモデル12が実行する1つ又は複数のプログラム(実行可能コード18)に関する情報を、SW/HWモニタ15に通知しておく。このプログラム情報は、複数のプログラムを区別するために一意に割り当てられたプログラムID、スレッド生成関数のアドレス(呼び出しアドレス)、スレッド同期のアドレス(呼び出しアドレス)、排他制御(ロック)関数のアドレス(呼び出しアドレス)、排他制御(アンロック)関数のアドレス(呼び出しアドレス)、及び各スレッドにセットされたプライオリティ(スレッド実行時の優先順位)を含む。
1つのスレッドから複数のスレッドを生成してよい。あるスレッドが、何れのスレッドから生成されたスレッドであるかを把握するために、上記のスレッド間の関係を階層化したデータ構造を用いてスレッド間の関係を管理する。階層化するために、プログラム情報にスレッドID(プログラムID)の継承の情報を含めてよい。
図2は、スレッド間の関係を示す階層化データ情報の一例を示す図である。プログラムの実行に伴い、図2に示すように、スレッドが順次生成されていく。図2の例ではプログラムA28−1とプログラムB28−2とが実行されている。プログラムA28−1は第1のスレッド29−1及び第2のスレッド29−2を生成し、第1のスレッド29−1から更に第3のスレッド29−3及び第4のスレッド29−4が生成されている。またプログラムB28−2は第1のスレッド29−5及び第2のスレッド29−6を生成し、第1のスレッド29−5から更に第3のスレッド29−7及び第4のスレッド29−8が生成されている。各スレッドは固有のスレッドIDで特定され、プライオリティ及びアクティブフラグが関連づけられている。アクティブフラグは、当該スレッドが排他状態であるか否かを示す。
SW/HWモニタ15は、ソフトウェアデバッガ10から上記プログラム情報を受け取ると共に、SoCモデル12のCPU21から、CPUのID、プログラムカウンタ(PC)の値、及び命令サイクルのサイクル番号Cycleを受け取る。なおPC値はソフトウェア上での位置を意味し、CycleはSoCシミュレータ11で実行した時間を意味する。
メモリモニタ13は、SW/HWモニタ15にメモリアクセスに関する情報を提供するために、CPU21によるプログラム実行によりメモリ24に対して発生した各メモリアクセスについての情報を収集する。収集する情報は、アクセス元のCPU21のID、PCの値、アクセスアドレス、アクセスサイズ、Read/Writeの種別、及びアクセスの発生したCycle(アクセスの発生した時のSoCシミュレータ11の実行サイクルス数)である。また同様にキャッシュモニタ14は、SW/HWモニタ15にキャッシュアクセスに関する情報を提供するために、CPU21によるプログラム実行によりキャッシュに対して発生した各アクセスについての情報を収集する。収集する情報は、アクセス元のCPU21のID、PCの値、アクセスアドレス、アクセスサイズ、Read/Writeの種別、及びアクセスの発生したCycleである。
メモリモニタ13は、収集した情報に基づいて、多重アクセスを示す多重アクセス情報を生成する。この収集した情報には、メモリマップ30における斜線として図3(A)に示されるように、各CPUがアクセスした領域が記録されている。即ち、収集した情報中のアクセスアドレス及びアクセスサイズが、各CPUのアクセスした領域を示している。メモリモニタ13は、各CPUによりアクセスされた領域を比較して重複領域を抽出することにより、図3(B)に示すように多重アクセスされた領域を特定する。また多重アクセスしたCPUのCPU_IDを特定する。
図4は、メモリモニタ13により生成された多重アクセス情報のデータ構造を示す図である。図4に示されるように、メモリモニタ13が生成した多重アクセスデータは、1つのCPU_ID31に対して、このCPU_ID31を有するCPUが実行した各アクセスの情報32−1乃至32−nが対応付けられている。アクセスの情報32−1乃至32−nの各々は、アクセスアドレス、アクセスサイズ、Read/Writeの種別、PC、及びCycleを含む。また各アクセスの情報32−1乃至32−nに対して、当該アクセスによりアクセスされた領域に重複してアクセスした他のCPUのCPU_ID33−1乃至33−nが対応付けられている。図4には1つのCPU_ID31に対するデータ構造のみが示されるが、図示するようなデータ構造が、複数のCPU_ID31に対して生成される。このようにして生成された多重アクセスデータは、メモリモニタ13からSW/HWモニタ15に供給される。
同様にキャッシュモニタ14は、収集した情報に基づいて、キャッシュに対する多重アクセスをモニタ可能なアクセス情報を生成する。このアクセス情報の構造は、図4に示すデータ構造と同様である。キャッシュモニタ14は、生成したアクセス情報をSW/HWモニタ15に供給する。
図5は、図1の構成によりプログラムのデータレース及びデッドロック等を抽出する処理の全体の流れを示す図である。
まずステップS1においてソフトウェアデバッガ10(図1参照)が動作を開始する。ステップS2において、ソフトウェアデバッガ10がソースコード17をコンパイルして実行可能コード(ロードモジュール)18を生成する。
ステップS3においてソフトウェアデバッガ10がSoCシミュレータ11(図1参照)を呼び出して起動する。SoCシミュレータ11が起動されると(ステップS4)、SoCシミュレータ11のSW/HWモニタ15が、ソフトウェアデバッガ10から送られるプログラム情報(ソースコード17及び実行可能コード18に関する情報)から必要な情報を抽出し(ステップS5)、プログラムの動作を監視するためのプログラム管理データ40を生成する(ステップS6)。
ステップS7において、SoCシミュレータ11のSoCモデル12のメモリ24に実行可能コード(ロードモジュール)18をロードする。ステップS8において、ソフトウェアデバッガ10によりソフトウェア開発者がデバッグ作業を開始する。
ステップS9で、SoCシミュレータ11がSoCモデル12によりシミュレーションを実行する。即ち、メモリ24にロードされた実行可能コード18をCPU21により実行することにより、ソフトウェアとして実現されたSoCモデル12によるプログラム実行をシミュレートする。
ステップS10において、各CPU21がプログラムを実行し、メモリ24に対して適宜アクセスが実行される。メモリ24に対してアクセスが実行されると、ステップS11においてメモリモニタ13がデータを収集する。ここで収集する情報は、前述のように、アクセス元のCPU21のID、PCの値、アクセスアドレス、アクセスサイズ、Read/Writeの種別、及びCycleである。またキャッシュアクセスに対しても同様の情報が収集される。
各CPU21がプログラムを実行していくにつれ、メモリアクセス、キャッシュアクセス、スレッド生成、スレッド消滅等のイベントが発生すると、それに応じてプログラム管理データ40にデータを追加したり削除したりすることで、プログラム管理データ40を適宜更新していく(ステップS12)。これにより、図2に一例として示したようなデータがプログラム管理データ40として生成・更新されていく。
ステップS13で、シミュレーションによるプログラム実行の所定の期間(例えばCycleが0から99の期間)について、プログラム管理データ40を参照することにより、多重アクセスによるデータレース及びデッドロック等を抽出する処理を実行する。ステップS14で、抽出されたデータレース及びデッドロック等を警告するメッセージをソフトウェアデバッガ10側(ソフトウェア開発者側)に送信する。この警告には、問題として検出されたのがデータレースであるのか又はデッドロックであるのか等の問題の種別を特定する情報、及び問題となっているアクセス先を特定する情報を含んでよい。ステップS15で、ソフトウェアのデバッグを終了する。
以下に、図5の各ステップについて詳細に説明する。
図6は、図5のステップS5及びステップS6における処理を説明するための図である。前述のように、SW/HWモニタ15は、ソフトウェアデバッガ10からSoCモデル12が実行する1つ又は複数のプログラムに関する情報を受け取る。この受け取る情報が図6においてプログラム情報41として示されており、複数のプログラムを区別するために一意に割り当てられたプログラムID、スレッド生成関数のアドレス(呼び出しアドレス)、スレッド同期のアドレス(呼び出しアドレス)、排他制御(ロック)関数のアドレス(呼び出しアドレス)、排他制御(アンロック)関数のアドレス(呼び出しアドレス)、及び各スレッドにセットされたプライオリティ(スレッド実行時の優先順位)を含む。
SW/HWモニタ15は、プログラム情報41に基づいて各プログラムの静的なスレッド情報を生成する。この処理が、図5のステップS5及びステップS6に相当する。この処理によりSW/HWモニタ15が、プログラム管理データ40を生成する。このプログラム管理データ40は、図示されるように、プログラムID毎にロック開始アドレス、アンロックアドレス、スレッド生成アドレス、スレッド消滅アドレス、スレッド同期アドレス、及びプライオリティを設定したデータである。
図7は、図5のステップS9及びステップS10における処理を説明するための図である。ステップS9で、SoCシミュレータ11がSoCモデル12によりシミュレーションを実行すると、ステップS10において、各CPU21(図7に示すCPU0乃至CPUN)がプログラムを実行する。CPU0によるプログラム実行動作が、ステップS10−1として例示されている。他のCPU2乃至CPUNについても同様にプログラム実行動作が行われる。
CPU0によるプログラム実行動作であるステップS10−1においては、まずステップS50で命令がフェッチされる。即ち実行対象のプログラムの命令がメモリ24からCPU0にフェッチされる。次にステップS51でフェッチされた命令がデコードされ、ステップS52でデコード結果に基づいて命令が実行される。
ステップS53で、実行した命令によりメモリアクセスが行われるか否かが判定される。メモリアクセス有りの場合には、ステップS54でアクセス処理が実行される。このアクセス処理においては、CPU0のプログラムカウンタPCの値を使用する。メモリアクセス無しの場合には、ステップS55に進む。またステップS54でのアクセス処理の終了後もステップS55に進む。ステップS55で割込み処理を実行する。その後、図7のステップS10に示される処理ループに戻り、CPU0によりプログラムの各命令が順次実行されていく。なお上記のステップS54のアクセス処理が、図5のステップS11におけるメモリモニタ13によるデータ収集処理(及びキャッシュモニタ14によるデータ収集処理)に対応する。
図8は、メモリモニタ13によるデータ収集処理を説明するための図である。前述のように、メモリモニタ13は、CPU21によるプログラム実行によりメモリ24に対して発生した各メモリアクセスについての情報を収集する。収集する情報は、アクセス元のCPU21のID、PCの値、アクセスアドレス、アクセスサイズ、Read/Writeの種別、及びCycleである。図8において、1回のメモリアクセスについての情報がアクセスデータ42として示される。この1回のメモリアクセスについてのアクセスデータ42を、過去の複数回のメモリアクセスについてのアクセスデータを蓄積した蓄積データ43に順次加えていく。この蓄積データ43に対して、図3で説明したようなデータ比較処理をメモリモニタ13が実行することにより、処理後のデータ44が得られる。ここでいう処理後のデータ44とは、図4に示される多重アクセスデータのことである。
図9は、データ比較処理を説明するための図である。図9に示されるように、蓄積データ43に記録されたアクセスの開始アドレス及びサイズを各アクセス間で比較する(ステップS1)。これにより多重アクセスが有るか否かを判定する(ステップS2)。多重アクセス有りと判定されたアクセスに対して、多重アクセスしたプログラムIDを付加する(ステップS3)。これにより、図9に示されるように多重アクセスデータ44が得られる。
なお上記のメモリモニタ13による処理と同様の処理がキャッシュモニタ14によりキャッシュアクセスに対しても実行される。即ち、図8に示すメモリモニタ13によるデータ収集処理と同様のデータ収集処理がキャッシュモニタ14により実行され、図9に示すメモリモニタ13によるデータ比較処理と同様のデータ比較処理がキャッシュモニタ14により実行される。
図9に示す多重アクセスデータ44では、プログラムID45に対して、このプログラムIDに対応するプログラムが実行したアクセスに関するアクセス情報46が対応付けられ、更にこのアクセスのアクセス領域に重複アクセスした他のプログラムのプログラムID47が、アクセス情報46に対応付けられている。なお図4に示した多重アクセスデータでは、プログラムIDの代わりにCPU_IDを用いている。これはOS(Operating System)が用いられない場合には、1つのCPUに1つのプログラムが固定されるので、CPU_IDを監視すれば何れのプログラムがアクセスしたのかを知ることができるからである。
図10は、OS有の場合とOS無しの場合との違いについて説明するための図である。OS無しの場合には、各CPU毎に何れのプログラムを実行するかが決まっている。例えばCPU0がプログラムAを実行するとすれば、プログラムAの全てのスレッドAはCPU0により実行される。従って、メモリ24に対するアクセスを監視する際には、CPU_IDのみをチェックしておけば、何れのプログラムがアクセスしたのかを知ることができる。
それに対してOS有りの場合には、各スレッド実行時に、OSによりスレッドを実行するCPUが決定される。即ち、プログラムAをCPU0で実行していたとしても、プログラムAの全てのスレッドAがCPU0により実行されるとは限らず、あるスレッドAがCPU1により実行される場合もある。従ってメモリ24に対するアクセスを監視する際には、CPU_IDを監視するだけでは、何れのプログラム(スレッド)がアクセスしたのかを知ることができない。
図11は、プログラムIDを特定する方法について説明するための図である。図11に示されるように、各CPUがそれぞれプログラムを実行している。このときCPU0がメモリマップ50上のプログラム1が格納されている領域をアクセスして命令フェッチした場合、即ち、CPU0のプログラムカウンタPCの値がメモリマップ50上のプログラム1が格納されている領域内のアドレスを示す場合、CPU0が実行しているプログラムはプログラム1であることを知ることができる。このようにしてPCの値に基づいてプログラムIDを特定できる。
図12は、SW/HWモニタ15への各種データの供給を示す図である。まずプログラム情報41が、ソフトウェアデバッガ10からSW/HWモニタ15に供給される。またSW/HWモニタ15は、CPU情報51として、CPUのID、プログラムカウンタ(PC)の値、及び命令サイクルのサイクル番号CycleをSoCモデル12のCPU21から受け取る。また上に説明したように、アクセスデータ42がメモリモニタ13によるアクセス処理により処理され、多重アクセスデータ44としてSW/HWモニタ15に供給される。同様に、キャッシュアクセスに対するアクセスデータ52がキャッシュモニタ14によるアクセス処理により処理され、多重アクセスデータとしてSW/HWモニタ15に供給される。これらのデータに基づいて、SW/HWモニタ15がプログラム管理データ40の更新処理(データの追加・削除)を行う。
以下に、図5のステップS12で実行されるデータの追加及び削除について説明する。図13は、スレッド生成命令によりスレッドが追加されたプログラム管理データ40を示す図である。
図5及び図7のステップS10に示すCPUによるプログラム実行において、CPUがある命令をフェッチして実行したときに、その命令がスレッド生成命令である場合、図13に示すように、そのプログラムのプログラム管理データ40にスレッドID63が付加される。ここでプログラム管理データ40において、プログラムID61にそのプログラムが実行した1つ又は複数のアクセス情報62が対応付けられており、そのプログラムID61に更に、生成されたスレッドのスレッドID63が対応付けられる。このスレッドID63は、OS有りの場合にはOSにより付与されるIDであり、OS無しの場合には任意のIDでよい。
スレッドID63にはスレッド有効フラグ64が対応付けられており、スレッド有効フラグ64の値はONになっている。このスレッド有効フラグ64の値は、当該スレッドが削除されたときにOFFとなる。なお図7において図示を省略するが、プログラム管理データ40においては、図6に示されるように、各プログラムIDに対応づけて、ロック開始アドレス、アンロックアドレス、スレッド生成アドレス、スレッド消滅アドレス、スレッド同期アドレス、及びプライオリティを示すデータが設定されている。
図14は、図13のプログラム管理データ40がデ―タ追加により更新された図である。図14では、スレッドID63のスレッドにより複数回のメモリアクセスが実行され、複数のアクセス情報65−1乃至65−nがスレッドID63に対応付けられている。なお図14においては、プログラムID61に対応付けられているアクセス情報62は省略して示してある。また図14に示すように、スレッド有効フラグ64がONに設定されたときの時間がCycleにより記録されている。このようにしてプログラム管理データ40においては、スレッドID毎にアクセスに関する情報を纏めることにより、アクセスに関する情報をスレッド単位で整理する。
図15は、他のプログラムのスレッドによるアクセスにより多重アクセスが発生した後のプログラム管理データ40を示す図である。この例では、アクセス情報65−nに対応するリソースに対してプログラムID66のプログラムのスレッドID67のスレッドがアクセスしている。この場合、スレッドID63のスレッドが既にアクセス情報65−nに対応するリソースをロックしている状態で、スレッドID67のスレッドがこのリソースにアクセスしたことになる。
プログラム管理データ40には更に、ロック時のサイクル(Cycle)及びアンロック時のサイクルをロックデータ68として記録する。これは、図5及び図7のステップS10に示すCPUによるプログラム実行において、CPUがある命令をフェッチして実行したときに、その命令がロック命令である場合にそのときのCycleをロック時サイクルとして記録し、その命令がアンロック命令である場合にそのときのCycleをアンロック時サイクルとして記録すればよい。
図16は、スレッド削除命令によりスレッドが削除されたプログラム管理データ40を示す図である。
図5及び図7のステップS10に示すCPUによるプログラム実行において、CPUがある命令をフェッチして実行したときに、その命令がスレッド削除命令である場合、図13に示すように、当該スレッドID63のスレッド有効フラグ64の値をOFFにする。また、スレッド有効フラグ64がOFFに設定されたときの時間を、Cycle値として記録する。
図17は、図15の状態からスレッドが更なるスレッド生成命令によりスレッドを生成した場合のプログラム管理データ40を示す図である。
図5及び図7のステップS10に示すCPUによるプログラム実行において、スレッドID63のスレッドのある命令をCPUがフェッチして実行したときに、その命令がスレッド生成命令であるとする。この場合、図17に示すようにプログラム管理データ40において、スレッドID63により生成されたスレッドとして(スレッドID63の下の階層のスレッドとして)、スレッドID69がスレッドID63に付加される。スレッドID69にはスレッド有効フラグ70が対応付けられており、スレッド有効フラグ70の値はONになっている。このスレッド有効フラグ70の値は、当該スレッドが削除されたときにOFFとなる。
以下に図5のステップS13及びS14における処理について説明する。この処理では、多重アクセスによるデータレース及びデッドロック等を抽出し、抽出結果を警告するメッセージを送出する。
図18は、多重アクセスにより問題が発生する可能性のある箇所を抽出し警告する処理の詳細を示すフローチャートである。ステップS1で、着目期間内の新規アクセスを抽出する。ここで着目期間とは、SoCシミュレータ11によるSoCモデル12のシミュレーションの期間を、サイクル数Cycleに応じて分割した複数の期間のうちの1つである。例えばシミュレーション期間を100サイクル毎に分割すれば、第1の期間がサイクル数Cycle0〜99、第2の期間がサイクル数Cycle100〜199、第3の期間がサイクル数Cycle200〜299であり、以下同様である。
図19は、着目期間に関するデータ処理とプログラム実行シミュレーションの進行との関係を示す図である。図19に示されるように、例えばシミュレーション期間を100サイクル毎に分割した各区間において、各CPUがそれぞれプログラムを実行する。図19の例では、各区間の開始タイミングにおいて、各CPUによるプログラム実行の同期がとられている。図5のステップS12の処理によりサイクルの進行と共にプログラム管理データ40が蓄積されていくが、ある区間についてのプログラム管理データ40は、次の区間において実行される多重アクセス検出処理によりチェックされる。即ち、図19に示されるように、第1の区間が終了した後に、第2の区間において第1の区間のデータを処理する。同様に、第2の区間が終了した後に、第3の区間において第2の区間のデータを処理する。一般に、第Nの区間が終了した後に、第N+1の区間において第Nの区間のデータを処理する。即ち、第N+1の区間において、第Nの区間において蓄積されたプログラム管理データ40をチェックして多重アクセス検出等の処理を実行する。この時、この第N+1の区間においては、SoCシミュレータ11によるSoCモデル12のプログラム実行シミュレーションが並行して実行されている。
図18のステップS1で、SW/HWモニタ15が着目期間内の新規アクセスを抽出することにより、着目期間で発生したアクセスを全てリストアップする。ステップS2で、SW/HWモニタ15が、新規アクセスのリスト内を全てチェックしたか否かを判定する。ステップS3で、SW/HWモニタ15が新規アクセスのリストと過去のアクセスのリストとを纏めてチェックして、リソースとスレッドとの関係を示す表を生成する。
図20は、新規アクセスのリスト及び過去のアクセスのリストを示す図である。図20において、例えばリスト71乃至73としてアクセスのリストが蓄積されたとする。各リストは、図13乃至図17で示したプログラム管理データ40と実質的に同様であり、各アクセス毎にアクセス情報74乃至76と、そのアクセス先にアクセスしたプログラムのスレッドとが特定されている。このリストは、プログラム管理データ40から抽出すればよい。或いは単にプログラム管理データ40のアクセス関連の部分に着目したものであると考えてもよい。
例えばリスト71の場合、アドレス1にスレッド0とスレッド1とがアクセスし、スレッド0がアドレス1をロックし、スレッド1はアドレス1のリリース待ちであることが示されている。また同様に、リスト72の場合、アドレス0にスレッド1とスレッド2とがアクセスし、スレッド1がアドレス0をロックし、スレッド2はアドレス0のリリース待ちであることが示されている。図18のステップS3において、これらのリストをチェックすることにより、デッドロック等を抽出するためのリソースとスレッドとの関係を示す表を生成することができる。
図21は、図20のデータから抽出されたリソースとスレッドとの関係を示す表を示す図である。図21に示す表は、アドレス0に対してはスレッド1がロックしてスレッド2がリリース待ちであり、アドレス1に対してはスレッド0がロックしてスレッド1がリリース待ちであり、アドレス3に対してはスレッド2がロックしてスレッド0がリリース待ちであることが示されている。
図18に戻り、ステップS4でリソースの取り合いがあるか否かをチェックする。これは、図21に示すような表を縦方向にチェックして、各リソース(図21の例ではアドレス0乃至アドレス2)毎にロックとリソース待ちとの両方が存在するか否かをチェックすることで行われる。図21の例の場合、3つのスレッドが3つのリソースをロックして、互いにそれらのリソースのリリースを待っている状態となり、デッドロックの可能性があることが検出できる。このステップS4でのチェックによりリソースの取り合いが検出された場合には、ステップS5でデッドロックの可能性を指摘する警告を出力する。なお後述するように、ステップS4ではデッドロックだけでなくデータレース等についても同様に検出し、データレース等が検出された場合にはステップS5で警告を出力する。ステップS4でのチェックによりリソースの取り合いやデータレース等が検出されなければ、ステップS6に進み次の期間についての処理を実行する。
以下にデッドロックの抽出について更に詳細に説明する。図22は、複数のスレッド間でのデッドロックの一例を示す図である。図22では、実線の矢印がロック取得を示し、点線の矢印がリリース待ちを示す。スレッド0がリソース0をロックしリソース1のリリースを待ち、スレッド1がリソース1をロックしリソース2のリリースを待ち、スレッド2がリソース2をロックしリソース3のリリースを待ち、スレッド3がリソース3をロックしリソース0のリリースを待っている。この場合、何れのスレッドも、リリース待ちのリソースが開放されない限りロック中のリソースを開放しないとすると、処理が進まないデッドロック状態となる。
図23は、スレッドによるリソースロックとアクセス不可とを示す図である。図23において、スレッド0乃至スレッド4がそれぞれリソースRS1乃至RS5をロックし、またそれぞれリソースRS2、RS3、RS4、RS5、及びRS1へのアクセスを試みてアクセス不可となった状況が示されている。
図24は、図23の場合のメモリマップの様子を示す図である。スレッド0乃至スレッド4がそれぞれリソースRS1乃至RS5をロックし、またそれぞれリソースRS2、RS3、RS4、RS5、及びRS1へのアクセスを試みてアクセス不可となった状況が、メモリマップ上で示されている。
図25は、リソースとスレッドとの関係表の一例を示す図である。図25の例では、スレッド0がリソース0をロックしリソース4のリリースを待ち、スレッド1がリソース1をロックしリソース0のリリースを待ち、スレッド2がリソース2をロックしリソース3のリリースを待ち、スレッド3がリソース3をロックしリソース1のリリースを待ち、スレッド4がリソース4をロックしリソース2のリリースを待っている。この場合、表を縦方向にチェックして、各リソース毎にロックとリソース待ちとの両方が存在するか否かをチェックすると、全てのリソースについて取り合いが発生していることが分かる。従って、何れのスレッドも、リリース待ちのリソースが開放されない限りロック中のリソースを開放しないとすると、処理が進まないデッドロック状態となる。
図26は、リソースとスレッドとの関係表の別の一例を示す図である。図26の例では、スレッド0がリソース0をロックし、スレッド1がリソース4をロックし、スレッド2がリソース2をロックしリソース3のリリースを待ち、スレッド3がリソース3をロックしリソース1のリリースを待ち、スレッド4がリソース1をロックしリソース2のリリースを待っている。図27は、図26の表を縦方向にチェックした様子を示す図である。図27に示すように表を縦方向にチェックして、各リソース毎にロックとリソース待ちとの両方が存在するか否かをチェックすると、リソース1、リソース2、及びリソース3について取り合いが発生していることが分かる。従って、スレッド2、スレッド3、及びスレッド4が、リリース待ちのリソースが開放されない限りロック中のリソースを開放しないとすると、処理が進まないデッドロック状態となる。
図28は、データレースについて説明するための図である。図28においてはスレッド0がメモリ(又はキャッシュ)の変数yに1を代入し、その後変数yを変数xに代入している。またスレッド0とは独立に、スレッド1が変数yに2を代入し、その後変数yを変数xに代入している。このときメモリ(又はキャッシュ)においては、まずスレッド0(ID=0)により変数yが1に設定され、その後スレッド1(ID=1)により変数yが2に書き替えられている。このプログラムにおいて、スレッド0は1が代入された変数yを変数xに代入することを意図しているとすると、図28に示す例では変数yの多重アクセスにより意図した動作とは異なる動作となり、データレースが発生していることになる。
図29は、データレースの検出を説明するための図である。図29に示される例では、スレッド0がメモリ領域81とメモリ領域82とに対する読み出し動作(R)を実行し、スレッド1がメモリ領域82に対する書き込み動作(W)を実行し、スレッドNがメモリ領域81に対する書き込み動作(W)を実行している。なおメモリマップはスレッド毎に管理する。メモリへのアクセスは書き込みWと読み出しRとの何れかであり、同一のメモリ領域への多重アクセスの組み合わせとしては、WR、RW、WW、及びRRの4つの組み合わせがあり得る。このうちRRはデータ競合とはならず、データレースとしては検出されない。WR、RW、WWについてはデータ競合となるので、データレースとして検出されるべきである。具体的には、図18で説明したようにSW/HWモニタ15によりアクセスを抽出してアクセスリスト(図20に示すのと同様のアクセスリスト)を生成し、このリストからWR、RW、WWの組み合わせの多重アクセスを検出し、データレースの可能性有りとして警告する。
図30は、排他制御の検出について説明するための図である。図30に示される例では、スレッド0がメモリ領域92に対して読み出し動作(R)のためにロックしようとして待ち状態となってからその後ロック・アンロックし、更にメモリ領域91に対して読み出し動作(R)のためにロック・アンロックし、更にメモリ領域93に対して書き込み動作(R)のためにロック・アンロックしている。またスレッド1がメモリ領域92に対する書き込み動作(W)のためにロック・アンロックしている。またスレッドNがメモリ領域91に対して書き込み動作(W)のためにロックしようとして待ち状態となってからその後ロック・アンロックし、更にメモリ領域93に対して書き込み動作(W)のためにロックしようとして待ち状態となってからその後ロック・アンロックしている。なおメモリマップはスレッド毎に管理する。
メモリへのアクセスは書き込みWと読み出しRとの何れかであり、同一のメモリ領域への多重アクセスの組み合わせとしては、WR、RW、WW、及びRRの4つの組み合わせがあり得る。このうちRRはデータ競合とはならず、排他制御としては検出されない。WR、RW、WWについてはデータ競合となるので、排他制御として検出されるべきである。具体的には、図18で説明したようにSW/HWモニタ15によりアクセスを抽出してアクセスリスト(図20に示すのと同様のアクセスリスト)を生成し、このリストからWR、RW、WWの組み合わせの多重アクセスを検出し、排他制御の可能性有りとして警告する。この際、SW/HWモニタ15により、ロック関数呼び出しに応答してアクティブフラグをONに設定し、アンロック関数呼び出しに応答してアクティブフラグをOFFに設定する。これにより、アクティブフラグがONの間にスレッドがアクセスした領域は排他状態と認識される。
図31は、多重アクセスが発生した場合のメモリとキャッシュとの関係について説明するための図である。2つのアクティブなスレッドA及びスレッドBが同一のアドレス1にアクセスした状況において、メモリとキャッシュとの何れがアクセスされたかに応じて、4つの異なるパターンに場合分けできる。
図31(a)は、スレッドAがメモリにアクセスし、スレッドBもメモリにアクセスした場合である。この場合、メモリ間でリソース競合アクセスが発生しているのを検知できる。(b)は、スレッドAがCPU0のキャッシュ95にアクセスし、スレッドBがメモリにアクセスした場合である。この場合、CPU0のキャッシュ95内のデータとメモリのデータとに違いが発生していることを検知できる。(c)は、スレッドAがCPU0のキャッシュ95にアクセスし、スレッドBがCPU1のキャッシュ96にアクセスした場合である。この場合、CPU0/CPU1のキャッシュ内でアクセスがあり、実際のメモリにはアクセスが発生していないことを検知できる。(d)は、スレッドAがCPU0のキャッシュ95とメモリとにアクセスし、スレッドBがCPU1のキャッシュ96にアクセスした場合である。この場合、CPU0のキャッシュ95のデータとメモリのデータとは同一となる場合と異なる場合とがある。同一となるのは、CPU0がメモリとキャッシュとを正常に更新した場合である。異なるのは、CPU0がメモリにアクセスする前後でCPU1のアクセスがあった場合である。但し、CPU0のアクセスとCPU1のアクセスとが両方とも読み出しアクセスの場合は、上記パターンに関係なく多重アクセスによる問題は発生しない。
図32は、本発明によるSoCシミュレータ11を実行する装置の構成を示す図である。
図32に示されるように、本発明によるSoCシミュレータ11を実行する装置は、例えばパーソナルコンピュータやエンジニアリングワークステーション等のコンピュータにより実現される。図32の装置は、コンピュータ510と、コンピュータ510に接続されるディスプレイ装置520、通信装置523、及び入力装置よりなる。入力装置は、例えばキーボード521及びマウス522を含む。コンピュータ510は、CPU511、RAM512、ROM513、ハードディスク等の二次記憶装置514、可換媒体記憶装置515、及びインターフェース516を含む。
キーボード521及びマウス522は、ユーザとのインターフェースを提供するものであり、コンピュータ510を操作するための各種コマンドや要求されたデータに対するユーザ応答等が入力される。ディスプレイ装置520は、コンピュータ510で処理された結果等を表示すると共に、コンピュータ510を操作する際にユーザとの対話を可能にするために様々なデータ表示を行う。通信装置523は、遠隔地との通信を行なうためのものであり、例えばモデムやネットワークインターフェース等よりなる。
本発明によるSoCシミュレータ11及びソフトウェアデバッガ10は、コンピュータ510が実行可能なコンピュータプログラムとして提供される。このコンピュータプログラムは、可換媒体記憶装置515に装着可能な記憶媒体Mに記憶されており、記憶媒体Mから可換媒体記憶装置515を介して、RAM512或いは二次記憶装置514にロードされる。或いは、このコンピュータプログラムは、遠隔地にある記憶媒体(図示せず)に記憶されており、この記憶媒体から通信装置523及びインターフェース516を介して、RAM512或いは二次記憶装置514にロードされる。
キーボード521及び/又はマウス522を介してユーザからプログラム実行指示があると、CPU511は、記憶媒体M、遠隔地記憶媒体、或いは二次記憶装置514からプログラムをRAM512にロードする。CPU511は、RAM512の空き記憶空間をワークエリアとして使用して、RAM512にロードされたプログラムを実行し、適宜ユーザと対話しながら処理を進める。なおROM513は、コンピュータ510の基本動作を制御するための制御プログラムが格納されている。
上記コンピュータプログラムを実行することにより、コンピュータ510が、上記各実施例で説明されたようにソフトウェアデバッガ10及びSoCシミュレータ11を実行する。
以上、本発明を実施例に基づいて説明したが、本発明は上記実施例に限定されるものではなく、特許請求の範囲に記載の範囲内で様々な変形が可能である。例えば同一の領域へのアクセスとしてはメモリ又はキャッシュへのアクセスを主な例として説明したが、デッドロック等検出の対象となるのはメモリ又はキャッシュに限られず、CPUがアクセス可能なものであればよい。例えば図1に示す周辺ブロック22のI/Oリソース等へのアクセスも、検出対象のアクセスとしてよい。
本発明によるSoCシミュレータを使用する構成の一例を示す図である。 スレッド間の関係を示す階層化データ情報の一例を示す図である。 多重アクセスを示す多重アクセス情報を生成する処理を説明する図である。 メモリモニタにより生成された多重アクセス情報のデータ構造を示す図である。 図1の構成によりプログラムのデータレース及びデッドロック等を抽出する処理の全体の流れを示す図である。 図5のステップS5及びステップS6における処理を説明するための図である。 図5のステップS9及びステップS10における処理を説明するための図である。 メモリモニタによるデータ収集処理を説明するための図である。 データ比較処理を説明するための図である。 OS有の場合とOS無しの場合との違いについて説明するための図である。 プログラムIDを特定する方法について説明するための図である。 SW/HWモニタへの各種データの供給を示す図である。 スレッド生成命令によりスレッドが追加されたプログラム管理データを示す図である。 図13のプログラム管理データがデ―タ追加により更新された図である。 他のプログラムのスレッドによるアクセスにより多重アクセスが発生した後のプログラム管理データを示す図である。 スレッド削除命令によりスレッドが削除されたプログラム管理データを示す図である。 図15の状態からスレッドが更なるスレッド生成命令によりスレッドを生成した場合のプログラム管理データを示す図である。 多重アクセスにより問題が発生する可能性のある箇所を抽出し警告する処理の詳細を示すフローチャートである。 着目期間に関するデータ処理とプログラム実行シミュレーションの進行との関係を示す図である。 新規アクセスのリスト及び過去のアクセスのリストを示す図である。 図20のデータから抽出されたリソースとスレッドとの関係を示す表を示す図である。 複数のスレッド間でのデッドロックの一例を示す図である。 スレッドによるリソースロックとアクセス不可とを示す図である。 図23の場合のメモリマップの様子を示す図である。 リソースとスレッドとの関係表の一例を示す図である。 リソースとスレッドとの関係表の別の一例を示す図である。 図26の表を縦方向にチェックした様子を示す図である。 データレースについて説明するための図である。 データレースの検出を説明するための図である。 排他制御の検出について説明するための図である。 多重アクセスが発生した場合のメモリとキャッシュとの関係について説明するための図である。 本発明によるSoCシミュレータを実行する装置の構成を示す図である。
符号の説明
10 ソフトウェアデバッガ
11 SoCシミュレータ
12 SoCモデル
13 メモリモニタ
14 キャッシュモニタ
15 SW/HWモニタ
21 CPU
22 周辺ブロック
23 DRAM
24 メモリ
25 バス
510 コンピュータ
511 CPU
512 RAM
513 ROM
514 二次記憶装置
515 可換媒体記憶装置
516 インターフェース
520 ディスプレイ装置
521 キーボード
522 マウス
523 通信装置

Claims (9)

  1. ソフトウェアによるシミュレータ上にソフトウェアとして実現したハードウェアのモデルにより複数のスレッドからなるプログラムを実行し、
    該シミュレータのモニタ機能により該ハードウェアのモデル内のリソースに対する該複数のスレッドによるアクセスをモニタしてアクセスに関する情報を収集し、
    該モニタ機能により、該収集された情報から複数のスレッドによる同一のリソース領域に対する重複するアクセスを抽出し、
    該モニタ機能により、該重複するアクセスを警告するメッセージを生成する
    各段階を含むことを特徴とするコンピュータによるソフトウェアのシミュレーション方法。
  2. 該収集する情報は、アクセス元のCPUのID、該CPUのプログラムカウンタの値、アクセスアドレス、アクセスサイズ、Read/Writeの種別、及びアクセス発生時の該シミュレータの実行サイクル数であることを特徴とする請求項1記載のシミュレーション方法。
  3. 該重複するアクセスを抽出する段階は、該複数のスレッドによるアクセス間で、該アクセスアドレス及び該アクセスサイズを比較することにより、該重複するアクセスを抽出することを特徴とする請求項2記載のシミュレーション方法。
  4. 抽出された該重複するアクセスに関する情報を、スレッドID毎に纏めることにより、スレッド単位で整理し、
    該スレッド単位で整理された該重複するアクセスに関する情報に基づいてスレッド毎に各リソースのロック及びリリース待ちを示したスレッドとリソースとの関係を示す表を作成し、
    各リソース毎にロックとリソース待ちとの両方が存在するか否かをチェックすることにより、該表に基づいてデッドロックの可能性を検出する
    各段階を更に含み、該メッセージを生成する段階は該検出されたデッドロックの可能性について警告するメッセージを生成することを特徴とする請求項記載のシミュレーション方法。
  5. 抽出された該重複するアクセスに関する情報を、スレッドID毎に纏めることにより、スレッド単位で整理し、
    該スレッド単位で整理された該重複するアクセスに関する情報に基づいて、該重複するアクセスが読み出しアクセスであるか又は書き込みアクセスであるかに応じて書き込み&読み出し、読み出し&書き込み、書き込み&書き込みの組み合わせの多重アクセスを検出することにより、データレースの可能性を検出する
    段階を更に含み、該メッセージを生成する段階は該検出されたデータレースの可能性について警告するメッセージを生成することを特徴とする請求項記載のシミュレーション方法。
  6. 該メッセージを生成する段階は、該重複するアクセスに起因する問題の種別を特定する情報及び該重複するアクセスのアクセス先を特定する情報を含めて該メッセージを生成することを特徴とする請求項1記載のシミュレーション方法。
  7. 該ハードウェアのモデルの動作期間を複数の期間に分割し、該複数の期間のうちの所定の期間において生成された該アクセスに関する情報を該所定の期間において収集し、該収集された情報に基づいて該所定の期間の次の期間において該メッセージを生成することを特徴とする請求項1記載のシミュレーション方法。
  8. ソフトウェアによるシミュレータ上にソフトウェアとして実現したハードウェアのモデルにより複数のスレッドからなるプログラムを実行し、
    該シミュレータのモニタ機能により該ハードウェアのモデル内のリソースに対する該複数のスレッドによるアクセスをモニタしてアクセスに関する情報を収集し、
    該モニタ機能により、該収集された情報から複数のスレッドによる同一のリソース領域に対する重複するアクセスを抽出し、
    該モニタ機能により、該重複するアクセスを警告するメッセージを生成する
    各段階をコンピュータに実行させる指令から構成されるソフトウェアのシミュレーションのためのプログラム。
  9. ソフトウェアとして実現したハードウェアのモデルを含むシミュレータプログラムと該ハードウェアのシステムでの実行を想定した複数のスレッドからなるプログラムとを格納するメモリと、
    該メモリに格納された該シミュレータプログラムを実行することにより該メモリに格納された該複数のスレッドからなるプログラムを該ハードウェアのモデル上で実行する演算処理ユニットを含み、該演算処理ユニットは、
    該シミュレータのモニタ機能により該ハードウェアのモデル内のリソースに対する該複数のスレッドによるアクセスをモニタしてアクセスに関する情報を収集し、
    該モニタ機能により、該収集された情報から複数のスレッドによる同一のリソース領域に対する重複するアクセスを抽出し、
    該モニタ機能により、該重複するアクセスを警告するメッセージを生成する
    各段階を実行することを特徴とするソフトウェアのシミュレーション装置。
JP2007198001A 2007-07-30 2007-07-30 ソフトウェアのシミュレーション方法、ソフトウェアのシミュレーションのためのプログラム、及びソフトウェアのシミュレーション装置 Expired - Fee Related JP4888272B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2007198001A JP4888272B2 (ja) 2007-07-30 2007-07-30 ソフトウェアのシミュレーション方法、ソフトウェアのシミュレーションのためのプログラム、及びソフトウェアのシミュレーション装置
EP08158811A EP2037368A3 (en) 2007-07-30 2008-06-23 Simulation of program execution to detect problem such as deadlock
US12/213,871 US20090037888A1 (en) 2007-07-30 2008-06-25 Simulation of program execution to detect problem such as deadlock

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007198001A JP4888272B2 (ja) 2007-07-30 2007-07-30 ソフトウェアのシミュレーション方法、ソフトウェアのシミュレーションのためのプログラム、及びソフトウェアのシミュレーション装置

Publications (2)

Publication Number Publication Date
JP2009032197A JP2009032197A (ja) 2009-02-12
JP4888272B2 true JP4888272B2 (ja) 2012-02-29

Family

ID=40280741

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007198001A Expired - Fee Related JP4888272B2 (ja) 2007-07-30 2007-07-30 ソフトウェアのシミュレーション方法、ソフトウェアのシミュレーションのためのプログラム、及びソフトウェアのシミュレーション装置

Country Status (3)

Country Link
US (1) US20090037888A1 (ja)
EP (1) EP2037368A3 (ja)
JP (1) JP4888272B2 (ja)

Families Citing this family (44)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8887167B2 (en) * 2010-07-30 2014-11-11 International Business Machines Corporation High performance locks
DE102009050161A1 (de) * 2009-10-21 2011-04-28 Siemens Aktiengesellschaft Verfahren und Vorrichtung zum Testen eines Systems mit zumindest einer Mehrzahl von parallel ausführbaren Softwareeinheiten
US7962615B1 (en) 2010-01-07 2011-06-14 International Business Machines Corporation Multi-system deadlock reduction
US9262302B2 (en) * 2010-12-16 2016-02-16 International Business Machines Corporation Displaying values of variables in a first thread modified by another thread
US20120232880A1 (en) * 2011-03-13 2012-09-13 International Business Machines Corporation Performance assessment of a program model
CN102799517B (zh) * 2011-05-25 2015-03-11 中国科学院软件研究所 一种快速的循环扩展检测方法
JP2013196241A (ja) * 2012-03-19 2013-09-30 Fujitsu Ltd 情報処理装置およびログ取得方法
GB2500707B (en) * 2012-03-30 2014-09-17 Cognovo Ltd Multiprocessor system, apparatus and methods
US8885510B2 (en) 2012-10-09 2014-11-11 Netspeed Systems Heterogeneous channel capacities in an interconnect
US9009648B2 (en) * 2013-01-18 2015-04-14 Netspeed Systems Automatic deadlock detection and avoidance in a system interconnect by capturing internal dependencies of IP cores using high level specification
JP2015022484A (ja) * 2013-07-18 2015-02-02 スパンション エルエルシー プログラムの検査プログラム、検査装置、及び、検査方法
US9471726B2 (en) 2013-07-25 2016-10-18 Netspeed Systems System level simulation in network on chip architecture
US9473388B2 (en) 2013-08-07 2016-10-18 Netspeed Systems Supporting multicast in NOC interconnect
CN103729288B (zh) * 2013-11-01 2016-02-24 华中科技大学 一种嵌入式多核环境下应用程序的调试方法
CN105706063A (zh) * 2013-12-12 2016-06-22 英特尔公司 用于检测竞争条件的技术
US9699079B2 (en) 2013-12-30 2017-07-04 Netspeed Systems Streaming bridge design with host interfaces and network on chip (NoC) layers
US9473415B2 (en) 2014-02-20 2016-10-18 Netspeed Systems QoS in a system with end-to-end flow control and QoS aware buffer allocation
JP5936152B2 (ja) * 2014-05-17 2016-06-15 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation メモリアクセストレース方法
US9742630B2 (en) 2014-09-22 2017-08-22 Netspeed Systems Configurable router for a network on chip (NoC)
US9571341B1 (en) 2014-10-01 2017-02-14 Netspeed Systems Clock gating for system-on-chip elements
US9660942B2 (en) 2015-02-03 2017-05-23 Netspeed Systems Automatic buffer sizing for optimal network-on-chip design
US9444702B1 (en) 2015-02-06 2016-09-13 Netspeed Systems System and method for visualization of NoC performance based on simulation output
US9928204B2 (en) 2015-02-12 2018-03-27 Netspeed Systems, Inc. Transaction expansion for NoC simulation and NoC design
US9568970B1 (en) 2015-02-12 2017-02-14 Netspeed Systems, Inc. Hardware and software enabled implementation of power profile management instructions in system on chip
US10050843B2 (en) 2015-02-18 2018-08-14 Netspeed Systems Generation of network-on-chip layout based on user specified topological constraints
US10348563B2 (en) 2015-02-18 2019-07-09 Netspeed Systems, Inc. System-on-chip (SoC) optimization through transformation and generation of a network-on-chip (NoC) topology
US9864728B2 (en) 2015-05-29 2018-01-09 Netspeed Systems, Inc. Automatic generation of physically aware aggregation/distribution networks
US9825809B2 (en) 2015-05-29 2017-11-21 Netspeed Systems Dynamically configuring store-and-forward channels and cut-through channels in a network-on-chip
US10218580B2 (en) 2015-06-18 2019-02-26 Netspeed Systems Generating physically aware network-on-chip design from a physical system-on-chip specification
US10452124B2 (en) 2016-09-12 2019-10-22 Netspeed Systems, Inc. Systems and methods for facilitating low power on a network-on-chip
US20180159786A1 (en) 2016-12-02 2018-06-07 Netspeed Systems, Inc. Interface virtualization and fast path for network on chip
US10313269B2 (en) 2016-12-26 2019-06-04 Netspeed Systems, Inc. System and method for network on chip construction through machine learning
US10063496B2 (en) 2017-01-10 2018-08-28 Netspeed Systems Inc. Buffer sizing of a NoC through machine learning
US10084725B2 (en) 2017-01-11 2018-09-25 Netspeed Systems, Inc. Extracting features from a NoC for machine learning construction
US10469337B2 (en) 2017-02-01 2019-11-05 Netspeed Systems, Inc. Cost management against requirements for the generation of a NoC
US10298485B2 (en) 2017-02-06 2019-05-21 Netspeed Systems, Inc. Systems and methods for NoC construction
CN107247630A (zh) * 2017-06-05 2017-10-13 努比亚技术有限公司 线程检测方法、终端及计算机可读存储介质
US10896476B2 (en) 2018-02-22 2021-01-19 Netspeed Systems, Inc. Repository of integration description of hardware intellectual property for NoC construction and SoC integration
US10983910B2 (en) 2018-02-22 2021-04-20 Netspeed Systems, Inc. Bandwidth weighting mechanism based network-on-chip (NoC) configuration
US10547514B2 (en) 2018-02-22 2020-01-28 Netspeed Systems, Inc. Automatic crossbar generation and router connections for network-on-chip (NOC) topology generation
US11144457B2 (en) 2018-02-22 2021-10-12 Netspeed Systems, Inc. Enhanced page locality in network-on-chip (NoC) architectures
US11023377B2 (en) 2018-02-23 2021-06-01 Netspeed Systems, Inc. Application mapping on hardened network-on-chip (NoC) of field-programmable gate array (FPGA)
US11176302B2 (en) 2018-02-23 2021-11-16 Netspeed Systems, Inc. System on chip (SoC) builder
CN108959098B (zh) * 2018-07-20 2021-11-05 大连理工大学 一种针对分布式系统程序死锁缺陷的测试系统及方法

Family Cites Families (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05134886A (ja) * 1990-11-30 1993-06-01 Fujitsu Ltd デツドロツク検出方式
JPH07191882A (ja) * 1993-12-27 1995-07-28 Nec Corp メモリアクセス頻度測定方式
JPH0816430A (ja) * 1994-06-27 1996-01-19 Mitsubishi Electric Corp 並列プログラムトレース装置
US5764976A (en) * 1995-02-06 1998-06-09 International Business Machines Corporation Method and system of deadlock detection in a data processing system having transactions with multiple processes capable of resource locking
US5675804A (en) * 1995-08-31 1997-10-07 International Business Machines Corporation System and method for enabling a compiled computer program to invoke an interpretive computer program
JPH09101945A (ja) * 1995-10-09 1997-04-15 Nippon Telegr & Teleph Corp <Ntt> シミュレーション装置
US6009269A (en) * 1997-03-10 1999-12-28 Digital Equipment Corporation Detecting concurrency errors in multi-threaded programs
US6622155B1 (en) * 1998-11-24 2003-09-16 Sun Microsystems, Inc. Distributed monitor concurrency control
US6593940B1 (en) * 1998-12-23 2003-07-15 Intel Corporation Method for finding errors in multithreaded applications
JP2000222228A (ja) * 1999-01-29 2000-08-11 Hitachi Ltd リソース占有順序の検証によるデッドロック防止方法
US6405326B1 (en) * 1999-06-08 2002-06-11 International Business Machines Corporation Limited Timing related bug detector method for detecting data races
US6751583B1 (en) * 1999-10-29 2004-06-15 Vast Systems Technology Corporation Hardware and software co-simulation including simulating a target processor using binary translation
US6597907B1 (en) * 2000-05-05 2003-07-22 Ericsson Inc. Detection of a deadlocked resource condition in a pool of shared resources
US20020124085A1 (en) * 2000-12-28 2002-09-05 Fujitsu Limited Method of simulating operation of logical unit, and computer-readable recording medium retaining program for simulating operation of logical unit
JP4529063B2 (ja) * 2001-03-30 2010-08-25 ルネサスエレクトロニクス株式会社 システムシミュレータ、シミュレーション方法及びシミュレーションプログラム
GB0118294D0 (en) * 2001-07-27 2001-09-19 Ibm Method and system for deadlock detection and avoidance
US7516446B2 (en) * 2002-06-25 2009-04-07 International Business Machines Corporation Method and apparatus for efficient and precise datarace detection for multithreaded object-oriented programs
US7093262B2 (en) * 2002-07-30 2006-08-15 Intel Corporation Detecting deadlocks in multithreaded programs
US7278057B2 (en) * 2003-07-31 2007-10-02 International Business Machines Corporation Automated hang detection in Java thread dumps
JP2005122560A (ja) * 2003-10-17 2005-05-12 Fujitsu Ltd デッドロック事前検出プログラム
US7549150B2 (en) * 2004-03-24 2009-06-16 Microsoft Corporation Method and system for detecting potential races in multithreaded programs
US7496918B1 (en) * 2004-06-01 2009-02-24 Sun Microsystems, Inc. System and methods for deadlock detection
US7366956B2 (en) * 2004-06-16 2008-04-29 Hewlett-Packard Development Company, L.P. Detecting data races in multithreaded computer programs
US7657894B2 (en) * 2004-09-29 2010-02-02 Intel Corporation Detecting lock acquisition hierarchy violations in multithreaded programs
US7774783B2 (en) * 2004-12-23 2010-08-10 Microsoft Corporation Method and apparatus for detecting deadlocks
US7620852B2 (en) * 2005-03-02 2009-11-17 Microsoft Corporation Systems and methods of reporting multiple threads involved in a potential data race
JP4717492B2 (ja) * 2005-04-12 2011-07-06 富士通株式会社 マルチコアモデルシミュレータ
US7958512B2 (en) * 2005-10-31 2011-06-07 Microsoft Corporation Instrumentation to find the thread or process responsible for an application failure
US8266605B2 (en) * 2006-02-22 2012-09-11 Wind River Systems, Inc. Method and system for optimizing performance based on cache analysis
US7844862B1 (en) * 2006-03-23 2010-11-30 Azul Systems, Inc. Detecting software race conditions
US7836435B2 (en) * 2006-03-31 2010-11-16 Intel Corporation Checking for memory access collisions in a multi-processor architecture
US7673181B1 (en) * 2006-06-07 2010-03-02 Replay Solutions, Inc. Detecting race conditions in computer programs
US8229726B1 (en) * 2006-10-05 2012-07-24 Oracle America, Inc. System for application level analysis of hardware simulations
US7992146B2 (en) * 2006-11-22 2011-08-02 International Business Machines Corporation Method for detecting race conditions involving heap memory access
US8234624B2 (en) * 2007-01-25 2012-07-31 International Business Machines Corporation System and method for developing embedded software in-situ
US7861118B2 (en) * 2007-03-30 2010-12-28 Microsoft Corporation Machine instruction level race condition detection
US8621468B2 (en) * 2007-04-26 2013-12-31 Microsoft Corporation Multi core optimizations on a binary using static and run time analysis

Also Published As

Publication number Publication date
EP2037368A2 (en) 2009-03-18
US20090037888A1 (en) 2009-02-05
EP2037368A3 (en) 2010-04-28
JP2009032197A (ja) 2009-02-12

Similar Documents

Publication Publication Date Title
JP4888272B2 (ja) ソフトウェアのシミュレーション方法、ソフトウェアのシミュレーションのためのプログラム、及びソフトウェアのシミュレーション装置
Xu et al. A serializability violation detector for shared-memory server programs
Lucia et al. Atom-aid: Detecting and surviving atomicity violations
Wulf et al. Overview of the Hydra operating system development
JP5329983B2 (ja) デバッグ支援装置
US8725485B2 (en) Simulation method and simulation apparatus
US20050125776A1 (en) Determining the possibility of adverse effects arising from a code change
KR20070080589A (ko) 메모리 속성들을 사용하기 위한 기술
Jalbert et al. {RADBench}: A concurrency bug benchmark suite
CN101403979A (zh) 一种自旋锁的加锁方法及计算机系统
US8392891B2 (en) Technique for finding relaxed memory model vulnerabilities
Hedde et al. A non intrusive simulation-based trace system to analyse multiprocessor systems-on-chip software
Zhang et al. AI: a lightweight system for tolerating concurrency bugs
Atachiants et al. Parallel performance problems on shared-memory multicore systems: taxonomy and observation
Zhou et al. Deadlock prediction via generalized dependency
JP2007207120A (ja) システム検証装置及びその検証方法
Yu et al. Symbolic consistency checking of OpenMP parallel programs
Wheeler et al. Visualizing massively multithreaded applications with threadscope
Desnoyers et al. Multi-core systems modeling for formal verification of parallel algorithms
Yen et al. Overview of PowerPC 620 multiprocessor verification strategy
Saha et al. A simulation-based approach to architectural verification of multiprocessor systems
Floridia et al. Parallel software-based self-test suite for multi-core system-on-chip: Migration from single-core to multi-core automotive microcontrollers
JP2007052783A (ja) データ処理装置のシミュレーション
JP2011203803A (ja) デバッグ支援装置及びデバッグ支援用プログラム
Murillo et al. Deterministic event-based control of Virtual Platforms for MPSoC software debugging

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100430

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20110722

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110823

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111024

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

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20111128

R150 Certificate of patent or registration of utility model

Ref document number: 4888272

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20141222

Year of fee payment: 3

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees