JPH096646A - プログラムシミュレーション装置 - Google Patents

プログラムシミュレーション装置

Info

Publication number
JPH096646A
JPH096646A JP7171432A JP17143295A JPH096646A JP H096646 A JPH096646 A JP H096646A JP 7171432 A JP7171432 A JP 7171432A JP 17143295 A JP17143295 A JP 17143295A JP H096646 A JPH096646 A JP H096646A
Authority
JP
Japan
Prior art keywords
subroutine
simulation
target computer
program
instruction
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.)
Pending
Application number
JP7171432A
Other languages
English (en)
Inventor
Yoshitaka Nishiyama
由高 西山
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.)
Oki Electric Industry Co Ltd
Original Assignee
Oki Electric Industry Co 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 Oki Electric Industry Co Ltd filed Critical Oki Electric Industry Co Ltd
Priority to JP7171432A priority Critical patent/JPH096646A/ja
Publication of JPH096646A publication Critical patent/JPH096646A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

(57)【要約】 【目的】 シミュレータを用いた性能評価やデバッグの
作業効率を大幅に向上させる。 【構成】 ターゲット計算機のプログラムを、シミュレ
ーション前にサブルーチンの単位でホスト計算機で直接
実行可能な命令に翻訳しておく。このホスト翻訳サブル
ーチンを直接実行すれば高速なシミュレーションができ
る。ホスト翻訳サブルーチン82による高速なシミュレ
ーション手段を、サブルーチン単位に使い分け可能にす
ることにより、クロック単位の精度を必要としない部分
は基本ブロックシミュレーション手段85により高速に
実行して、クロック単位の正確なシミュレーションある
いはユーザとの対話による実行が必要な部分に素早く到
達する。それ以降はクロックシミュレーション手段86
によりクロック単位の正確なシミュレーションや対話的
実行を行なう。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、ホスト計算機上でター
ゲット計算機の命令を、クロック単位の正確さと高速性
をあわせもってシミュレーションするための、プログラ
ムシミュレーション装置に関する。
【0002】
【従来の技術】各種の業務に使用されるコンピュータ用
のプログラムを開発する場合に、そのプログラムのデバ
ッグ等の作業と共に、そのプログラムの実際の動作時間
やメモリの使用状態等を詳細にチェックする作業が要求
される場合がある。プログラム開発は、実際にそのプロ
グラムが使われるターゲット計算機とは別の計算機で行
われることが多い。この別の計算機をホスト計算機と呼
び、上記チェック作業はホスト計算機をシミュレータと
して実行される。従来、ホスト計算機によるシミュレー
タでは、ターゲット計算機とホスト計算機の機械語命令
が異なる場合、ターゲット計算機の機械語命令やデータ
を格納するメモリ、レジスタ、キャッシュ等のターゲッ
ト計算機の資源を、ホスト計算機のメモリ上に割り付
け、1命令毎にメモリからターゲット計算機の命令を読
み出し、その命令を解釈実行し、メモリやレジスタの内
容を更新していた。また、メモリやレジスタの更新だけ
でなく、キャッシュのヒット率、メモリのウエイト数、
バスの競合等を含み、1クロック単位で変化するターゲ
ット計算機の動作状態をチェックできるように、クロッ
ク単位でシミュレーションすることも行われていた。以
下ではこのようなシミュレーション方法を解釈実行方式
と呼ぶことにする。
【0003】一方、クロック単位の正確さやキャッシュ
のヒット率、メモリアクセス回数等の情報までは必要と
しないシミュレーションでは、ターゲット計算機のプロ
グラム全体あるいはサブルーチンの基本ブロックのみ
を、それと等価な機能を果たすホスト計算機の命令列に
変換し、ホスト計算機で直接実行するすることにより、
高速なシミュレーションを実現する方法もある。このよ
うなシミュレーション方法を翻訳実行方式と呼ぶことに
する。このような従来のシミュレーション方法について
は、例えば特開平6−95921号公報に紹介されてい
る。
【0004】
【発明が解決しようとする課題】ところで、上記のよう
な従来のプログラムシミュレーション装置には次のよう
な解決すべき課題があった。ホスト計算機上でターゲッ
ト計算機用のプログラムをクロック単位で正確にシミュ
レートする目的は、ターゲット計算機用のプログラム全
体あるいはその一部を実行するのに要する時間(クロッ
ク数)、実行命令数、キャッシュのヒット率、メモリへ
のアクセス回数、バスの利用率等の値を正確に計測し
て、ターゲット計算機の性能を評価したり、動作クロッ
ク周波数やキャッシュ容量等のターゲット計算機の構成
を決定したり、プログラムをチューニングすることにあ
る。このような目的の場合、シミュレータでは、メモリ
やレジスタ内容の更新だけでなく、キャッシュの動作や
メモリのウエイトをクロック単位で正確にシミュレーシ
ョンする必要がある。この場合に、翻訳実行方式による
高速なシミュレーションは利用できないため、解釈実行
方式を用いる必要がある。
【0005】しかし、従来の解釈実行方式では、1クロ
ック毎に、ターゲット計算機の命令の読み出し、解釈、
実行、レジスタの更新、キャッシュの更新、メモリのア
クセスウエイトの計算等の多くの処理を行なうため、そ
の実行には多くの時間を要した。具体的には、ターゲッ
ト計算機による実際の動作速度と比較した場合に、数百
分の1以下に低下してしまうこともある。しかも、クロ
ック単位でのシミュレーション対象がプログラムの一部
に過ぎない場合(例えばクリティカルパスになる部分や
デバッグ対象の部分)であっても、プログラム全体を最
初から解釈実行する必要があるため、プログラムの書き
換えと再実行を頻繁に繰り返す場合には、シミュレーシ
ョンの待ち時間が多くなり、作業効率を著しく阻害して
いた。また、従来の翻訳実行方式では、ターゲット計算
機の全てのレジスタをメモリに割り付け、ターゲット計
算機の命令を1つ実行する度にそのレジスタの読み書き
を行うため、ホスト計算機の命令に翻訳されたプログラ
ムはメモリのアクセスが多くなり、十分に高速なシミュ
レーションが行なえない原因になっていた。
【0006】一方、ターゲット計算機のプログラムの実
行あるいはデバッグのみを目的とする場合、翻訳実行方
式を用いれば、解釈実行方式に比べて高速なシミュレー
ションが行なえる。しかし、この翻訳実行方式では、タ
ーゲット計算機の機械語命令列を等価な機能をもったホ
スト計算機の命令列に翻訳するだけであるため、レジス
タ内容やキャッシュの状態まで再現したクロック単位の
正確なシミュレーションは不可能である。そこで、従来
のシミュレーション装置では、クロッ単位の正確なシミ
ュレーションを行うシミュレータと、命令の実行のみを
目的とするシミュレータとを、その用途に応じて使い分
けていた。
【0007】
【課題を解決するための手段】本発明は以上の点を解決
するため次の構成を採用する。本発明のプログラムシミ
ュレーション装置は、ターゲット計算機のプログラムを
ホスト計算機上でシミュレートするものであって、ター
ゲット計算機のプログラムによる動作を1命令ずつクロ
ック単位で正確にシミュレーションするクロックシミュ
レーション手段と、ターゲット計算機のプログラムを、
分岐命令を含まないで連続実行される基本ブロック単位
に分割し、その基本ブロック内の命令列が実行された結
果を、シミュレーション結果解析に有用な統計量とター
ゲット計算機の資源の内容とに反映させる基本ブロック
シミュレーション手段とを備える。さらに、ターゲット
計算機のプログラムをサブルーチン単位で、ホスト計算
機で直接実行可能な命令列であるホスト翻訳サブルーチ
ンに変換すると同時に、このホスト翻訳サブルーチンに
含まれる基本ブロック内の命令列が実行されたとき、サ
ブルーチン終了時に統計量と資源とにその結果を反映さ
せるための命令列を生成するサブルーチン翻訳手段と、
サブルーチン翻訳手段の生成したホスト翻訳サブルーチ
ンを実行させるか、クロックシミュレーション手段によ
りターゲット計算機のシミュレーションを一命令ずつ実
行するかを、サブルーチン単位のプログラムシミュレー
ションのつど選択するサブルーチン選択手段とを備え
る。
【0008】また、本発明の別のプログラムシミュレー
ション装置は、ターゲット計算機のプログラムをホスト
計算機上でシミュレートするものであって、ターゲット
計算機のプログラムを、分岐命令を含まないで連続実行
される基本ブロック単位に分割し、その基本ブロック内
の命令列が実行された結果を、シミュレーション結果解
析に有用な統計量とターゲット計算機の資源の内容とに
反映させる基本ブロックシミュレーション手段を備え、
この基本ブロックシミュレーション手段は、プログラム
シミュレーションの実行中、基本ブロックの境界を通過
する度に、ホスト計算機のメモリ上に割りつけられたタ
ーゲット計算機のレジスタやキャッシュに該当する資源
と、実行命令数を含む統計量に、その基本ブロックの実
行結果を反映する。
【0009】これらの装置のサブルーチン翻訳手段は、
ターゲット計算機のサブルーチン間でデータの受渡しに
使用されるレジスタやスタックポインタ等の少数のレジ
スタのみをホスト計算機のメモリ上に割りつけ、その他
のレジスタを、ホスト計算機の任意のレジスタに直接割
りつけることが好ましい。
【0010】ホスト翻訳サブルーチンは、また、基本ブ
ロックの命令列を実行した際のメモリアクセスに関する
情報を、そのアクセスの順番どおり記憶しておき、基本
ブロックの命令列実行終了時に、基本ブロックシミュレ
ーション手段を呼び出して、ターゲット計算機のレジス
タやキャッシュに該当する資源と、実行命令数を含む統
計量に、その基本ブロックの実行結果を反映させること
が好ましい。
【0011】資源は、ターゲット計算機のレジスタとメ
モリとキヤッシュとを含み、統計量は、命令の実行回数
と、キャッシュのヒット率と、メモリの読み書きの回数
を含むことが好ましい。この他に、ターゲット計算機の
命令から成るサブルーチン中に現われる全レジスタと各
基本ブロックの入口と出口で生きているレジスタを調べ
るレジスタ生存期間解析手段と、サブルーチン翻訳手段
を構成する各ブロックが抽出した情報に基づいて、ター
ゲット計算機の命令から成るサブルーチンから、メモ
リ、レジスタおよびキャッシュの内容まで含めてターゲ
ット計算機の動作をシミュレートするための、ホスト翻
訳サブルーチンのソースプログラムを生成するサブルー
チン生成手段を設けてもよい。
【0012】
【作用】ターゲット計算機のプログラムは、シミュレー
ション前にサブルーチンの単位でホスト計算機で直接実
行可能な命令に翻訳しておく。以下ではこれをホスト翻
訳サブルーチンと呼ぶ。このホスト翻訳サブルーチンを
直接実行すれば高速なシミュレーションができる。クロ
ックシミュレーション手段は、シミュレーション実行時
に、ターゲット計算機の命令から成るサブルーチン(以
下ではこれをターゲットサブルーチンと呼ぶ。)を一命
令ずつ解釈実行しながら、クロック単位の正確なシミュ
レーションを行なう。ホスト翻訳サブルーチンを用いた
高速なシミュレーション手段を、サブルーチン単位に使
い分け可能にすることにより、クロック単位の精度を必
要としない部分は、基本ブロックシミュレーション手段
が、ホスト翻訳サブルーチンを用いて高速に実行して、
クロック単位の正確なシミュレーションあるいはユーザ
との対話による実行が必要な部分に素早く到達する。そ
れ以降はクロックシミュレーション手段によりクロック
単位の正確なシミュレーションや対話的実行を行なう。
これにより、シミュレータを用いた性能評価やデバッグ
の作業効率を大幅に向上させる。
【0013】ターゲットサブルーチンをホスト翻訳サブ
ルーチンに変換する際に、ターゲットサブルーチンの命
令と等価な機能を持ったホスト計算機の命令を生成し
て、ターゲット計算機のレジスタとメモリの内容を更新
できるようにするだけでなく、実行命令列とメモリアク
セスの情報に基づいてキャッシュの内容を更新する命令
も生成しておく。これにより、サブルーチン呼び出しの
区切り目で、ホスト翻訳サブルーチンの直接実行からク
ロックシミュレーション手段による解釈実行に移行した
場合にも、クロックシミュレーション手段が資源の内容
も含めた正確なシミュレーションを続行できる。また、
クロックシミュレーション手段を一切使用しないで、ホ
スト翻訳サブルーチンのみを実行した場合でも、基本ブ
ロックシミュレーション手段により、実行命令数、メモ
リアクセス回数、キャッシュのヒット率等の性能評価の
ための統計量を得られる。
【0014】ターゲット計算機のプログラムをホスト計
算機のプログラムに変換する際に、サブルーチン単位で
翻訳をし、基本ブロックに分割する。基本ブロックは途
中に分岐命令やラベル等を含まないで一括して連続実行
される命令列である。ターゲット計算機上でサブルーチ
ン呼び出しを行なう際のレジスタの使用法や引数の受け
渡し方についての規約(以下ではサブルーチン呼び出し
規約と呼ぶ)等を利用して、ターゲット計算機が持つレ
ジスタを、ホスト計算機のメモリ上に割り付ける必要の
ある少数のレジスタ(サブルーチンの引数や返り値、戻
り番地、スタックポインタ等に利用されるレジスタ)
と、そうでないもの(ホスト計算機のレジスタに直接割
り付けることが可能なレジスタ)とに区別して、ホスト
計算機のプログラムに変換する。また、基本ブロックの
境界を通過する度にその命令列実行の影響を資源や統計
量に反映させる。こうして、プログラムシミュレーショ
ンの高速化を図る。
【0015】
【実施例】以下、本発明を図の実施例を用いて詳細に説
明する。 〈構成〉図1は、本発明によるプログラムシミュレーシ
ョン装置の実施例を示すブロック図である。この装置
は、ターゲット計算機用ソースプログラム1をターゲッ
ト計算機用コンパイラ2でコンパイル、リンクして得ら
れるターゲット計算機用実行プログラム3を読み込んで
処理するためのサブルーチン翻訳手段4を備えている。
更にこのサブルーチン翻訳手段4から出力されるホスト
計算機用ソースプログラム5をホスト計算機用コンパイ
ラ6でコンパイルして得られるホスト計算機用オブジェ
クトプログラム7とターゲット計算機用実行プログラム
3とを読み込んで処理するシミュレーション手段8を有
している。
【0016】図2は、図1に示したサブルーチン翻訳手
段4の具体的なブロック図である。サブルーチン翻訳手
段4は、ターゲット計算機用実行プログラム3からサブ
ルーチン単位で命令列(ターゲットサブルーチン)を抽
出するサブルーチン抽出手段41と、ターゲットサブル
ーチンの命令列を基本ブロックに分割する基本ブロック
抽出手段42と、基本ブロック命令列からメモリの読み
書きを行なう命令を抽出するメモリアクセス命令検出手
段44と、基本ブロックの最後の命令が条件分岐命令の
場合に、その条件分岐命令が用いる条件コードを設定し
た命令を検出する条件コード設定命令検出手段45とを
備えている。更に、ターゲットサブルーチン中に現われ
る全レジスタと各基本ブロックの入口と出口で生きてい
るレジスタを調べるレジスタ生存期間解析手段43と、
サブルーチン翻訳手段を構成する各ブロックが抽出した
情報に基づいて、ターゲットサブルーチンからメモリ、
レジスタおよびキャッシュの内容まで含めてターゲット
計算機の動作をシミュレートするための、ホスト翻訳サ
ブルーチンのソースプログラム5を生成するサブルーチ
ン生成手段46を有する。これにより、サブルーチン翻
訳手段4はターゲット計算機用実行プログラム3をサブ
ルーチン毎にそれと等価なターゲット計算機用ソースプ
ログラム5に変換する。
【0017】図1に示したシミュレーション手段8は、
ターゲット計算機用実行プログラム3(命令領域とデー
タ領域の両方)をホスト計算機のメモリ上に割り付けた
ターゲット計算機用メモリ84に読み込むとともに、タ
ーゲット計算機用オブジェクトプログラム7をシミュレ
ーション手段8にリンクするためのプログラムロードリ
ンク手段81とを備える。また、ターゲット計算機用メ
モリ84に読み込んだターゲット計算機用実行プログラ
ム3の命令を1クロックの単位で逐次シミュレーション
し、その結果をターゲット計算機用のレジスタやキャッ
シュ等のターゲット計算機の資源およびクロック数、実
行命令数、メモリの読み書きの回数等の統計量(資源・
統計量87)に反映するクロックシミュレーション手段
86を備える。更に、ホスト翻訳サブルーチン82を実
行した際に、基本ブロックの境界を通過する度に呼び出
され、基本ブロック内の命令列を実行した場合の影響を
資源・統計量87(クロック数を除く)に反映する基本
ブロックシミュレーション手段85と、ユーザ9からの
入力コマンドに基づいて、クロックシミュレーション手
段86の制御、資源・統計量87やターゲット計算機用
メモリ84の内容の表示/変更、ブレークポイントの設
定/解除等の処理を行なうコマンド処理手段88を備え
る。これにより、シミュレーション手段8は、ターゲッ
ト計算機用実行プログラム3のターゲットサブルーチン
を一命令毎に解釈しながらクロック単位の正確なシミュ
レーションを行うか、ホスト計算機用オブジェクトプロ
グラム7のホスト翻訳サブルーチン82を呼び出すこと
によって、高速なシミュレーションを行うかを選択でき
る。この選択はサブルーチン選択テーブル83を参照す
ることによって行われる。
【0018】〈動作〉次に、以上のような構成のプログ
ラムシミュレーション装置について、その動作を詳細に
説明する。また、便宜上、プログラミング言語としてC
言語を用いて説明する。ただし、これはC言語に限定さ
れるのもではなく、アセンブリ言語や他の高級言語(例
えばC++やPASCAL等)を用いても同じである。
【0019】〈サブルーチン翻訳手段〉図2に示すサブ
ルーチン抽出手段41は、ターゲット計算機用実行プロ
グラム3に、ターゲット計算機用コンパイラ2が埋め込
んだサブルーチンの開始番地と終了番地に関するシンボ
ル情報を読み出し、そのシンボル情報に基づいて読み出
したターゲット計算機の命令列(データ)と命令列の開
始番地および終了番地を、図2に示す基本ブロック抽出
手段42に渡す。また、サブルーチン抽出手段41は、
ターゲット計算機用実行プログラム3の中で各サブルー
チンを一意に区別するためのサブルーチン番号を割り付
け、その番号をインデックスとするサブルーチン選択テ
ーブルに、各サブルーチンに関する情報を記録する。
【0020】図3には、プログラムの構成説明図を示
す。一般のプログラム11は、この図に示すように、い
くつかのサブルーチン12を組み合わせて構成される。
また、各サブルーチン12はこの図に示すようにいくつ
かの基本ブロック13により構成される。サブルーチン
12は、プログラム11を実行する上で、一定のひとま
とまりの処理を実行する部分である。この中に存在する
基本ブロック13は先に説明したように、分岐等を持た
ず一括して連続処理される命令列である。ただし、基本
ブロックの終わりが分岐命令であっても良い。このよう
な基本ブロックを本発明に採用するのは、基本ブロック
自身が一定の処理を実行する場合に、基本ブロックの処
理開始時の資源や統計量の状態と、処理終了後の資源や
統計量の状態を管理すれば、その途中の段階における資
源や統計量の内容は無視してもよく、前後の別の基本ブ
ロック等の処理に全く影響を与えないからである。即
ち、見かけ上、基本ブロックの境目では常に、正確に資
源や統計量の内容が実際と一致する。従って、基本ブロ
ックの境目やサブルーチンの境目で1クロックずつのシ
ミュレーションに移っても、最初から1クロックずつの
シミュレーションを実行した場合と同様の資源の内容や
統計の値を観察できる。こうして、デバッグやその他の
解析の対象となる部分へ高速で移動し、そのポイントの
部分を1クロックずつ詳細に検討することが可能にな
る。
【0021】図4は、サブルーチン選択テーブルの一例
を示す内容の説明図である。サブルーチン選択テーブル
83の各要素は、ターゲットサブルーチンの開始アドレ
ス、それに対応するホスト翻訳サブルーチンの開始アド
レス、およびどちらのサブルーチンを用いてシミュレー
ションを行なうかを指定する選択フラグである。これに
より、サブルーチン毎に、ターゲットサブルーチンを1
クロックずつシミュレーションするか、ホスト翻訳サブ
ルーチンをシミュレーション(直接実行)するか自由に
切り換えることができる。図2の基本ブロック抽出手段
42は、ターゲットサブルーチンの命令列を先頭から順
番に解読し、無条件分岐命令、条件分岐命令、サブルー
チン呼び出し命令およびリターン命令(以下ではこれら
の命令を総称して分岐命令と呼ぶ)のアドレスを記録し
ていく。また、無条件分岐命令と条件分岐命令を解読し
た際に、その分岐先のアドレス(サブルーチン内部)も
記録しておく。各基本ブロックは、ターゲットサブルー
チンの命令列を分岐命令のアドレスおよびその分岐先ア
ドレスを境界として分割することにより得られる(分岐
命令は基本ブロックの最後の命令となる)。
【0022】図5は、ターゲット計算機用のC言語によ
るサブルーチンfunc0() の例である。以下の説明はこの
サブルーチンを例として用いる(C言語では関数という
呼び方を用いるが、以下の説明ではサブルーチンと呼ぶ
ことにする)。行L1〜行L6では、この関数func
0の引数と内部で使用する変数を定義している。。そし
て、行L7,L8,L9では、パラメータiが“0”か
ら順に1ずつ増加し、nより小さい範囲で行L7に書か
れた演算(配列a[]のi番目の要素と配列b[]のi
番目の要素の積をvalに足し込む)を行う繰り返し処
理を設定している。こうして得られた演算結果valは
関数func1に引数として渡され、関数func1の
返り値に1を加えた結果がこの関数func0の返り値
になる。
【0023】図6には、ターゲット計算機の汎用レジス
タとその使用法(以下ではサブルーチン呼び出し規約と
呼ぶ)およびいくつかの命令の例を示す。この例では、
ターゲット計算機は%r0 〜%r31の汎用レジスタを持ち、
サブルーチンの引数の最初の4つは、汎用レジスタの %
r8〜%r11を用いて渡し、それ以外はスタック渡しするも
のとする。また、返り値は%r12と%r13を用いて返し、サ
ブルーチン呼び出し命令では %r0に返り番地を退避する
ものとする。また、(b)に示す命令は図7を用いて説
明する機械語命令のそれぞれの意味を表している。
【0024】図7は、図5のサブルーチン(関数) fun
c0()をターゲット計算機用コンパイラ2でコンパイル、
リンクして得られる機械語命令列の例を示している。図
7の左側に示した16進数0x000010??は各命令のアドレ
スであり、四角で囲まれた命令列は基本ブロック抽出手
段42で得られる基本ブロックを示す。この例では、サ
ブルーチンfunc0() は4つの基本ブロック(基本ブロッ
ク0〜3)から成る。図8は基本ブロックテーブルの例
を示している。基本ブロック抽出手段42は、各基本ブ
ロックをターゲット計算機用実行プログラム3の中で一
意に区別するための基本ブロック番号(0以上)を割り
付け、その基本ブロック番号をインデックスとする基本
ブロックテーブルに、基本ブロックの開始アドレスと長
さを記録する。
【0025】図9はメモリアクセステーブルの例であ
る。メモリアクセス命令検出手段44は、基本ブロック
の命令列を解析し、メモリにアクセスする命令位置、読
み書きの区別(図には「方向」と示した)、データサイ
ズ、アドレッシングモード等に関する情報をメモリアク
セステーブルに記録する。この例では、ターゲット計算
機が「レジスタ+即値オフセット」と「レジスタ+レジ
スタ」の2種類のアドレジングモードを持つ場合に、テ
ーブルの各要素に格納されるデータの種類を示してい
る。
【0026】図10の(a)は図5の基本ブロック0、
(b)は図5の基本ブロック1に対するメモリアクセス
テーブルの各要素の値を示している。図10の(a)
は、基本ブロック0のオフセット「0」(先頭)の命令
sw%r0,[%r31+4]が、メモリへの書き込み「1」、データ
サイズが「4」バイト、アドレッシングモードがレジス
タ+即値オフセット「0」、ベースアドレスを格納して
いるレジスタ番号が「31」、ベースアドレスからの即
値オフセットが「4」であることを意味する。
【0027】図10の(b)のメモリアクセステーブル
の先頭の要素は、基本ブロック1のオフセット「4」
(2つ目)の位置にある命令lw[%r8+%r13],%r14 が、メ
モリの読み出し「0」、データサイズが「4」バイト、
アドレッシングモードがレジスタ+レジスタ「0」、ア
ドレスを保持している1つ目のレジスタ番号が「8」、
2つ目のレジスタ番号が「13」であることを意味す
る。テーブルの2つ目の要素も同様である。
【0028】条件コード設定命令検出手段45は、最後
の命令が条件分岐命令である基本ブロック中の命令列
を、最後の条件分岐命令から前方に逆向きにたどり、条
件分岐命令に最も近くにある条件コードを変化させる命
令(以下では条件コード設定命令と呼ぶ)を探し、その
命令のアドレスを記録する。レジスタ生存期間解析手段
43は、サブルーチン抽出手段41が抽出したターゲッ
トサブルーチンの命令列と基本ブロックテーブル中の情
報を用いて、各基本ブロックの入口で生きているレジス
タを探し、基本ブロック番号と生きているレジスタにつ
いての情報(例えば %r0〜%r31の32個のレジスタが生
きているか否かを示す32ビット長のビットフラグ群)
を組にして記録する。また、その過程で、ターゲットサ
ブルーチンの命令列内に現われた(参照または設定され
た)全てのレジスタを記録してしておく。各レジスタが
基本ブロックの入口と出口で生きているか否かの解析
は、コンパイラの最適化で一般的に使用されるデータフ
ロー解析( Aho,A.V.Sethi,R.,andUllman,J.D.著「Comp
ilers:Principles,Techniques,andTools」Addison-Wesl
ey,Reading, Mass.,1986,pp.608 以降に詳しい説明があ
る)を用いて行う。
【0029】サブルーチン生成手段46は、サブルーチ
ン翻訳手段4の各ブロックが抽出したサブルーチンテー
ブル、基本ブロックテーブル、レジスタの生存期間等の
情報と、ターゲット計算機のC言語で採用されているサ
ブルーチン呼び出し規約を用いて、ターゲットサブルー
チンの命令列から、ホスト計算機で直接実行できるホス
ト翻訳サブルーチンのC言語ソースプログラム5を生成
する。生成されたホスト翻訳サブルーチンは、実行時に
ターゲット計算機の命令列と同じ演算を行い、その演算
結果通りにターゲット計算機用のメモリ、レジスタ、キ
ャッシュの内容を更新するとともに、実行命令数やキャ
ッシュのヒット率に関する統計量(ターゲット計算機の
資源・統計量87)も更新する。
【0030】〈シミュレーション手段〉シミュレーショ
ン手段8では、従来のシミュレータと同様に、ターゲッ
ト計算機用メモリ84、レジスタやキャッシュ等の資源
・統計量87は、ホスト計算のメモリ上に割り付ける。
例えば、図6に示したような汎用レジスタは、ホスト計
算機上の単純配列int reg[32] で実現できる。また、同
様に、ターゲット計算機用のメモリも配列int mem[N]と
して実現できる。しかし、ターゲット計算機のレジスタ
やメモリ、あるいはキャッシュ等がホスト計算機のメモ
リに割り付けられているため、ターゲット計算機では高
速にアクセスできるレジスタであっても、ホスト計算機
でシミュレーションするには、毎回メモリ(配列reg[]
)からレジスタ値を読み出し、演算を行い、その結果
をメモリに書き戻す必要がある。例えば、ターゲット計
算機の加算命令add%r12,%r15,%r13 をシミュレーション
するには、ソースオペランドのレジスタ%r12と%r15の値
をメモリ(配列要素reg[12] とreg[15] )から読み出
し、加算を行い、その結果を%r13に対応するメモリ(配
列要素reg[13] )に書き戻す必要がある。つまり、この
加算命令をそのまま実行するためには、2回のメモリ読
み出しと1回のストアが必要になり、高速なシミュレー
ションの妨げになる。
【0031】一方、C言語のサブルーチン呼び出し規約
では(図6に示した例)、サブルーチン間でデータの受
け渡しに使用されるレジスタは、返り番地レジスタ %r
0、引き数レジスタ%r8 〜%r11、返り値レジスタ%r12〜%
r13、スタックポインタ%r31だけであり、汎用レジスタ
32個の中の高々8個である。しかも、引き数レジスタ
や返り値レジスタはサブルーチンによってはそれらを全
く使用しないものもある。従って、サブルーチン生成手
段46において、ターゲットサブルーチンをホスト翻訳
サブルーチンに変換する場合、ホスト計算機のメモリ上
に割り付けられたターゲット計算機レジスタ配列reg[]
の値は、最大8個のレジスタを更新するだけで、サブル
ーチンの相互の呼び出しが正しく実行できる。逆に言え
ば、8個以外のレジスタに対応する配列[]の内容は更
新しなくても、ホスト翻訳サブルーチンの直接実行ある
いはクロックシミュレーション手段86による解釈実行
の結果には影響を与えない。つまり、サブルーチン呼び
出し規約を利用することによって、8個以外のレジスタ
はターゲット計算機のレジスタに直接割り付けることが
でき、レジスタ内容の参照や更新のためのメモリアクセ
スを少なくするようにホスト翻訳サブルーチンを生成で
きる。
【0032】また、ホスト翻訳サブルーチンは、ターゲ
ット計算機の命令がレジスタやメモリに与える副作用と
等価な処理を行うだけではなく、クロックシミュレーシ
ョン手段86も参照しているターゲット計算器機の資源
・統計量87を更新する必要がある。特に、サブルーチ
ン呼び出しの際に、ホスト翻訳サブルーチンの直接実行
からクロックシミュレーション手段86による解釈実行
に移る場合に、クロックシミュレーション手段86が正
確なシミュレーションを継続できるためには、キャッシ
ュの内容を正しく更新しておく必要がある。
【0033】ホスト翻訳サブルーチンを生成する際に、
このようなキャッシュおよび統計量の更新のための命令
もあわせて生成するための単純方法は、ターゲット計算
機の命令と等価なホスト計算機の命令を生成した直後
に、統計量とキャッシュの更新のための処理を行なう命
令を生成すれば良い。しかし、これでは、ターゲット計
算機の命令を1つ実行する度に、統計量およびキャッシ
ュの更新を行なうためのオーバーヘッドが大きくなり、
ホスト翻訳サブルーチンは高速実行ができなくなる。
【0034】そこで、統計量やキャッシュの更新は、基
本ブロックの終わりに一括して行うようにする。通常、
基本ブロックの数はターゲットサブルーチンの総命令数
の1〜2割程度であるため、更新のためのオーバーヘッ
ドは大幅に低減できる。ただし、このためには、各基本
ブロック中の命令のアドレスとそれらの命令がアクセス
するデータアドレスを記録する必要がある。しかも、命
令アドレスは予め決定されているが、命令がアクセスす
るデータアドレスは予め決定しているとは限らない。例
えば、データのアドレスがレジスタに乗っており、その
レジスタが指すアドレスからデータをロードしたりスト
アしたりする場合がそれである。従って、ホスト翻訳サ
ブルーチンでは、各基本ブロックの命令列を実行した際
のメモリアクセスに関する情報(実効アドレス、読み書
きの区別、データサイズ)を、そのアクセスの順番通り
に記録しておき、基本ブロックの終わりで基本ブロック
シミュレーション手段86を呼び出すことにより、資源
・統計量87を一括更新する。
【0035】以下では、図7のサブルーチンfunc0() の
命令列を用いて、サブルーチン生成手段46がどのよう
にしてホスト翻訳サブルーチンを生成するかを詳細に説
明する。図11にはサブルーチン生成手段46の処理概
要を示す。図12と図13には、図7の命令列から生成
されたC言語のホスト翻訳サブルーチンの例を示す。図
12と図13の例では、ターゲット計算機のレジスタは
配列int reg[] で、ターゲット計算機のメモリは配列in
t mem[] で表されている。また、基本ブロックシミュレ
ーション手段85は、サブルーチン sim_bb()で呼び出
されている。サブルーチン生成手段46は、まず、ター
ゲットサブルーチンに対応したホスト翻訳サブルーチン
名を生成する(図11ステップS1)。図12の一番上
のブロック100の例ではホスト翻訳サブルーチンとし
てhost_func0() を生成している。このサブルーチンは
引数および返り値は持たない。
【0036】メモリアクセス命令検出手段44が作成し
た各基本ブロックに対応したメモリアクセステーブルか
ら基本ブロック内のメモリアクセスの最大数Nを調べ、
その数Nを要素数とする配列 mem_acc[N]を定義する
(図11ステップS2)。図12の2番目のブロック1
01の例ではNは2である。この配列 mem_acc[] の各
要素には、基本ブロック内のメモリアクセスの順番通り
に、その実効アドレス、読み書きの区別、データサイズ
が記録される。
【0037】図14には、配列 mem_acc[] の型struct
mem_acc _s の定義の例を示す。以下では、この配列
mem_acc[] を実効アドレステーブルと呼ぶ。図11の
ステップS3で、レジスタ生存期間解析手段43が抽出
したターゲットサブルーチン中に現われるレジスタに対
応した変数rN(N はレジスタ番号を表わす)を定義する
(図12のブロック102)。この例では %r0、 %r8、
%r9、%r11、%r12、%r13、%r14、%r15、%r31が定義され
ている。図11のステップS4では、レジスタ生存期間
解析手段43が検出したサブルーチンの入口の基本ブロ
ック(この例では基本ブロック0)で生きているレジス
タの中で、引き数レジスタかスタックポインタの何れか
のみを、レジスタ配列reg[N]から変数rNに読み出すため
の代入文を生成する(図12のブロック103)。この
例では、引数レジスタの%r8 〜%r10とスタックポインタ
の%r31が対象となる。
【0038】次に、図11のステップS5で、サブルー
チン生成手段46は、各基本ブロックに対して、その各
命令に対応したC言語の文と、統計量およびキャッシュ
の更新のためのC言語の文を生成していく。その概要を
図15に示す。以下では各基本ブロックの変換手順の詳
細について説明する。
【0039】まず、基本ブロックの先頭に、サブルーチ
ン内で各基本ブロックを一意に区別するC言語のラベル
を生成する。図12の例では BBN(N=0〜3)というラベル
が生成されている。次に、基本ブロック内のターゲット
計算機の各命令に対応したC言語の文を生成していく。
生成されるC言語の文は、ターゲット計算機の命令の種
類によって異なる。基本ブロック中の分岐命令以外の各
命令に対しては、その動作を記述するC言語の文を生成
する。例えば、ロード命令 lw[%r8+%r13],%r14ならば、
ターゲット計算機のメモリ配列 mem[]からデータを読み
出すためのC言語の文r14=*(int*)((char*)mem+r8+r1
3); を生成する(図13のブロック105)。ただし、
この例では、ターゲット計算機のアドレスが配列 mem[]
のインッデクスとなるように、図1に示すターゲット計
算機用メモリ84がホスト計算機のメモリに割り付けら
れているものとする。また、メモリアクセスを行なわな
い加算命令add%r12,%r15,%r12 ならばC言語の文r12+=r
15; を生成する(図13のブロック105)。図12と
13にはC言語の各文に対応する図7の機械語命令をC
言語のコメントとして付加している。
【0040】基本ブロック中の命令がロード命令やスト
ア命令の様にメモリにアクセスする場合は、その実効ア
ドレスを計算し、その実効アドレス、読み書きの区別、
データサイズ(バイト数)を、テーブル mem_acc[] に
設定するためのC言語の文を生成する。図10中のマク
ロset _mem _acc() がそれである。マクロset _mem
_acc() の引数は次のようになる。 set _mem _acc (〈 mem_acc[] の要素〉,〈実効ア
ドレス〉,〈読み書きの区別〉,〈データサイズ〉); ロード命令lw[%r8+%r13],%r14 の場合は、基本ブロック
0の最初のメモリアクセス命令であり、その実効アドレ
スは%r8+%r13であるため、マクロ呼び出しは次のように
なる。ただし、読み書きの区別は、0が読み出しを1が
書き込みを意味するものとする。 set_mem_acc(mem_acc[0],r8+r13,0,4); 同様に、その次のロード命令lw[r9+r13],%r15 からは、
次のマクロが生成される。 set_mem_acc(mem_acc[1],%r9+%r13,0,4);
【0041】サブルーチン生成手段46は、基本ブロッ
クの終わりに達した際、その基本ブロック内の命令が実
行された場合の実行命令数やキャッシュのヒット率等の
統計量やキャッシュの内容を更新するための基本ブロッ
クシミュレーション手段85を呼び出すためのサブルー
チン呼び出し sim_bb()を生成する。引き数は、基本ブ
ロックの開始アドレス、長さ(バイト数)、実効アドレ
スステーブル mem_acc の要素数と開始アドレスであ
る。この引数の値によって、基本ブロックシミュレーシ
ョン手段は、キャッシュの振る舞いや、図1に示した実
行命令数、メモリアクセス回数等の資源・統計量87の
更新を行なうことができる。ただし、基本ブロックの終
わりが分岐命令の場合は、その命令に対応したC言語の
文を生成する前にサブルーチン呼び出し sim_bb()を生
成する(図13のブロック104または105)。
【0042】基本ブロックの終わりがサブルーチン呼び
出し命令の場合(図13のブロック106)、まず、全
ての引き数レジスタに対応する変数r8〜r11 の値をレジ
スタ配列reg[8]〜reg[11] に格納するためのC言語の文
を生成する。サブルーチン間でのレジスタ渡しの引き数
は、レジスタ配列reg[] を通して行うためである。ただ
し、図1に示すターゲット計算機用実行プログラム3中
に、呼び出すべきサブルーチンがいくつの引き数レジス
タを使用するかについての情報が格納されている場合
は、全ての引き数レジスタ変数r8〜r11 を配列reg[] に
格納するのではなく、必要なもののみを格納すればよ
い。
【0043】図13のブロック106は、サブルーチン
func1() の引き数が1つ(%r8 のみ)であることが分か
っている場合の例である。次に、呼び出すべきサブルー
チンのサブルーチン番号を引数として選択サブルーチン
select_subr()を呼び出す文を生成する。図16には、
選択サブルーチンselect_subr()の動作例をC言語風の
構文を用いて示す。選択サブルーチンでは、引数のサブ
ルーチン番号をインデックスとして、図1(または図
4)に示すサブルーチン選択テーブル83の選択フラグ
を参照して、ホスト翻訳サブルーチンを呼び出すか、ク
ロックシミュレーション手段86を呼び出して、ターゲ
ットサブルーチンの解釈実行を行なうかを決定する。
【0044】最後に、レジスタ生存期間解析手段43が
抽出した生きているレジスタについての情報を参照し
て、サブルーチン呼び出しを行なう基本ブロックの出口
で返り値レジスタ%r12および%r13が生きている場合(後
続の基本ブロックで参照されることがある場合)には、
選択サブルーチン呼び出しの直後に、返り値レジスタの
値をレジスタ配列reg[12] およびreg[13] からレジスタ
変数r12 およびr13 に読み出す代入文を生成する(図1
3のブロック106)。
【0045】基本ブロックの終わりが条件分岐命令の場
合、図1に示す条件コード設定命令検出手段45が見つ
けた条件コード設定命令のオペランドを調べ、そのオペ
ランドに対する条件付きのgoto文を生成する。goto文の
分岐先は、条件分岐命令の分岐先の基本ブロックの先頭
に付けられたC言語ラベル名BBN である。例えば、条件
コード設定命令(比較命令)がcmp %r11,%r10 で、条件
分岐命令がbge LXXXならば、次のような条件付きgoto
文が生成される(図12のブロック104)。 if(r11>=r10) goto BBN; ただし、条件式if中の比較演算子“>=”は、条件分岐命
令bge の分岐条件“ge”(greater or equal)から決定
される。条件コード設定命令が単なる演算命令、例えば
add %r10,12,%r12の場合には次のようになる。 if(r12>=0) goto BBN; 基本ブロックの終わりがリターン命令の場合、サブルー
チン生成手段46は、ホスト翻訳サブルーチンの終わり
に生成するC言語ラベルBBEND (図13のブロック10
7)へのgoto文を生成する。
【0046】全ての基本ブロックに対する処理が終わる
と、サブルーチン生成手段46は、C言語ラベルBBEND
を生成する(図13のブロック107)。そして、引き
数レジスタ%r12と%r13が、現在のサブルーチン内に現わ
れていた場合は、レジスタ変数r12 とr13 を(現われた
もののみ)、レジスタ配列reg[12] とreg[13] に格納す
るためのC言語の代入文を生成する(図13のブロック
107)。そして、最後にホスト翻訳サブルーチンの終
わりの括弧“}”を生成して、1つのホスト翻訳サブル
ーチンの生成を終える(図11ステップS6)。
【0047】サブルーチン生成手段46は、すべてのホ
スト翻訳サブルーチンの生成を終えた後に、全てのホス
ト翻訳サブルーチンの名前(開始アドレス)とターゲッ
トサブルーチンの開始アドレスを登録したホストサブル
ーチンテーブルを、C言語のホスト計算機用ソースプロ
グラム5の終わりに付加する。このようにして生成され
たホスト翻訳サブルーチンおよびサブルーチンテーブル
とホスト計算機用ソースプログラム5は、ホスト計算機
用コンパイラ6によってコンパイルされ、ホスト計算機
用オブジェクトプログラム7に変換される。
【0048】シミュレーション手段8は、まず、ターゲ
ット計算機用実行プログラム3とホスト計算機用オブジ
ェクトプログラム7を読み込む。プログラムロードリン
ク手段81は、ターゲット計算機用実行プログラム3か
ら命令列とデータをシミュレータ内部のターゲット計算
機用メモリ84(配列mem[] )上の所定位置に読む込
む。また、プログラムロードリンク手段81は、ホスト
計算機用オブジェクトプログラム7をロードするための
メモリ領域を割り付け、そこにホスト計算機用オブジェ
クトプログラム7からホスト翻訳サブルーチン82とサ
ブルーチン選択テーブル83を読み込む。その際、この
オブジェクトプログラム7で参照される未定義シンボル
reg[],mem[], sim_bb()、select_subr()等の解消を行
う。これらのシンボルは、シミュレーション手段8が持
っている配列およびサブルーチンのアドレスであり、そ
の値は既知である。従って、オブジェクトプログラム7
中の未定義シンボルの解消を行なうためには、シミュレ
ーション手段8からホスト計算機用のリンカを起動し、
その際に、上記の未定義シンボルの値とホスト翻訳サブ
ルーチンのロード先のメモリアドレスをリンカに明示的
に指定すればよい。
【0049】プログラムのロードが終わるとシミュレー
ション手段8は、コマンド処理手段88を呼び出してユ
ーザとの対話モードになる。コマンド処理手段88は、
ユーザからのブレークポイントの設定/解除や、データ
やレジスタの表示/変更、サブルーチン選択テーブル選
択フラグの表示/変更、シミュレーションの開始等の各
種コマンドを受け付ける。コマンド処理手段88はユー
ザからのシミュレーション開始のコマンドを受け取る
と、クロックシミュレーション手段86を呼び出して、
シミュレーションを開始する。クロックシミュレーショ
ン手段86では、ターゲットサブルーチンの命令を1つ
ずつ解釈実行しながら、クロック単位の正確なシミュレ
ーションを行なっていく。
【0050】クロックシミュレーション手段86では、
ユーザからのコマンドが1命令あるいは1クロックのみ
の実行の場合は、1命令または1クロックの実行が終了
した時点で、コマンド処理手段88に制御を戻す。さも
なくば、ブレークポイントに到達するまで、シミュレー
ションを継続する。クロックシミュレーション手段86
は、このシミュレーションの過程で、サブルーチン呼び
出し命令に出会うと、そのサブルーチンのアドレスを用
いてサブルーチン選択テーブル83の対応する要素にア
クセスし、その選択フラグの値に従って、クロックシミ
ュレーション手段86自身を再帰呼び出しするか、ホス
ト翻訳サブルーチンを呼び出すかを決定する。また、ク
ロックシミュレーション手段86は、リターン命令に出
会うと、クロックシミュレーション手段86自身もリタ
ーンする。つまり、クロックシミュレーション手段86
は、ターゲット計算機のサブルーチン呼び出し命令に出
会う度に再帰的に呼び出され、リターン命令に出会うと
リターンする。図17にはその動作概要をC言語風の構
文を用いて示している。ただし、図16では、クロック
シミュレーション手段86をサブルーチン sim_cloc
k() として表現している。
【0051】本発明は以上の実施例に限定されない。上
記の実施例では、サブルーチン生成手段46がC言語の
ソースプログラムを生成する場合の例を示したが、サブ
ルーチン生成手段46にホスト計算機用コンパイラの機
能を組み込むことにより、ホスト翻訳サブルーチンをホ
スト計算機の機械語命令列として直接生成することも可
能である。更に、本発明では、ターゲット計算機用のプ
ログラムをC言語を用いた例を示したが、各種の高級言
語を用いたものについても同様の処理を行うことができ
る。また、ターゲット計算機は必ずしも計算機でなく、
各種のプログラムを実施するためのコンピュータを組み
込んだ情報処理装置一般とすることができる。
【0052】
【発明の効果】以上説明した本発明のシミュレーション
方法により、ターゲット計算機の機械語命令列を解釈実
行する低速なクロック単位のシミュレーション方法と、
ターゲット計算機のサブルーチン命令列から生成された
ホスト計算機のサブルーチン命令列を直接実行すること
による高速なシミュレーション方法を、サブルーチン単
位で切り替えることが可能になり、シミュレータを用い
たターゲット計算機の性能評価やターゲット計算機用プ
ログラムの評価、デバッグの効率を大幅に向上させる効
果を持つ。
【0053】また、ターゲット計算機の機械語命令列を
機能的に等価なホスト計算機の命令列に翻訳する際に、
基本ブロック単位でキャッシュの内容やメモリアクセス
に関する情報を更新する命令も生成することにより、翻
訳後のホスト計算機の機械語命令を直接実行するだけで
も、ターゲット計算機でのキャッシュのヒット率や実行
命令数、メモリアクセスの頻度や読み書きの区別等の統
計量を取得可能になり、ターゲット計算機やターゲット
計算機用のプログラムの評価作業の効率を大幅に向上す
る効果を持つ。
【0054】さらに、ターゲット計算機の機械語命令列
から機能的に等価なホスト計算機の命令列へ翻訳をサブ
ルーチン単位で行うことにより、命令単位や基本ブロッ
ク単位では実現できない大域的な最適化と、ターゲット
計算機で用いられているレジスタの使用法やサブルーチ
ンの呼び出しに関する規約を利用して、メモリアクセス
回数の少ないターゲット計算機命令列の生成が可能にな
り、翻訳後のホスト計算機命令列の実行性能を向上させ
る効果を持つ。
【図面の簡単な説明】
【図1】本発明のプログラムシミュレーション装置実施
例を示すブロック図である。
【図2】サブルーチン翻訳手段のブロック図である。
【図3】プログラムの構成説明図である。
【図4】サブルーチンテーブルの内容説明図である。
【図5】サブルーチンの例説明図である。
【図6】ターゲット計算機のレジスタと命令説明図であ
る。
【図7】機械語命令列説明図である。
【図8】基本ブロックテーブルの例説明図である。
【図9】メモリアクセステーブル例説明図である。
【図10】メモリアクセステーブルの各要素の説明図で
ある。
【図11】サブルーチン生成手段の処理フローチャート
である。
【図12】ホスト翻訳サブルーチン(その1)である。
【図13】ホスト翻訳サブルーチン(その2)である。
【図14】配列の型の定義説明図である。
【図15】サブルーチン生成手段の動作説明図である。
【図16】選択サブルーチンの動作説明図である。
【図17】ブロックシミュレーション手段の動作説明図
である。
【符号の説明】
1 ターゲット計算機用ソースプログラム 2 ターゲット計算機用コンパイラ 3 ターゲット計算機用実行プログラム 4 サブルーチン翻訳手段 5 ホスト計算機用ソースプログラム 6 ホスト計算機用コンパイラ 7 ホスト計算機用オブジェクトプログラム 8 シミュレーション手段

