特許第6474055号(P6474055)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ キヤノン株式会社の特許一覧 ▶ 国立大学法人東京工業大学の特許一覧

<>
  • 特許6474055-情報処理装置及びその制御方法 図000002
  • 特許6474055-情報処理装置及びその制御方法 図000003
  • 特許6474055-情報処理装置及びその制御方法 図000004
  • 特許6474055-情報処理装置及びその制御方法 図000005
  • 特許6474055-情報処理装置及びその制御方法 図000006
  • 特許6474055-情報処理装置及びその制御方法 図000007
  • 特許6474055-情報処理装置及びその制御方法 図000008
  • 特許6474055-情報処理装置及びその制御方法 図000009
  • 特許6474055-情報処理装置及びその制御方法 図000010
  • 特許6474055-情報処理装置及びその制御方法 図000011
  • 特許6474055-情報処理装置及びその制御方法 図000012
  • 特許6474055-情報処理装置及びその制御方法 図000013
  • 特許6474055-情報処理装置及びその制御方法 図000014
  • 特許6474055-情報処理装置及びその制御方法 図000015
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6474055
(24)【登録日】2019年2月8日
(45)【発行日】2019年2月27日
(54)【発明の名称】情報処理装置及びその制御方法
(51)【国際特許分類】
   G06F 11/36 20060101AFI20190218BHJP
   G06F 8/53 20180101ALI20190218BHJP
【FI】
   G06F11/36 116
   G06F11/36 124
   G06F11/36 136
   G06F8/53