Claims (6)

    【特許請求の範囲】
  1. 【請求項1】 ターゲット計算機のプログラムをホスト
    計算機上でシミュレートするものであって、 前記ターゲット計算機のプログラムによる動作を1命令
    ずつクロック単位で正確にシミュレーションするクロッ
    クシミュレーション手段と、 ターゲット計算機のプログラムを、分岐命令を含まない
    で連続実行される基本ブロック単位に分割し、その基本
    ブロック内の命令列が実行された結果を、シミュレーシ
    ョン結果解析に有用な統計量とターゲット計算機の資源
    の内容とに反映させる基本ブロックシミュレーション手
    段と、 ターゲット計算機のプログラムをサブルーチン単位で、
    ホスト計算機で直接実行可能な命令列であるホスト翻訳
    サブルーチンに変換すると同時に、このホスト翻訳サブ
    ルーチンに含まれる基本ブロック内の命令列が実行され
    たとき、サブルーチン終了時に前記統計量と資源とにそ
    の結果を反映させるための命令列を生成するサブルーチ
    ン翻訳手段と、 前記サブルーチン翻訳手段の生成したホスト翻訳サブル
    ーチンを実行させるか、前記クロックシミュレーション
    手段によりターゲット計算機のシミュレーションを一命
    令ずつ実行するかを、サブルーチン単位のプログラムシ
    ミュレーションのつど選択するサブルーチン選択手段と
    を備えたことを特徴とするプログラムシミュレーション
    装置。
  2. 【請求項2】 ターゲット計算機のプログラムをホスト
    計算機上でシミュレートするものであって、 ターゲット計算機のプログラムを、分岐命令を含まない
    で連続実行される基本ブロック単位に分割し、その基本
    ブロック内の命令列が実行された結果を、シミュレーシ
    ョン結果解析に有用な統計量とターゲット計算機の資源
    の内容とに反映させる基本ブロックシミュレーション手
    段を備え、 この基本ブロックシミュレーション手段は、 プログラムシミュレーションの実行中、前記基本ブロッ
    クの境界を通過する度に、 ホスト計算機のメモリ上に割りつけられたターゲット計
    算機のレジスタやキャッシュに該当する資源と、実行命
    令数を含む統計量に、その基本ブロックの実行結果を反
    映することを特徴とするプログラムシミュレーション装
    置。
  3. 【請求項3】 サブルーチン翻訳手段は、 ターゲット計算機のサブルーチン間でデータの受渡しに
    使用されるレジスタやスタックポインタ等の少数のレジ
    スタのみをホスト計算機のメモリ上に割りつけ、その他
    のレジスタを、ホスト計算機の任意のレジスタに直接割
    りつけることを特徴とする請求項1又は2記載のプログ
    ラムシミュレーション装置。
  4. 【請求項4】 ホスト翻訳サブルーチンは、 基本ブロックの命令列を実行した際のメモリアクセスに
    関する情報を、そのアクセスの順番どおり記憶してお
    き、基本ブロックの命令列実行終了時に、基本ブロック
    シミュレーション手段を呼び出して、ターゲット計算機
    のレジスタやキャッシュに該当する資源と、実行命令数
    を含む統計量に、その基本ブロックの実行結果を反映さ
    せることを特徴とする請求項1又は2記載のプログラム
    シミュレーション装置。
  5. 【請求項5】 資源は、ターゲット計算機のレジスタと
    メモリとキヤッシュとを含み、統計量は、命令の実行回
    数と、キャッシュのヒット率と、メモリの読み書きの回
    数を含むことを特徴とする請求項1から4に記載のプロ
    グラムシミュレーション装置。
  6. 【請求項6】 ターゲット計算機の命令から成るサブル
    ーチン中に現われる全レジスタと各基本ブロックの入口
    と出口で生きているレジスタを調べるレジスタ生存期間
    解析手段と、 サブルーチン翻訳手段を構成する各ブロックが抽出した
    情報に基づいて、ターゲット計算機の命令から成るサブ
    ルーチンから、メモリ、レジスタおよびキャッシュの内
    容まで含めてターゲット計算機の動作をシミュレートす
    るための、ホスト翻訳サブルーチンのソースプログラム
    を生成する、 サブルーチン生成手段を設けたことを特徴とする請求項
    1から5に記載のプログラムシミュレーション装置。
JP7171432A 1995-06-14 1995-06-14 プログラムシミュレーション装置 Pending JPH096646A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP7171432A JPH096646A (ja) 1995-06-14 1995-06-14 プログラムシミュレーション装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP7171432A JPH096646A (ja) 1995-06-14 1995-06-14 プログラムシミュレーション装置

Publications (1)

Publication Number Publication Date
JPH096646A true JPH096646A (ja) 1997-01-10

Family

ID=15923025

Family Applications (1)

Application Number Title Priority Date Filing Date
JP7171432A Pending JPH096646A (ja) 1995-06-14 1995-06-14 プログラムシミュレーション装置

Country Status (1)

Country Link
JP (1) JPH096646A (ja)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10177487A (ja) * 1996-12-16 1998-06-30 Fujitsu Ltd プロセッサの命令シミュレーション方法および命令シミュレーション・システム
JP2005157640A (ja) * 2003-11-25 2005-06-16 Mitsubishi Electric Corp 命令模擬装置、命令模擬方法及び命令模擬プログラム
JP2008276735A (ja) * 2007-04-03 2008-11-13 Toshiba Corp プログラムコード変換装置及びプログラムコード変換方法
JP2010286892A (ja) * 2009-06-09 2010-12-24 Mitsubishi Electric Corp 処理時間見積り装置および処理時間見積りプログラム
JP2012509546A (ja) * 2009-12-23 2012-04-19 インチロン ゲーエムベーハー 組み込みシステムをシミュレートするための方法及びデータ処理システム
US8949681B2 (en) 2011-08-18 2015-02-03 Fujitsu Limited Correction apparatus, correction method, and computer product
WO2017014318A1 (ja) * 2015-07-23 2017-01-26 国立大学法人東京工業大学 命令セットシミュレータおよびそのシミュレータ生成方法

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10177487A (ja) * 1996-12-16 1998-06-30 Fujitsu Ltd プロセッサの命令シミュレーション方法および命令シミュレーション・システム
JP2005157640A (ja) * 2003-11-25 2005-06-16 Mitsubishi Electric Corp 命令模擬装置、命令模擬方法及び命令模擬プログラム
JP4563669B2 (ja) * 2003-11-25 2010-10-13 三菱電機株式会社 命令模擬装置
JP2008276735A (ja) * 2007-04-03 2008-11-13 Toshiba Corp プログラムコード変換装置及びプログラムコード変換方法
JP2010286892A (ja) * 2009-06-09 2010-12-24 Mitsubishi Electric Corp 処理時間見積り装置および処理時間見積りプログラム
US8543369B2 (en) 2009-12-23 2013-09-24 Inchron, Gmbh Method and data processing system for simulating an embedded system
JP2012509546A (ja) * 2009-12-23 2012-04-19 インチロン ゲーエムベーハー 組み込みシステムをシミュレートするための方法及びデータ処理システム
US8949681B2 (en) 2011-08-18 2015-02-03 Fujitsu Limited Correction apparatus, correction method, and computer product
WO2017014318A1 (ja) * 2015-07-23 2017-01-26 国立大学法人東京工業大学 命令セットシミュレータおよびそのシミュレータ生成方法
JP2017027375A (ja) * 2015-07-23 2017-02-02 国立大学法人東京工業大学 命令セットシミュレータおよびそのシミュレータ生成方法
CN108027748A (zh) * 2015-07-23 2018-05-11 国立大学法人东京工业大学 指令集模拟器及其模拟器生成方法
CN108027748B (zh) * 2015-07-23 2019-09-10 国立大学法人东京工业大学 指令集模拟器及其模拟器生成方法
US10459707B2 (en) 2015-07-23 2019-10-29 Tokyo Institute Of Technology Instruction-set simulator and its simulator generation method