【請求項の数】7
【全頁数】15
(21)【出願番号】特願2014-176218(P2014-176218)
(22)【出願日】2014年8月29日
(65)【公開番号】特開2016-51322(P2016-51322A)
(43)【公開日】2016年4月11日
【審査請求日】2017年8月25日
(73)【特許権者】
【識別番号】000001007
【氏名又は名称】キヤノン株式会社
(73)【特許権者】
【識別番号】304021417
【氏名又は名称】国立大学法人東京工業大学
(74)【代理人】
【識別番号】100076428
【弁理士】
【氏名又は名称】大塚 康徳
(74)【代理人】
【識別番号】100112508
【弁理士】
【氏名又は名称】高柳 司郎
(74)【代理人】
【識別番号】100115071
【弁理士】
【氏名又は名称】大塚 康弘
(74)【代理人】
【識別番号】100116894
【弁理士】
【氏名又は名称】木村 秀二
(74)【代理人】
【識別番号】100130409
【弁理士】
【氏名又は名称】下山 治
(74)【代理人】
【識別番号】100134175
【弁理士】
【氏名又は名称】永川 行光
(72)【発明者】
【氏名】普勝 勉
(72)【発明者】
【氏名】一色 剛
【審査官】 多胡 滋
(56)【参考文献】
【文献】 特開2010−003123(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/36
G06F 8/53
(57)【特許請求の範囲】
【請求項1】
ターゲットデバイスのプロセッサが実行することになるターゲットプログラムの実行クロックサイクル数を算出する情報処理装置であって、
前記ターゲットデバイスのプロセッサが解釈実行する命令セット、各命令の意味及びクロックサイクル数を表す命令セットテーブルを格納する格納手段と、
前記ターゲットプログラムにおける特定命令を抽出する抽出手段と、
前記ターゲットプログラムの構造及び意味を前記命令セットテーブルを参照して解析する解析手段と、
前記特定命令に基づいて前記ターゲットプログラムを複数の部分プログラムに分割し、前記命令セットテーブルを参照して部分プログラムごとのクロックサイクル数を算出する分割手段と、
前記部分プログラムごとのクロックサイクル数と、前記解析の結果に基づく当該部分プログラム間の遷移の情報とを記述したフローを生成するフロー生成手段と、
前記解析の結果を参照して変数を抽出し、該抽出された変数及び前記解析の結果に基づいて、前記ターゲットプログラムと実質的に等価なプロセッサ非依存の実行プログラムを生成する逆コンパイル手段と、
前記プロセッサ非依存の実行プログラムと、前記特定命令とに基づいて、該特定命令に関するフラグのシーケンスを生成するための、プロセッサ非依存のフラグ生成プログラムを生成するプログラム生成手段と、
前記プロセッサ非依存のフラグ生成プログラムを前記ターゲットデバイスのプロセッサが実行可能な形式にコンパイルして実行することで得られたフラグのシーケンスと、前記フローにおける部分プログラム間の遷移の情報とに従い、前記部分プログラムごとのクロックサイクル数を累積加算することで、前記ターゲットプログラムのクロックサイクル数を算出する算出手段と
を有することを特徴とする情報処理装置。
【請求項2】
前記特定命令は条件分岐命令を含み、
前記特定命令に関するフラグは、当該条件分岐命令の条件の成立、不成立を表すフラグである
ことを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記プログラム生成手段は、前記プロセッサ非依存の実行プログラムの条件分岐命令を解釈して、分岐の条件の成立、不成立を示すフラグのシーケンスを生成するための、プロセッサ非依存プログラムを、前記フラグ生成プログラムとして生成
前記算出手段は、前記プロセッサ非依存のフラグ生成プログラムを前記ターゲットデバイスのプロセッサが実行可能な形式にコンパイルして実行することで得られたフラグのシーケンスと、前記フローにおける部分プログラム間の遷移の情報とに従って、前記部分プログラム実行の順に追跡し、各プログラムのクロックサイクル数を累積加算する
ことを特徴とする請求項2に記載の情報処理装置。
【請求項4】
前記特定命令は、キャッシュメモリに対するロード・ストア命令を含み、
前記特定命令に関するフラグは、当該キャッシュメモリに対するヒット・ミスに関するフラグである
ことを特徴とする請求項1に記載の情報処理装置。
【請求項5】
ターゲットデバイスのプロセッサが実行することになるターゲットプログラムの実行クロックサイクル数を算出する情報処理装置の制御方法であって、
格納手段が、前記ターゲットデバイスのプロセッサが解釈実行する命令セット、各命令の意味及びクロックサイクル数を表す命令セットテーブルを格納する格納工程と、
抽出手段が、前記ターゲットプログラムにおける特定命令を抽出する抽出工程と、
解析手段が、前記ターゲットプログラムの構造及び意味を前記命令セットテーブルを参照して解析する解析工程と、
分割手段が、前記特定命令に基づいて前記ターゲットプログラムを複数の部分プログラムに分割し、前記命令セットテーブルを参照して部分プログラムごとのクロックサイクル数を算出する分割工程と、
フロー生成手段が、前記部分プログラムごとのクロックサイクル数と、前記解析の結果に基づく当該部分プログラム間の遷移の情報とを記述したフローを生成するフロー生成工程と、
逆コンパイル手段が、前記解析の結果を参照して変数を抽出し、該抽出された変数及び前記解析の結果に基づいて、前記ターゲットプログラムと実質的に等価なプロセッサ非依存の実行プログラムを生成する逆コンパイル工程と、
プログラム生成手段が、前記プロセッサ非依存の実行プログラムと、前記特定命令とに基づいて、該特定命令に関するフラグのシーケンスを生成するための、プロセッサ非依存のフラグ生成プログラムを生成するプログラム生成工程と、
算出手段が、前記プロセッサ非依存のフラグ生成プログラムを前記ターゲットデバイスのプロセッサが実行可能な形式にコンパイルして実行することで得られたフラグのシーケンスと、前記フローにおける部分プログラム間の遷移の情報とに従い、前記部分プログラムごとのクロックサイクル数を累積加算することで、前記ターゲットプログラムのクロックサイクル数を算出する算出工程と
を有することを特徴とする情報処理装置の制御方法。
【請求項6】
コンピュータが読み込み実行することで、前記コンピュータを、請求項1乃至4のいずれか1項に記載の情報処理装置における各手段として機能させるためのプログラム。
【請求項7】
請求項6のプログラムを格納したことを特徴とするコンピュータが読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラムの実行サイクル数を算出する技術に関するものである。
【背景技術】
【0002】
プロセッサ(CPU、DSP等)を内蔵する電子機器を開発する場合には、そのプロセッサが実行するプログラムを事前評価するため等、プログラムの実行サイクル数を算出することが行われる。
【0003】
係る技術を開示する文献として特許文献1が挙げられる。この特許文献1では、全体プログラムから条件分岐命令及び関数呼び出し命令の少なくとも一つを境界点として分割された部分プログラムを抽出し、各部分プログラムの実行クロックサイクル数を算出する。そして、プログラムを実行させたときの前記条件分岐命令についての分岐条件の成立・不成立を表すフラグ系列(分岐ビット系列)を生成する。そして、このフラグ系列を基に部分プログラムの実行系列を生成し、この系列に基づいて部分プログラムの実行サイクル数を積算して全体プログラムの実行クロックサイクル数を算出する。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特許第5403760号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
高速・短時間でサイクル数を算出するためには、その分岐ビット系列の生成を高速に実行する必要がある。
【0006】
また、分岐ビットは真偽の一致のみが必要であるため、分岐ビット系列を生成するプログラムを実行するプロセッサは、実行プログラムを実際に実行する電子機器内のプロセッサ(以下、ターゲットプロセッサという)と同一である必要はない。当然、実行クロックサイクル数を算出するプロセッサと、ターゲットプロセッサが同一である必要もない。
【0007】
以上から、図3にあるようにターゲットプロセッサ以外の高速な実行環境で分岐ビット系列の生成をおこなえるよう、プログラムは実行機種非依存の所謂ソースプログラムの段階で分岐履歴生成が行なわれるように改変される場合が多い。
【0008】
一方でソースプログラムはターゲット環境上で最適に実行されるようにターゲット用のコンパイラで実行形式に変換される。このため、図4にあるように前記分岐履歴を得たプログラム構造とターゲット用の実行形式のプログラム構造とが一致しないために、算出されるサイクル数が不正確になるという課題がある。
【課題を解決するための手段】
【0009】
この課題を解決するため、例えば本発明の情報処理装置は以下の構成を備える。すなわち、
ターゲットデバイスのプロセッサが実行することになるターゲットプログラムの実行クロックサイクル数を算出する情報処理装置であって、
前記ターゲットデバイスのプロセッサが解釈実行する命令セット、各命令の意味及びクロックサイクル数を表す命令セットテーブルを格納する格納手段と、
前記ターゲットプログラムにおける特定命令を抽出する抽出手段と、
前記ターゲットプログラムの構造及び意味を前記命令セットテーブルを参照して解析する解析手段と、
前記特定命令に基づいて前記ターゲットプログラムを複数の部分プログラムに分割し、前記命令セットテーブルを参照して部分プログラムごとのクロックサイクル数を算出する分割手段と、
前記部分プログラムごとのクロックサイクル数と、前記解析の結果に基づく当該部分プログラム間の遷移の情報とを記述したフローを生成するフロー生成手段と、
前記解析の結果を参照して変数を抽出し、該抽出された変数及び前記解析の結果に基づいて、前記ターゲットプログラムと実質的に等価なプロセッサ非依存の実行プログラムを生成する逆コンパイル手段と、
前記プロセッサ非依存の実行プログラムと、前記特定命令とに基づいて、該特定命令に関するフラグのシーケンスを生成するための、プロセッサ非依存のフラグ生成プログラムを生成するプログラム生成手段と、
前記プロセッサ非依存のフラグ生成プログラムを前記ターゲットデバイスのプロセッサが実行可能な形式にコンパイルして実行することで得られたフラグのシーケンスと、前記フローにおける部分プログラム間の遷移の情報とに従い、前記部分プログラムごとのクロックサイクル数を累積加算することで、前記ターゲットプログラムのクロックサイクル数を算出する算出手段とを有する。
【発明の効果】
【0010】
本発明によれば、ターゲットプロセッサで実行されるプログラムと、ターゲットプロセッサの命令セットテーブルとから、そのプログラムを実行した際のクロックサイクル数を高い精度で算出することが可能になる。
【図面の簡単な説明】
【0011】
図1】実施形態の実行クロックサイクル数を算出する装置のブロック構成図。
図2】実施形態の実行クロックサイクル数の算出処理の際の、部分プログラムの接続・移行を表すチャート。
図3】背景技術の処理手順を表す図。
図4】背景技術の課題を説明するための図。
図5】実施形態における処理手順概要を表す図。
図6】実施形態が適用する情報処理装置の構成図。
図7】ターゲットCPUの命令テーブルを示す図。
図8】ターゲットプログラムをニーモニックで表す図。
図9図8における命令の意味を付加した状態を示す図。
図10図9に、変数のマークを付加した状態を示す図。
図11】部分プログラムと実行サイクル数を示す図。
図12】部分プログラムと実行サイクル数を示す図。
図13】逆コンパイルして得たプログラムの例を示す図。
図14】分岐フラグ生成プログラムの例を示す図。
【発明を実施するための形態】
【0012】
以下、添付図面に従って本発明に係る実施の形態を詳細に説明する。
【0013】
[第1の実施形態]
図6は本実施形態における情報処理装置の概略構成を示す。実施形態では、開発対象の電子機器にて実行されるプログラムのクロックサイクル数を算出する装置を、パーソナルコンピュータ等の汎用情報処理装置で実現する例を示す。図示において、CPU710は装置全体の制御を司るものであり、ROM730、RAM720に格納されたプログラムを実行する。なお、ターゲットデバイスに実装させるプロセッサ(DSPやCPU等)と、図6に示すCPU710は異なるものとする。なお、開発対象の電子機器、それに実装されるプロセッサ、そのプロセッサで実行されるプログラムを、以下では、ターゲットデバイス、ターゲットCPU、ターゲットプログラムと言う。
【0014】
ROM730には、BIOS(Basic Input/Output System)やブートプログラムが格納されている。HDD740にはOS(オペレーティングシステム),クロックサイクル数算出のプログラムをはじめとする各種プログラム、更には、各種データファイルが格納されているものとする。IO760は入出力部であり、データを保持している外部機器に接続されることで実行サイクル数を求めるプログラム等データの入出力が可能なインターフェースである。例えば、このIO760を介して、ターゲットデバイスに実装しようとするターゲットプログラムを入力し、HDD740に格納される。バス750は、ROM730、RAM720、CPU710、HDD740およびIO760間でデータやコマンドを伝達可能に接続する。
【0015】
上記構成において、本装置の電源がONになると、CPU710はROM730のブートプログラムを実行し、HDD740からOSをRAM720にロードすることで、本装置が汎用の情報処理装置として機能する。そして、ユーザの指示に応じてクロックサイクル数算出アプリケーションがHDD740からRAM720にロードされ、CPU710により実行されることで、本装置が、ターゲットプログラムの実行クロックサイクル数算出装置として機能することになる。なお、ターゲットデバイスにて実行されるプログラム(ターゲットCPUが実行するプログラム)を格納したファイルが、既にHDD740に格納されているものとして説明する。また、ターゲットCPUが実行可能な命令の詳細を表すテーブル(ターゲットCPU命令テーブル)のファイルもHDD740に格納されているものとする。
【0016】
以下、本装置が、実行サイクル数算出装置(特定のマイクロコンピュータ・CPU・DSP等で所望の処理を実施させた場合の処理クロックサイクル数を見積もる処理装置)として機能した場合の構成と動作の詳細を説明する。
【0017】
本装置を構成する要素は以下の通りである。なお、以下の要素をいくつか組み合わせて1の要素にしても構わない。
・ターゲットCPUで実行可能な命令語系列によって構成された第1のプログラム(ターゲットプログラム)の構造・意味を分析するための構造・意味解析部(101)。
・第1のプログラムと、構造・意味解析部(101)で生成された構造・意味情報とから、変数を抽出するための変数抽出部(102)。
・第1のプログラムと構造・意味解析部(101)で生成された構造・意味情報から特定命令を抽出する特定命令抽出部(103)。
・第1のプログラムと、ターゲットCPU命令テーブル、特定命令抽出部(103)で生成された特定命令情報から第1のプログラムを複数の部分プログラムに分割し、各部分プログラムの実行クロックサイクル数を算出するためのプログラム分割部(104)。
・第1のプログラムの構造・意味情報と、プログラム分割部によって生成された部分プログラムサイクル数データから部分プログラムどうしの接続、移行フローを表す部分プログラム接続・移行フローデータ生成部(105)。
・第1のプログラムの構造・意味情報と、変数抽出部(102)で生成された変数情報から、プロセッサ非依存の第2のプログラムを生成するための逆コンパイル部(106)。
・逆コンパイル部から生成された第2のプログラムと特定命令情報から、フラグ生成するためのプロセッサ非依存の第3のプログラム(フラグ生成プログラム)を生成するフラグ生成処理付加部(107)。
・フラグ生成処理付加部で生成された第3のプログラムを実行形式に変換するコンパイル部(108)。
・コンパイル部(108)で生成された実行形式の第3のプログラムを実行しフラグ系列を生成するための第3のプログラム実行部(109)。
・部分プログラム接続・移行フローデータと第3のプログラム実行形式実行部で生成されたフラグ系列データから、第1のプログラムを特定のマイクロコンピュータ・CPU・DSP等で実行させた場合に要するクロックサイクル数を算出するサイクル数積算部(110)。
【0018】
以下、上記構成における処理クロックサイクル数を見積もる処理装置の動作について説明する。
【0019】
先ず、構造・意味解析部(101)が、HDD740に格納されたターゲットプログラムのファイルをRAM720にロードする。そして、構造・意味解析部(101)が、同じくHDD740に格納されたターゲットCPU命令テーブルを参照し、RAM720にロードしたターゲットプログラムの意味・構造を解析する。
【0020】
図7は、ターゲットCPU命令テーブルの例を示している。このテーブルは、マシン語の先頭のコード+可変部分と、サイズを表すバイト数、ニーモニック、意味、クロックサイクルA,B、及び、抽出フラグで構成される。なお、マシン語は、人間にとって直接的にはその意味を理解するのは難しい。それ故、図示のテーブルには、マシン語に対応するニーモニック(オペコード、オペランド)を示したが、かかるニーモニックがクロックサイクル数の算出に必要なわけではない。あくまで実施形態における技術的意味を助けるために用意したものと理解されたい。また、クロックサイクル数としてA,Bの2種類を示したが、クロックサイクル数Aは、レジスタに即値を格納する等の非条件分岐命令、及び、「条件成立時」の条件分岐命令のクロックサイクル数を示す。一方、クロックサイクル数Bは、条件不成立時の分岐命令のクロックサイクル数を示す。よって、非条件分岐命令には、クロックサイクル数Bに相当するクロックサイクル数が無い。また、一般に、CPUは、プログラムカウンタ(以下、PCと略す)で示される アドレス位置から命令の読み出し、実行すると共に、その際に命令サイズをPCに加算することで、次に読み出す命令をアドレスを更新することを繰り返す。条件分岐命令は、条件が成立した場合に強制的にPCの値を変更し、条件不成立の場合には通常の更新処理を行うものである。それ故、条件成立時には、条件不成立時と比較し、PCの更新に係るクロックサイクルを必要とする。すなわち、条件成立時、不成立時で必要とするクロックサイクル数が異なる。また、抽出フラグは、後述する特定命令抽出部(103)が、ターゲットプログラムから抽出すべき命令であるか否かを示すものであり、“1”が抽出対象であることを示し、“0”は非抽出対象であることを示している。なお、図7では、1つのテーブルでいくつもの情報を表すようにしているが、複数のテーブル(ファイル)に図7と同じ内容を表すようにしても良い。例えば、抽出対象命令は、別途ファイルやテーブルで特定されても構わない。
【0021】
ここで、ターゲットCPUが実行するマシン語に対するニーモニックについて若干説明する。「MOV R1, IMM」(Rdのdは1,2,…)は、レジスタRdに即値IMMを代入することを示す。「STW R1, R2, DSP」 は、レジスタR2が示すアドレスに値DSPを加算して得られる(メモリ上の)アドレス位置に、レジスタR1の値を格納することを示す。つまり、DSPはオフセットアドレスを表していると言えば分かりやすい。「LDW R1, R2, DSP」は、レジスタR2が示すアドレスに値DSPを加算で示される(メモリ上の)アドレス位置に格納された値を、レジスタR1に代入することを示す。「BGE R1, R2, DSP」は、条件「R1≧R2」が成立するとき、現在のPCにDSPを加算した値を新PCとする(相対的アドレスDSPへ分岐する)ことを示している。条件が不成立の場合には、PCは条件分岐命令のサイズ分だけ単純増加させるだけである。また、「BLT R1, R2, DSP」は、条件「R1<R2」が成立するとき、相対的アドレスDSPへ分岐することを示している。条件不成立の場合は、PCは条件分岐命令のサイズ分だけ単純増加させるだけである。
【0022】
図8は、HDD740からRAM720に読出された第1のプログラム(ターゲットプログラム)のニーモニック形式で示した図である。実際はマシン語の表現であるが、分かりやすくするためにニーモニック表記にした。また、条件分岐命令については、条件成立時にPCに加算すべき値を示すべきであるが、理解しやすくするため分岐先をラベルを付けて示している。なお、マシン語から、ラベル(図示の表記「Lbl_x」)を付したニーモニック表現にすること自身は周知のものである。図示において、表記Rx は、ターゲットCPUが有するレジスタを表している。Lbl_x はプログラムの分岐先を示すラベルを表している。実際は、条件が成立した場合、 PCに、オペランドで示される値を加算することで、PCを更新することになる。
【0023】
構造・意味解析部101は、図8に示す第1のプログラム(ターゲットプログラム)の構造、意味を解釈する。そして、命令単位に、その命令の意味の解析結果を生成していく。図9は、解析結果を模式的に示すものであり、各行の#印より右側がその解釈結果を示している。
【0024】
例えば3行目のニーモニック「STW R5,R1,0」の解釈結果としての『M「R1+0」←R5』は、レジスタR1の値に0を加算した(メモリの)アドレス位置に、レジスタR5の値を代入(格納)することを示している。
【0025】
次に、変数抽出部(102)が、図9の解釈結果を参照して「変数」を抽出する。変数は、メモリ上に置かれた値であると考えて構わない。それ故、メモリを参照している箇所が変数を利用していると考えて良い。従って、図9の解釈結果の3行目の「M[R1+0]が変数の代表的なものと考えて良い。変数は、その格納アドレスが異なれば、それらは別の変数であるものとしてみなせる。そこで、変数抽出部(102)は、メモリを参照するアドレス位置が異なる変数を見つけるたびに、i0,i1,i2…と変数を定義していく。
【0026】
図10が変数抽出部(102)による変数抽出結果を示している。#印の右側にi0,i1,i2…で示すのが変数である。
【0027】
特定命令抽出部(103)は、第1のプログラムを解析し、予め指定された特定命令の抽出処理を行う。特定命令は、例えば、戻り先指定分岐、条件付き分岐、戻り先指定条件分岐処理など、実行結果によって実行サイクル数や次実行命令が異なる命令である。本実施形態では、単純に分岐命令を抽出対象とする。
【0028】
図8のプログラムの場合、特定命令抽出部(103)が抽出するのは、次の6個の命令となる。
BGE R2,R3,Lbl1_1 # R2 ≧ R3 then PC ← Lbl_1
BLT R6,R7,Lbl1_2 # R6 < R7 then PC ← Lbl_2
BGE R10,R11,Lbl1_3 # R10 ≧ R3 then PC ← Lbl_3
BNE R15,R2,Lbl1_4 # R15!= R2 then PC ← Lbl_4
JMP LBl_5 # PC←Lbl_5
BLT R5,R6,Lbl_6 # R5 < R6 then PC ← Lbl_6
【0029】
プログラム分割部(104)は、図8のプログラムを、特定命令情報(103)が抽出した各特定命令を区切りとする複数の部分プログラムに分割する。なお、最後の特定命令から、プログラムの終端までは、例外的に部分プログラムとする。従って、プログラム分割部(104)は、図8のプログラムから7つの部分プログラムを生成することになる。
【0030】
また、プログラム分割部(104)は、各部分プログラムのサイクル数を算出する。各命令のクロックサイクル数は、ターゲットCPUの命令テーブル(図7参照)を参照することで得られるので、その累積加算結果がその部分プログラムのクロックサイクル数となる。
【0031】
図11(a)乃至(c)、図12(a)乃至(d)は、プログラム分割部(104)で生成された部分プログラム(部分プログラム1乃至7)である。各部分プログラムの下段には、その部分プログラムの実行時のクロックサイクル数を示している。図7(a)の部分プログラム1のクロックサイクル数「15,16」とあるのは、その部分プログラムの最後の命令「BGE R2,R3,Lbl1_1」における条件「R2≧R3」が不成立の場合のクロックサイクル数が15、成立の場合のクロックサイクル数が16であることを示している。他の部分プログラムも同様である。ただし、部分プログラム5(図12(b))、部分プログラム7には、条件分岐命令が含まれていないいので、要求されるクロックサイクルは1種類のみとなる。
【0032】
部分プログラム接続・移行フローの生成部(105)は、構造・意味情報、部分プログラムサイクル数データから、部分プログラム接続・移行フローを生成する。図2は、部分プログラム接続・移行フローデータ記載事項を説明するチャートである。図示のごとく、部分プログラム1乃至7それぞれに」ついて、所要クロックサイクル数、部分プログラム間の遷移についての情報が記述される。なお、図2における分岐判断が、各部分プログラムの終端の条件分岐命令に相当する。条件分岐の条件が成立する場合がyes、不成立の場合がNoである。換言すれば、条件が成立する場合には、クロックサイクル数が多い方が選択され、条件が不成立の場合にはクロックサイクル数が少ない方が選択されるものとみることもできる。
【0033】
逆コンパイル部(106)は、構造・意味解析部(101)で得られた解析結果(図8)、変数抽出部(102)で得られた変数抽出結果(図10)から、ターゲットプログラムと実質的に等価の第2のプログラムを生成する。実施形態における逆コンパイル部(106)は、特定のマイクロコンピュータ・CPU・DSP等に依存しない言語で第2のプログラムのソースを記述する。実施形態では、この言語としてC言語を用いるものとする。
【0034】
図13は、逆コンパイル部(106)が生成した第2のプログラムの例を示している。図13におけるプログラムにおいて、変数i0,i1,i2,i3,i4は抽出した変数でもある。そして、意味解析結果に基づきforループで既出しているのが、同図である。
【0035】
フラグ生成処理付加部(107)は、上記の逆コンパイル部(106)が生成した第2のプログラムと、先に説明した特定命令情報から、特定命令実行に関するフラグを生成するための第3のプログラムを生成する。この第3のプログラムは、要するに、図2のプログラムを実行した際に、各分岐の真理値であるフラグを生成するプログラムと言えば分かりやすい。
【0036】
図14は、フラグ生成処理付加部(107)が生成した第3プログラムのソースを示している。分かりやすいように、「//」の右側にコメントを付した。また、printf関数内に記述されている文字列「BP_x 0」または「BP_x 1」における後端の0、1はそれぞれ条件が不成立、成立のいずれかを示すフラグを示している。なお、文字列「BP_x」は、どのステップのprintf関数で出力されたかを示すためであって、実際には不要である。
【0037】
コンパイル部(108)は、この第3のプログラムをコンパイルする。このコンパイルで生成される実行形式プログラムは、CPU710が実行できるものである。そこで、第3のプログラム実行部(109)がコンパイルしたプログラムを実行する。この実行の結果、以下のような結果が得られる。
BP_1 0
BP_1 0

各行の最後の0、1が、目的とするフラグであるので、それらフラグを出現順に接続することで、以下のフラグ系列を得ることができる。
“00101100110010”
ここで、1は条件成立、0が不成立を示していることになるのは、これまでの説明から明らかである。
【0038】
サイクル数積算部(110)は、得られたフラグ系列を、部分プログラム接続・移行フローに適用し、その際の各部分プログラムの追跡し、その際のクロックサイクル数を累積加算していくことで、第1のプログラムの実行クロックサイクル数を算出する。
【0039】
例えば、フラグ系列の最初のフラグは0である。故に、図2のフローチャートに従えば、最初の部分プログラム1の条件分岐命令の条件が不成立となることを示すので、部分プログラム1の実行クロックサイクル数は「15」と確定する。しかも、次に部分プログラム2に移行することも確定する。フラグ系列の2番目のフラグも0である。従って、部分プログラム2の条件分岐命令の条件が不成立となることを示すので、部分プログラム2の実行クロックサイクル数は「16」と確定する。しかも、次に部分プログラム3に移行することも確定する。以下同様に、フラグ系列に従って、各部分プログラムのクロックサイクル数を確定していく。
【0040】
本実施形態の場合、部分プログラム1乃至7を、P1,P2…と表現したとき、先に示したフラグ系列に従うと、部分プログラムの実行シーケンスは次のようになる。
P1→P2→P3→P3→P4→p6→p2→p3→p4→p6→p2→p3→p4→p6→p7
このシーケンスにおけるプログラム開始から終了までのクロックサイクルとその合計は次のようになる。
15+16+25+24+7+14+16+24+7+14+16+24+7+13+4 = 226
よって、サイクル数積算部(110)が、「226」を、ターゲットプログラムの実行クロックサイクル数として出力する。出力先はファイルとして出力しても良いし、表示画面に表示しても良く、出力先は問わない。
【0041】
以上説明したように本実施形態によれば、ターゲットデバイスのターゲットCPUが実行するターゲットプログラムを格納したファイル、ターゲットCPUが解釈実行する命令と、各命令のクロックサイクル、並びに、命令の意味を有する命令セットテーブルを格納したファイル(図7参照)があれば、ターゲットデバイスとは異なるハードウェアや異なる環境(異なるCPU)であっても、精度よく実行クロックサイクル数を算出できる。
【0042】
なお、実施形態では、特定命令抽出部が抽出する命令として分岐命令としたが、プログラムカウンタを操作する命令が望ましい。例えば、プログラムカウンタをプッシュし、書き換えるサブルーチンコール命令(条件の有無を問わない)、ソフトウェア割り込み命令、プログラムカウンタをポップするリターン命令等を含めても良い。
【0043】
また、本発明の技術内容の理解を容易にするために、簡単な例で示した。実際の電子機器を開発する場合のターゲットプログラムのサイズは、実施形態で示したものよりも遥かに大きなものとなる。また、実際のターゲットプログラムは、そのターゲットプログラム内で閉じた環境で実行するのではなく、外部環境パラメータや外部データに依存して実行することも多い。例えば、画像データを符号化するターゲットプログラムの場合には、符号化対象の画像データを参照して符号化データを生成することになるだろうし、その際の符号化シーケンスは、その符号化対象の画像データに依存したものとなる。そのような場合には、クロックサイクル数算出を行う情報処理装置に、符号化対象の画像データを予め用意した上で、上記の第2のプログラム、第3のプログラムを作成することになろう。
【0044】
また、実施形態における逆コンパイル部で生成するプログラムの言語をC言語、第3のプログラムもC言語を例にして説明したが、利用するコンピュータ言語はこれに限らない。また、第3のプログラムをコンパイルする例を示したが、CPU720の処理能力が十分である、もしくはターゲットプログラムのサイズが許容できるサイズである場合には、第3のプログラムを他の高級言語で表現し、インタープリタにより実行しても構わない。
【0045】
以上、抽出する特定命令を条件付き分岐命令、取得する属性情報を分岐条件の成立・不成立を表すフラグとして実施例を説明したが、本提案は命令の実行サイクル数が実行状況に応じて定まる命令を有するプログラムの実行サイクル数算出について有効である。
【0046】
例えば、前記特定のマイクロコンピュータ、CPU等がキャッシュメモリを含むメモリシステムを構成要素としている場合も有効である。キャッシュメモリへのヒット・ミス、あるいはキャッシュメモリ操作命令によりプログラムの実行クロックサイクル数が変化する。この場合、抽出する特定命令をロード・ストア命令、生成する属性情報を前記キャッシュメモリに対するヒット・ミスに関するフラグ情報、あるいはメモリアドレスとすれば同様に、実際の実行サイクル数を算出できる。
(その他の実施例)
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。
【符号の説明】
【0047】
101…構造・意味解析部、102…変数抽出部、103…特定命令抽出部、104…プログラム分割部、105…部分プログラム接続・移行フロー生成部、106…逆コンパイル部、107…フラグ生成処理付加部、108…コンパイル部、109…第3のプログラム実行部、110…サイクル数積算部
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14