Similar Documents

Publication Publication Date Title
US6286132B1 (en) Debugging support apparatus, a parallel execution information generation device, a computer-readable recording medium storing a debugging support program, and a computer-readable recording medium storing a parallel execution information generation program
US5987250A (en) Transparent instrumentation for computer program behavior analysis
US8554535B2 (en) Instruction-set architecture simulation techniques using just in time compilation
US6091896A (en) Debugging optimized code using data change points
US5784552A (en) Debugging a computer program by simulating execution forwards and backwards in a main history log and alternative history logs
EP0753814B1 (en) Determining dynamic properties of programs
US6467082B1 (en) Methods and apparatus for simulating external linkage points and control transfers in source translation systems
EP0453394A2 (en) Dynamic process for the generation of biased pseudo-random test patterns for the functional verification of hardware designs
JP3612294B2 (ja) デバッグ方法およびデバッグ装置
US20030033592A1 (en) Software debugger and software development support system
JPH0628036B2 (ja) シミュレーシヨン方法
JP2004062858A (ja) データ処理装置内のアプリケーション・コードのコンパイル
CN108664380A (zh) 一种带性能显示的执行后软件调试系统及调试方法
Davidson et al. A design environment for addressing architecture and compiler interactions
JPH096646A (ja) プログラムシミュレーション装置
Mitchell et al. A workbench for computer architects
Razouk The use of Petri Nets for modeling pipelined processors
JPH03118635A (ja) ソースコード発展システム用増分コンパイラ
Chung et al. Improvement of compiled instruction set simulator by increasing flexibility and reducing compile time
TW591540B (en) Win F-language interpreter
Yin et al. Debugopt: Debugging fully optimized natively compiled programs using multistage instrumentation
JPH08180094A (ja) アーキテクチャ・シミュレータ
JP2002014847A (ja) プログラム検査装置、プログラム検査方法及び検査を行うためのプログラムを格納した記録媒体
JPH02176938A (ja) 機械語命令最適化方式
JP2915944B2 (ja) カバレージ測定方法及びマイクロコンピュータ