図面 (/)

技術 デバッグ支援装置、並列実行情報生成装置、及びこれらに適用されるプログラムを記録した記録媒体

出願人 パナソニック株式会社
発明者 田中裕久角史生小谷謙介田中旭
出願日 1998年1月7日 (22年2ヶ月経過) 出願番号 1998-001407
公開日 1999年7月21日 (20年7ヶ月経過) 公開番号 1999-194957
状態 拒絶査定
技術分野 先行制御 デバッグ/監視
主要キーワード 開閉ステップ パッチ当て 補償コード 検証指示 開閉指示 ブックキーピング 最適化情報 キータイプ
関連する未来課題
重要な関連分野

この項目の情報は公開日時点(1999年7月21日)のものです。
また、この項目は機械的に抽出しているため、正しく解析できていない場合があります

図面 (17)

課題

複数の命令並列実行するプロセッサにおいて、ユーザプログラム上で全ての並列実行される行を表示するデバッグ支援装置を提供する。

解決手段

コード実行部15においてプログラムを実行する。プログラムの実行が、予め設定されたブレークポイントで停止すると、ユーザインターフェィス部11はブレークポイントに対応するソースコード文を表示すると共に、そのブレークポイントに対応する並列実行行を並列実行情報記憶部5より検索して、並列実行行に関しての表示を行う。これによりユーザは次に並列実行される行を視覚的に理解することが出来る。

概要

背景

近年、並列実行方式が多くのマイクロプロセッサ開発計画に採用されている。ここでいう並列実行とは、一マシンサイクル当たりに複数個命令を実行できるものをいい、その典型的なものには、スーパースカラ方式と、VLIW方式とがある。

スーパースカラ方式とは、プロセッサ内部の専用回路が並列実行可能な命令を動的に解析して、それらの命令を複数の命令実行ユニットに個別に実行させる方式をいう。スーパースカラー方式は、逐次実行方式互換性を持つことができるという利点を有する。即ち、逐次実行方式のプロセッサ向けにコンパイラが生成したオブジェクトコードをスーパースカラー方式プロセッサはそのまま実行できるのである。その反面、並列実行可能な命令を動的に解析するために専用ハードウェアプロセッサ側実装する必要があり、ハードウェアコストの増大を招いてしまうという欠点もある。

VLIW(Very Long Instruction Word)方式とは、プロセッサ側の語長がオブジェクトコードとして生成される命令の語長の整数倍目安に定められており、整数倍単位の語長を有する長語命令VLIW命令)に並列実行可能と解析された命令を複数格納して、格納されたそれぞれの命令を複数の命令実行ユニットに個別に実行させる方式をいう(オブジェクトコードである命令間の並列実行の可能性を解析し、VLIW命令に格納する処理をスケジューリングという。またVLIW命令との区別を明確にするため、オブジェクトコードである命令をオブジェクトコード側命令という)。

この方式では、命令実行時に命令が並列実行可能かどうかをプロセッサ側で判定する必要がないので、ハードウェアの実装量が少なくて済む反面、VLIW命令一語内の全ての命令格納場所がオブジェクトコード側命令で満たされない場合が多々ある。この場合、オブジェクトコード側命令で満たされない場所にnopコードが挿入されるので、このnopコードの分だけコードサイズ水増しされてしまい、メモリ規模の増大を招いてしまうという欠点がある。

とはいえVLIW方式では、VLIW命令に対するオブジェクトコード側命令の格納方式が改善されればnopコードの挿入量を削減できる可能性があり、ハードウェアコスト削減の可能性という観点からみればVLIW方式の将来性に期待がかかる。

概要

複数の命令を並列実行するプロセッサにおいて、ユーザプログラム上で全ての並列実行される行を表示するデバッグ支援装置を提供する。

コード実行部15においてプログラムを実行する。プログラムの実行が、予め設定されたブレークポイントで停止すると、ユーザインターフェィス部11はブレークポイントに対応するソースコード文を表示すると共に、そのブレークポイントに対応する並列実行行を並列実行情報記憶部5より検索して、並列実行行に関しての表示を行う。これによりユーザは次に並列実行される行を視覚的に理解することが出来る。

目的

本発明の目的は、プログラマ記述したソースプログラムと、VLIW命令列とのギャップが激しい場合であっても、VLIW命令列の動作検証時における不具合の原因をソースプログラムから探し出すことができるデバッグ支援装置及び並列実行情報生成装置を提供することである。

効果

実績

技術文献被引用数
5件
牽制数
4件

この技術が所属する分野

ライセンス契約や譲渡などの可能性がある特許掲載中! 開放特許随時追加・更新中 詳しくはこちら

請求項1

操作者による長語命令列の検証作業支援するデバッグ支援装置であって、並列実行性が成立するソースコード文を特定する行番号であって、翻訳後の命令が共通の長語命令に格納されたものの行番号の組みと、格納先の長語命令との対応づけを示す並列実行情報を記憶する第1記憶手段と、ソースプログラムにおける何れかのソースコード文の行番号を用いての検証指示を操作者から受け付ける受付手段と、検証指示に用いられた行番号を含む並列実行情報を第1記憶手段から読み出す読出手段と、読み出された当該並列実行情報内にソースコード文の行番号とは別のソースコード文の行番号が含まれているなら、当該別のソースコード文に関する表示を行う表示手段とを備えることを特徴とするデバッグ支援装置。

請求項2

前記表示手段は、検証指示に用いられた行番号のソースコード文を含む部位のプログラムリストを表示する第1リスト表示部と、当該検証指示においての行番号と同一の並列実行情報に別のソースコード文の行番号が含まれているなら、当該別のソースコード文を含む部位のプログラムリストを表示する第2リスト表示部と、第1、第2リスト表示部により表示されたプログラムリストのうち、読出手段により読み出された当該並列実行情報内に含まれているソースコード文を修飾する修飾部とを備えることを特徴とする請求項1記載のデバッグ支援装置。

請求項3

前記デバッグ支援装置は、読出手段により読み出された並列実行情報において対応づけられた長語命令をプロセッサに実行させる実行制御手段を備え、前記表示手段は、プロセッサによる長語命令列の実行に伴って、修飾部により修飾されるソースコード文を変更する修飾対象変更部を備えることを特徴とする請求項2記載のデバッグ支援装置。

請求項4

前記検証指示には、ソースプログラムにおける何れかのソースコード文の行番号をスタート行として指定した長語命令列の実行指示があり、前記修飾部は、プログラムリストにおいてスタート行に対応するソースコード文及び当該ソースコード文と並列実行情報により対応づけられているソースコード文に修飾を施し、前記実行制御手段は、当該並列実行情報において対応づけられた長語命令のアドレススタートアドレスとして長語命令列をプロセッサに実行させることを特徴とする請求項3記載のデバッグ支援装置。

請求項5

前記検証指示には、ソースプログラムにおける何れかのソースコード文の行番号をブレークポイントとして指定したブレークポイント設定指示があり、前記デバッグ支援装置は、並列実行情報において検証指示に用いられた行番号に対応するソースコード文と対応づけられた長語命令のアドレスにブレークポイントを設定するブレークポイント設定手段を備え、前記修飾対象変更部は、プロセッサによる長語命令列の実行が、ブレークポイント設定手段によって設定されたブレークポイントにより中断すると、実行が中断したソースコード文及びその行番号が当該ソースコード文と同じ並列実行情報に格納されているソースコード文に修飾対象を変更することを特徴とする請求項4記載のデバッグ支援装置。

請求項6

前記表示手段は、ウィンドウ開閉指示に従って、表示用ウィンドウを開くウィンドウ開閉部を備え、前記第1、第2リスト表示部は、ウィンドウ開閉部にウィンドウ開閉指示を発してウィンドウを開かせ、当該ウィンドウ上に行番号のソースコードを含む部位のプログラムリストを配置することを特徴とする請求項5記載のデバッグ支援装置。

請求項7

前記第1表示部は、ウィンドウ開閉部にウィンドウ開閉指示を発してウィンドウを表示させ、当該ウィンドウ上に行番号のソースコードを含む部位のプログラムリストを配置し、前記第2リスト表示部は、第1表示部によりソースコード文が配置された後のウィンドウに、所定サイズの余白があるかを判定する判定部と、所定サイズの余白がない場合、ウィンドウ開閉部にウィンドウ開閉指示を発して別のウィンドウを表示させ、当該ウィンドウ上で当該ソースコード文を含む部位のプログラムリストを表示することを特徴とする請求項6記載のデバッグ支援装置。

請求項8

前記ウィンドウ開閉部は、分割指示に従って、表示用ウィンドウを分割するウィンドウ分割部を備え、前記第1表示部は、ウィンドウ開閉部にウィンドウ開閉指示を発してウィンドウを表示させ、当該ウィンドウ上に行番号のソースコードを含む部位のプログラムリストを配置し、前記第2リスト表示部は、第1表示部によりソースコード文が配置された後のウィンドウに、所定サイズの余白があるかを判定する判定部と、所定サイズの余白がない場合、ウィンドウ分割部に分割指示を発してウィンドウを分割させ、当該ウィンドウ上でソースコードを含む部位のプログラムリストを表示することを特徴とする請求項6記載のデバッグ支援装置。

請求項9

並列実行情報に含まれている行番号の何れかにはスケジューリングに関する情報が付されており、前記表示手段は、第1、第2リスト表示部によりリスト表示されたソースコード文の行番号にスケジューリングに関する情報が付されている場合、その旨を通知する通知部を備えることを特徴とする請求項1〜8の何れかに記載のデバッグ支援装置。

請求項10

請求項1〜9の何れかに記載のデバッグ支援装置が用いる並列実行情報を生成する並列実行情報生成装置であって、長語命令列における各長語命令のアドレスを見出欄として有し、それら長語命令列に対応する記入欄とを有する第2記憶手段と、ソースプログラムにおける各ソースコード文の行番号と、それらを翻訳して得られた命令を記憶する第3記憶手段と、長語命令列における長語命令を取り出す取出手段と、取り出された長語命令列に格納されているそれぞれの命令が何れのソースコード文を生成元としているかを判定する判定手段と、取り出された長語命令列のアドレスを見出欄とした前記第2記憶手段の記入欄に、生成元として判定されたソースコード文の行番号を書き込む書込手段と、ソースコード文の行番号が書き込まれると、長語命令列における次の長語命令を取り出すよう取出手段を制御する制御手段と取り出手段による取り出しが、長語命令列における全ての長語命令について行われると、第2記憶手段に得られた記入欄の内容に基づいて並列実行情報を生成する生成手段とを備えることを特徴とする並列実行情報生成装置。

請求項11

前記並列実行情報生成装置は取り出された長語命令列に格納されている命令が何れのソースコード文を生成元としているかが判定手段により判定されると、当該ソースコード文にスケジューリングに関する情報が付されているかを判定する検出手段を有し、前記書込手段は、スケジューリングに関する情報が検出された場合、取り出された長語命令列のアドレスを見出欄とした記入欄に、生成元として判定されたソースコード文の行番号と共にスケジューリングに関する情報を書き込むことを特徴とする請求項10記載の並列実行情報生成装置。

請求項12

操作者による長語命令列の検証作業を支援するデバッグ支援装置に適用されるプログラムを記録した記録媒体であって、デバッグ支援装置は並列実行性が成立するソースコード文を特定する行番号であって、翻訳後の命令が共通の長語命令に格納されたものの組みと、格納先の長語命令との対応づけを示す並列実行情報を記憶する第1記憶手段を有し、前記プログラムは、ソースプログラムにおける何れかのソースコード文の行番号を用いての検証指示を操作者から受け付ける受付ステップと、検証指示に用いられた行番号を含む並列実行情報を第1記憶手段から読み出す読出ステップと、読み出された当該並列実行情報内にソースコード文の行番号とは別のソースコード文の行番号が含まれているなら、当該別のソースコード文に関する表示を行う表示ステップとを備えることを特徴とする記録媒体。

請求項13

記録媒体に記録されるプログラムにおける表示ステップは、検証指示に用いられた行番号のソースコード文を含む部位のプログラムリストを表示する第1リスト表示サブステップと、当該検証指示においての行番号と同一の並列実行情報に別のソースコード文の行番号が含まれているなら、当該別のソースコード文を含む部位のプログラムリストを表示する第2リスト表示サブステップと、第1、第2リスト表示サブステップにより表示されたプログラムリストのうち、読出ステップにより読み出された当該並列実行情報内に含まれているソースコード文を修飾する修飾サブステップとを備えることを特徴とする請求項12記載の記録媒体。

請求項14

記録媒体に記録されるプログラムは、読出ステップにより読み出された並列実行情報において対応づけられた長語命令をプロセッサに実行させる実行制御ステップを備え、前記表示ステップは、プロセッサによる長語命令列の実行に伴って、修飾サブステップにより修飾されるソースコード文を変更する修飾対象変更サブステップを備えることを特徴とする請求項13記載の記録媒体。

請求項15

記録媒体に記録されるプログラムにおける検証指示には、ソースプログラムにおける何れかのソースコード文の行番号をスタート行として指定した長語命令列の実行指示があり、前記修飾サブステップは、プログラムリストにおいてスタート行に対応するソースコード文及び当該ソースコード文と並列実行情報により対応づけられているソースコード文に修飾を施し、前記実行制御ステップは、当該並列実行情報において対応づけられた長語命令のアドレスをスタートアドレスとして長語命令列をプロセッサに実行させることを特徴とする請求項14記載の記録媒体。

請求項16

記録媒体に記録されるプログラムにおける検証指示には、ソースプログラムにおける何れかのソースコード文の行番号をブレークポイントとして指定したブレークポイント設定指示があり、前記デバッグ支援装置は、並列実行情報において検証指示に用いられた行番号に対応するソースコード文と対応づけられた長語命令のアドレスにブレークポイントを設定するブレークポイント設定ステップを備え、前記修飾対象変更サブステップは、プロセッサによる長語命令列の実行が、ブレークポイント設定ステップによって設定されたブレークポイントにより中断すると、実行が中断したソースコード文及びその行番号が当該ソースコード文と同じ並列実行情報に格納されているソースコード文に修飾対象を変更することを特徴とする請求項15記載の記録媒体。

請求項17

記録媒体に記録されるプログラムにおける表示ステップは、ウィンドウ開閉指示に従って、表示用ウィンドウを開くウィンドウ開閉サブステップを備え、前記第1、第2リスト表示サブステップは、ウィンドウ開閉サブステップにウィンドウ開閉指示を発してウィンドウを開かせ、当該ウィンドウ上に行番号のソースコードを含む部位のプログラムリストを配置することを特徴とする請求項16記載の記録媒体。

請求項18

記録媒体に記録されるプログラムにおける第1表示サブステップは、ウィンドウ開閉サブステップにウィンドウ開閉指示を発してウィンドウを表示させ、当該ウィンドウ上に行番号のソースコードを含む部位のプログラムリストを配置し、前記第2リスト表示サブステップは、第1表示サブステップによりソースコード文が配置された後のウィンドウに、所定サイズの余白があるかを判定する判定サブステップと、所定サイズの余白がない場合、ウィンドウ開閉サブステップにウィンドウ開閉指示を発して別のウィンドウを表示させ、当該ウィンドウ上で当該ソースコード文を含む部位のプログラムリストを表示することを特徴とする請求項17記載の記録媒体。

請求項19

記録媒体に記録されるプログラムにおけるウィンドウ開閉ステップは、分割指示に従って、表示用ウィンドウを分割するウィンドウ分割サブステップを備え、前記第1表示サブステップは、ウィンドウ開閉サブステップにウィンドウ開閉指示を発してウィンドウを表示させ、当該ウィンドウ上に行番号のソースコードを含む部位のプログラムリストを配置し、前記第2リスト表示サブステップは、第1表示サブステップによりソースコード文が配置された後のウィンドウに、所定サイズの余白があるかを判定する判定サブステップと、所定サイズの余白がない場合、ウィンドウ分割サブステップに分割指示を発してウィンドウを分割させ、当該ウィンドウ上でソースコードを含む部位のプログラムリストを表示することを特徴とする請求項17記載の記録媒体。

請求項20

並列実行情報に含まれている行番号の何れかにはスケジューリングに関する情報が付されており、デバッグ支援装置における表示ステップは、第1、第2リスト表示サブステップによりリスト表示されたソースコード文の行番号にスケジューリングに関する情報が付されている場合、その旨を通知する通知サブステップを備えることを特徴とする請求項12〜19の何れかに記載の記録媒体。

請求項21

何れかに記載のデバッグ支援装置が用いる並列実行情報を生成する並列実行情報生成装置に適用されるプログラムを記録した記録媒体であって、前記並列実行情報生成装置は長語命令列における各長語命令のアドレスを見出欄として有し、それら長語命令列に対応する記入欄とを有する第2記憶手段と、ソースプログラムにおける各ソースコード文の行番号と、それらを翻訳して得られた命令を記憶する第3記憶手段とを有し、前記プログラムは、長語命令列における長語命令を取り出す取出ステップと、取り出された長語命令列に格納されている命令が何れのソースコード文を生成元としているかを判定する判定ステップと、取り出された長語命令列のアドレスを見出欄とした前記第2記憶手段の記入欄に、生成元として判定されたソースコード文の行番号を書き込む書込ステップと、ソースコード文の行番号が書き込まれると、長語命令列における次の長語命令を取り出すよう取出ステップを制御する制御ステップと、取り出ステップによる取り出しが、長語命令列における全ての長語命令について行われると、第2記憶手段に得られた記入欄の内容に基づいて並列実行情報を生成する生成ステップとを備えることを特徴とする請求項12〜20の何れかに記載の記録媒体。

請求項22

並列実行情報生成装置は取り出された長語命令列に格納されている命令が何れのソースコード文を生成元としているかが判定ステップにより判定されると、当該ソースコード文にスケジューリングに関する情報が付されているかを判定する検出ステップを有し、前記書込ステップは、スケジューリングに関する情報が検出された場合、取り出された長語命令列のアドレスを見出欄とした記入欄に、生成元として判定されたソースコード文の行番号と共にスケジューリングに関する情報を書き込むことを特徴とする請求項21記載の記録媒体。

技術分野

0001

本発明は、長語命令列の検証作業支援するデバッグ支援装置と、コンパイラ装備されデバッグ支援装置が用いる並列実行情報を生成する並列実行情報生成装置と、これらに適用されるプログラムを記録した記録媒体に関する。

背景技術

0002

近年、並列実行方式が多くのマイクロプロセッサ開発計画に採用されている。ここでいう並列実行とは、一マシンサイクル当たりに複数個命令を実行できるものをいい、その典型的なものには、スーパースカラ方式と、VLIW方式とがある。

0003

スーパースカラ方式とは、プロセッサ内部の専用回路が並列実行可能な命令を動的に解析して、それらの命令を複数の命令実行ユニットに個別に実行させる方式をいう。スーパースカラー方式は、逐次実行方式互換性を持つことができるという利点を有する。即ち、逐次実行方式のプロセッサ向けにコンパイラが生成したオブジェクトコードをスーパースカラー方式プロセッサはそのまま実行できるのである。その反面、並列実行可能な命令を動的に解析するために専用ハードウェアプロセッサ側実装する必要があり、ハードウェアコストの増大を招いてしまうという欠点もある。

0004

VLIW(Very Long Instruction Word)方式とは、プロセッサ側の語長がオブジェクトコードとして生成される命令の語長の整数倍目安に定められており、整数倍単位の語長を有する長語命令(VLIW命令)に並列実行可能と解析された命令を複数格納して、格納されたそれぞれの命令を複数の命令実行ユニットに個別に実行させる方式をいう(オブジェクトコードである命令間の並列実行の可能性を解析し、VLIW命令に格納する処理をスケジューリングという。またVLIW命令との区別を明確にするため、オブジェクトコードである命令をオブジェクトコード側命令という)。

0005

この方式では、命令実行時に命令が並列実行可能かどうかをプロセッサ側で判定する必要がないので、ハードウェアの実装量が少なくて済む反面、VLIW命令一語内の全ての命令格納場所がオブジェクトコード側命令で満たされない場合が多々ある。この場合、オブジェクトコード側命令で満たされない場所にnopコードが挿入されるので、このnopコードの分だけコードサイズ水増しされてしまい、メモリ規模の増大を招いてしまうという欠点がある。

0006

とはいえVLIW方式では、VLIW命令に対するオブジェクトコード側命令の格納方式が改善されればnopコードの挿入量を削減できる可能性があり、ハードウェアコスト削減の可能性という観点からみればVLIW方式の将来性に期待がかかる。

発明が解決しようとする課題

0007

ところでVLIW方式では、どの複数のオブジェクトコード側命令をVLIW命令に格納するかをコンパイラに委ねているので、コンパイラが命令間の並列実行の可能性をより解析して高度なスケジューリングを行う程、プログラマ記述したソースプログラムと、VLIW命令列とのギャップ激しくなる傾向がある。

0008

そのためプログラマが実際にVLIW命令列をターゲットマシン上で動作させてみようとすると、VLIW方式プロセッサにより並列実行されているオブジェクトコード側命令が自分が記述したどのソースコードに対応するかが把握し辛く、自分が記述したどのソースコードと、どのソースコードとが並列に動作しているかがなかなか理解できない場合が多い。動作検証中にVLIW命令列の不具合発覚した場合、自分が記述したソースプログラムに含まれているどのソースコードがその不具合の原因であるかがなかなか究明できず、デバッグ作業に時間がかかるという問題点がある。プログラムのコーディングから実機上での動作検証までを高級言語一貫して行える開発環境、いわゆる『高級言語指向の開発環境』の整備が注目を浴びているが、オブジェクトコードがVLIW命令に格納されたために自分が記述したソースプログラムに含まれているどのソースコードが不具合の原因であるかがなかなか究明できないのならば、VLIW命令に対してのパッチ当て等のコード直接書換の手法によりその不具合を対処せざるをえないので、『高級言語指向の開発環境』が看板倒れになってしまう恐れがある。

0009

本発明の目的は、プログラマが記述したソースプログラムと、VLIW命令列とのギャップが激しい場合であっても、VLIW命令列の動作検証時における不具合の原因をソースプログラムから探し出すことができるデバッグ支援装置及び並列実行情報生成装置を提供することである。

課題を解決するための手段

0010

上記目的を達成するため、本発明のデバッグ支援装置は、操作者による長語命令列の検証作業を支援するデバッグ支援装置であって、並列実行性が成立するソースコード文を特定する行番号であって、翻訳後の命令が共通の長語命令に格納されたものの組みと、格納先の長語命令との対応づけを示す並列実行情報を記憶する第1記憶手段と、ソースプログラムにおける何れかのソースコード文の行番号を用いての検証指示を操作者から受け付ける受付手段と、検証指示に用いられた行番号を含む並列実行情報を第1記憶手段から読み出す読出手段と、読み出された当該並列実行情報内にソースコード文の行番号とは別のソースコード文の行番号が含まれているなら、当該別のソースコード文に関する表示を行う表示手段とを備えることを特徴としている。

発明を実施するための最良の形態

0011

以下、本発明の並列実行情報生成装置を装備したコンパイラ及びデバッグ支援装置の実施形態について図面を参照しながら説明する。図1は並列実行情報生成装置装備型のコンパイラの構成を示す図である。図1においてコンパイラは、プログラム記憶部1、生成コード記憶部2、デバッグ情報記憶部3、内部表現変換部6、第1コード生成部7、依存関係解析部8、第2コード生成部9、デバッグ情報生成部10から構成される。

0012

プログラム記憶部1は、ソースプログラムを記憶している。以降の説明では、プログラム記憶部1により記憶されているソースプログラムの一例を図8(a)に示すものとする。内部表現変換部6は、プログラム記憶部1からプログラムを読み込み、コンパイラ内で使用する内部表現への変換を行なう。

0013

尚、内部表現変換部6については、本発明の主眼ではないので、詳細な説明は省略する。第1コード生成部7は、内部表現変換部6で変換された内部表現に対して、効率の良い実行コードを生成するためのさまざまな最適化を実行した後、内部表現状態のソースコードに基づいて、オブジェクトコード列を生成する。図8(b)は、図8(a)に示すソースプログラム内のソースコードの一文からオブジェクトコードの命令がどのように生成したかを示す図であり、生成元のソースコードと、生成されたオブジェクトコードとの対応関係括弧記号『}』で表現している。

0014

尚、本明細書ではソースコードで記述された一文をソースコード文という。また第1コード生成部7についても内部表現変換部6同様、本発明の主眼ではないので、詳細な説明は省略する。依存関係解析部8は、第1コード生成部7によって最適化が施されたオブジェクトコードの間の依存関係を解析する。ここでいう依存関係とは、オブジェクトコード内のある命令による資源の操作と、別の命令による資源の操作との間に潜在する前後関係をいう。例えば図9(a)の一例では、命令2:「mov (_mem1),r1」におけるレジスタr1に対しての操作と、命令4:「add r1,r2」におけるレジスタr1に対しての操作との間には、命令2:「mov (_mem1),r1」においてレジスタr1に値を定義してから命令4:「add r1,r2」において値を使用するという命令間の前後関係が潜在することになる。

0015

命令2:「mov (_mem1),r1」、命令4:「add r1,r2」の間のように資源操作間に前後関係の潜在が明らかになった命令については、命令間に有方向のリンク有向辺)を形成し、それらの命令間に潜在している依存関係を具現化した非巡回有向グラフ(一般にDAGと呼ばれる。)を生成する。図10(a)〜(d)は、図9(b)に示した基本ブロック内に位置する命令間が有向辺にて連結して得られたDAGを示す。依存関係解析部8が生成したDAGにおいて有向辺が連結されなかった命令の組みは資源の使用に関して依存関係がないことが明示されたことになる。依存関係がないことが明示された命令は、並列に実行してもプログラムの動作に矛盾を生じないことが保証される。

0016

第2コード生成部9は、依存関係解析部8によって得られた依存関係情報を利用して第1コード生成部7によって生成された複数のオブジェクトコードの命令をVLIW命令内にパッケージしてゆくことにより、VLIW命令列を生成する。図10(a)のDAGにおいては、命令1:「save」−命令2:「mov (_mem1),r1」間、命令1:「save」−命令3:「mov (_mem2),r2」間には有向辺が形成されているが、命令2:「mov (_mem1),r1」、命令3:「mov (_mem2),r2」、命令5:「mov #0,r3」、命令6:「mov #1,r4」間には有向辺が形成されておらず、これらの命令間にはどのような資源に関しての依存関係も存在しないと解釈される。これらの命令2:「mov (_mem1),r1」〜命令5:「mov #0,r3」等、依存関係が存在しないオブジェクトコードは並列実行が可能であるから同じVLIW命令に配置する。

0017

図13に第2コード生成部9により生成されたVLIW命令列の一例を示す。VLIW命令列においてアドレス0x108のVLIW命令:「mov (_mem1),r1_mov (_mem2),r2」には命令2:「mov (_mem1),r1」及び命令3:「mov (_mem2),r2」がパッケージされ、アドレス0x110のVLIW命令3:「add r1,r2_mov #0,r3」には命令4:「add r1,r2」及び命令5:「mov #0,r3」がパッケージされていることがわかる。アドレス0x140のVLIW命令:「add r1,r3_add #1,r4」に命令11:「add r1,r3」及び命令12:「add #1,r4」が配置され、アドレス0x150のVLIW命令:「mul #2,r2_mov #0,r1」に命令14:「mul #2,r2」及び命令17:「mov #0,r1」が配置されていることがわかる。

0018

命令11:「add r1,r3」及び命令12:「add #1,r4」は共に図10(c)のDAGにおいて命令10:「mul r4,r1」をリンク元としており、互いに何の依存関係も有していない。命令14:「mul #2,r2」及び命令17:「mov #0,r1」も同様であり、図10(c)のDAGにおいて共に命令18:「restore」をリンク先としており、互いに何の依存関係も有していない。このように依存関係を持たない命令のペアが第2コード生成部9により共通のVLIW命令内にパッケージされているのである。

0019

デバッグ情報記憶部3は、各種デバッグ情報を保持している。ここでデバッグ情報とは、変換を行なうプログラムの行と変換後の実行コードのアドレスとの対応情報、内部表現状態のプログラムに対して第1コード生成部7によりどのような最適化がなされたかという過程を示す最適化情報、ソースプログラム内で用いられた変数と、レジスタ及びメモリ等の資源との対応関係を示す資源割付情報などの総称である。デバッグ情報記憶部3において留意すべきはデバッグ情報記憶部3は複数の行アドレス情報を記憶する行アドレス記憶部4、複数並列実行情報を記憶する並列実行情報記憶部5をその内部に備える点である。

0020

行アドレス記憶部4は行アドレス情報を記憶する。行アドレス情報とは、ソースプログラムの各行に位置するソースコードが、VLIW命令列においてどのVLIW命令に対応するかを示す情報であり、各ソースコード文の行番号と、そのソースコード文に相当するVLIW命令の相対アドレス記入するための記入欄とからなる。ソースコードが図8(a)及び図8(b)の一例であり、VLIW命令が図13の一例である場合の行アドレス情報を図11に示す。図8(b)を参照すれば、Line:5「a=mem1;」からは命令2:「mov (_mem1),r1」が生成されている。更に命令2:「mov (_mem1),r1」はVLIW命令列における相対アドレス0x108のVLIW命令2:「mov (_mem1),r1_mov (_mem2),r2」に格納されているので、図11に示す行番号Line:5は命令2:「mov (_mem1),r1」が格納されたVLIW命令2:「mov (_mem1),r1_mov (_mem2),r2」の相対アドレス0x108が対応づけられている。

0021

並列実行情報記憶部5は並列実行情報を記憶する。並列実行情報とは、VLIW命令列における各VLIW命令の実行が、ソースプログラムにおけるどのソースコードの実行と等価であるを示す情報であり、VLIW命令の相対アドレスと、VLIW命令に格納されたオブジェクトコード側命令の生成元となる全てのソースコード文の行番号の記入欄とからなる。ソースコードが図8(a)、図8(b)の一例である場合の並列実行情報を図12に示す。図8(b)を参照すれば、Line:5「a=mem1;」からは命令2:「mov (_mem1),r1」が生成され、Line:6「b=a+mem2;」からは命令3:「mov (_mem2),r2」及び命令4:「add r1,r2」が生成されている。更に命令2:「mov(_mem1),r1」、命令3:「mov (_mem2),r2」は共にVLIW命令列における相対アドレス0x108のVLIW命令2:「mov (_mem1),r1_mov (_mem2),r2」にパッケージされているので行番号Line:5及びLine:6は図12において命令2:「mov (_mem1),r1」,命令3:「mov (_mem2),r2」がパッケージされたVLIW命令2:「mov (_mem1),r1_mov (_mem2),r2」の相対アドレス0x108に対応づけられている。

0022

デバッグ情報生成部10はいわゆる並列実行情報生成装置に相当するものであり、第2コード生成部9がVLIW命令列を生成すると、ソースプログラムの各行に位置するソースコードが、VLIW命令列においてどのVLIW命令に対応するかを判定し、行アドレス情報を生成してデバッグ情報記憶部3内の行アドレス記憶部4に書き込む。生成後、行アドレス情報において同一の相対アドレスとの対応づけられた行番号を一つにまとめて、まとめたものを並列実行情報としてデバッグ情報記憶部3内の並列実行情報記憶部5に書き込む。

0023

図11の行アドレス情報の一例においてプログラムの5行目に対応する実行コードアドレスは、5行目に対応する実行コードが、アドレス0x108番値となっているので、5行目に対応するアドレスを0x108番値として、行アドレス情報を登録する。また、6行目に対応する実行コードは、同じくアドレス0x108番値となっているので、6行目に対応するアドレスも0x108番値として、行アドレス情報を登録する。

0024

依存関係解析部8の処理内容図3フロチャ−トに示し、第2コード生成部9の処理内容を図4のフロ−チャ−トに示す。デバッグ情報生成部10の処理内容を図5のフロ−チャ−トに示す。図3図5のフロ−チャ−トの処理内容を図8(a)に示すソースプログラムの具体例を交えながら説明する。

0025

先ずプログラム記憶部1に格納されている図8(a)に示すソースプログラムを読み込み、内部表現変換部6により内部表現形式に変換され、第1コード生成部7により図8(b)に示すようなVLIW命令列が生成される。次に依存関係解析部8は、資源の使用に関する依存関係を命令毎に解析する。ステップa1では、プログラムを基本ブロックに分割する。基本ブロックとは、実行順序が連続する命令列、すなわち、プログラム中の連続する命令列であって、列の途中に飛び越しもなく、また途中への飛び越しもない命令列のことを言う。まず最初にステップa1により、入力プログラムは基本ブロックに分割される。基本ブロックに分割後のプログラムを図9(b)に示す。

0026

次にステップa2において、全ての基本ブロックについて以降の処理を繰り返す。まず最初に基本ブロックB1について、以降の処理を繰り返す。ステップa3において、基本ブロック内の全ての命令について以降の処理を繰り返す。先ず命令1:「save」と命令2:「mov (_mem1),r1」の関係について調べる。ステップa4では、基本ブロック内の任意の2つの命令a、bの間に、資源の使用に関して依存関係があるかどうかを判定する。Yesと判定された場合、ステップa5へと処理を移し、Noと判定された場合はステップa7へと処理を移す。

0027

ステップa5では、命令aが命令bより前に実行しなければならないかどうかを判定する。Yesと判定された場合、ステップa6へと処理を移し、Noと判定された場合はステップa7へと処理を移す。命令1:「save」は関数呼出元の状態を保持するためにレジスタの保持値退避などを行なう命令であるので、命令2:「mov (_mem1),r1」のレジスタr1に関して依存関係がある。従って、ステップa4ではYesと判定され、ステップa5に処理を移行する。

0028

命令1:「save」でのレジスタの退避は、命令2:「mov (_mem1),r1」でレジスタr1が設定されるよりも前に実行されなければならないので、ステップa5でYesと判定され、ステップa6へと処理を移行する。ステップa6では、2つの命令a、bを、命令aから命令bの向きの辺で結ぶ。ステップa6により、命令1:「save」から命令2:「mov (_mem1),r1」への有向辺が設定される。

0029

同様にして、命令1:「save」と命令3:「mov (_mem2),r2」、命令4:「add r1,r2」、命令5:「mov #0,r3」の関係を調べると、命令3:「mov (_mem2),r2」、命令4:「add r1,r2」、命令5:「mov #0,r3」は命令1:「save」よりも後に実行されなければならないので、命令1:「save」から命令3:「mov (_mem2),r2」、命令4:「add r1,r2」、命令5:「mov #0,r3」へとそれぞれ有向辺が設定される。

0030

次に命令2:「mov (_mem1),r1」と命令3:「mov (_mem2),r2」の依存関係について調べる。命令2:「mov (_mem1),r1」と命令3:「mov (_mem2),r2」は同じ資源を使用していないので、命令2:「mov (_mem1),r1」と命令3:「mov (_mem2),r2」の間には依存関係が存在しない。従ってステップa4において、Noと判定され、次の依存関係について調べる。

0031

更に、命令2:「mov (_mem1),r1」と命令4:「add r1,r2」の依存関係について調べる。命令2:「mov (_mem1),r1」と命令4:「add r1,r2」はレジスタr1に関して依存関係があるので、ステップa4においてYesと判定され、ステップa5へと移行する。命令2:「mov (_mem1),r1」は命令4:「add r1,r2」よりも前に実行しなければならないので、ステップa5でYesと判定され、ステップa6へと処理を移行し、ステップa6において、命令2:「mov (_mem1),r1」から命令4:「add r1,r2」への有向辺を設定する。

0032

命令2:「mov (_mem1),r1」と命令5:「mov #0,r3」、命令6:「mov #1,r4」とは資源の依存関係がないので、ステップa4でNoと判定され、命令2:「mov (_mem1),r1」と命令5:「mov #0,r3」、命令6:「mov #1,r4」の間に有向辺は設定しない。命令3:「mov (_mem2),r2」と命令4:「add r1,r2」、命令5:「mov #0,r3」、命令6:「mov #1,r4」との依存関係を調べると、命令3:「mov (_mem2),r2」と命令4:「add r1,r2」において、レジスタr2に関して依存関係があるため、ステップa4でYesと判定され、ステップa5へと移行する。命令5:「mov #0,r3」と命令6:「mov #1,r4」は命令3:「mov (_mem2),r2」と依存関係がないので、ステップa4でNoと判定され、依存関係は設定されない。

0033

命令3:「mov (_mem2),r2」は命令4:「add r1,r2」よりも前に実行しなければならないので、ステップa5でYesと判定され、ステップa6へと処理を移行し、ステップa6において、命令3:「mov (_mem2),r2」から命令4:「add r1,r2」への有向辺を設定する。命令5:「mov #0,r3」と命令6:「mov #1,r4」には資源の依存関係がないので、ステップa4でNoと判定され、命令5:「mov #0,r3」と命令6:「mov #1,r4」の間に有向辺は設定しない。

0034

以上で、基本ブロックB1内の全ての命令について依存関係を調べたので、ステップa8へと処理を移行する。基本ブロックB1を解析して得られた依存DAGは図10(a)の基本ブロックB1に対応するDAGになる。DAG内の番号は、図9(a)の命令の右に付加してある番号と対応する。ステップa8では、基本ブロックB1について生成された依存DAGを保存する。

0035

以上で、基本ブロックB1についての処理を終了する。同様にして、基本ブロックB2、B3、B4について、依存関係を解析し、依存DAGを生成すると図10(b)(c)(d)のように得られる。次に第2コード生成部9によってVLIW命令列が生成される。図8(b)の命令の右側に配置された括弧記号は、プログラムの行番号と命令との対応を表している。例えば、最初のsave命令は、プログラムの2行目と対応することを表し、『mov(_mem2),r2』、『add r1,r2』はプログラムの6行目に対応することを表している。第2コード生成部9の入力と、依存関係解析部8の入力とは同じである。また本実施例では、説明の簡単化のため、VLIW命令に格納する命令は2命令としている。

0036

まずステップb1において、全ての基本ブロックについて以降の処理を繰り返す。最初に基本ブロックB1について以降の処理を行なう。次にステップb2において、依存関係解析部8によって生成した基本ブロックB1の依存DAGを取得する。この依存DAGは依存関係解析部8によって解析され、生成された情報であり、命令間の依存関係を表している。

0037

ステップb3において、基本ブロックB1内の未出力の命令について以降の処理を繰り返す。先ずステップb4において、基本ブロックB1の依存DAGの中から、並列実行可能な命令を選択する。基本ブロックB1の依存DAGを参照すると、最初に実行できる命令は命令1:「save」しか存在しないので、命令1:「save」を選択する。

0038

次にステップb5において、ステップb4で選択した命令をVLIW命令にパッケージする。ステップb4で選択された命令は命令1:「save」のみであるので、命令1:「save」をVLIW命令に格納し、残りの領域にnop命令を格納する。ステップb6において、生成したVLIW命令を生成コード記憶部2に格納する。ステップb7では、ステップb4で並列実行可能な命令が選択され、ステップb6でVLIW命令が出力されたことによって、依存DAGの情報の更新を行なう。ここで命令1:「save」が出力済みとなったとすると、依存DAGから命令1:「save」を取り除き、依存DAGの更新を行う。

0039

次にステップb4に戻り、依存DAGから並列実行可能な命令を選択する。命令1:「save」が依存DAGから取り除かれたので、次に出力できる命令は、命令2:「mov (_mem1),r1」、命令3:「mov (_mem2),r2」、命令5:「mov #0,r3」、命令6:「mov #1,r4」となる。これらは全て並列実行可能な命令である。そこで、ここでは命令2:「mov(_mem1),r1」と命令3:「mov (_mem2),r2」を選択する。

0040

ステップb5において、選択した命令2:「mov (_mem1),r1」と命令3:「mov (_mem2),r2」をVLIW命令に格納し、ステップb6において、生成したVLIW命令を生成コード記憶部2に格納する。命令2:「mov (_mem1),r1」及び命令3:「mov (_mem2),r2」が出力済みとなったので、ステップb7において、依存DAGから命令2:「mov (_mem1),r1」、命令3:「mov (_mem2),r2」を取り除き、依存DAGの更新を行なう。

0041

更にステップb4に戻り、依存DAGから並列実行可能な命令を選択する。命令2:「mov (_mem1),r1」、命令3:「mov (_mem2),r2」が依存DAGから取り除かれたので、次に出力できる命令は、命令4:「add r1,r2」、命令5:「mov #0,r3」、命令6:「mov #1,r4」となり、これらは並列実行可能な命令である。そこで、命令4:「add r1,r2」と命令5:「mov #0,r3」を選択する。

0042

ステップb5において、選択した命令4:「add r1,r2」、命令5:「mov #0,r3」をVLIW命令に格納し、ステップb6において、生成したVLIW命令を生成コード記憶部2に格納する。命令4:「add r1,r2」及び命令5:「mov #0,r3」が出力済みとなったので、ステップb7において、依存DAGから命令4:「add r1,r2」及び命令5:「mov #0,r3」を取り除き、依存DAGの更新を行なう。

0043

更に、ステップb4に戻り、依存DAGから並列実行可能な命令を選択する。依存DAGには命令6:「mov #1,r4」のみが残っているので、命令6:「mov #1,r4」を選択する。ステップb5において、選択した命令6:「mov #1,r4」をVLIW命令に格納し、残りの領域にnop命令を格納する。そしてステップb6において、生成したVLIW命令を生成コード記憶部2に格納する。

0044

ステップb7において、依存DAGから命令6:「mov #1,r4」を取り除き、依存DAGの更新を行なう。以上で基本ブロックB1内の全ての命令が出力されたので、ループ2の処理を終了し、次の基本ブロックへと処理を進める。同様にして、基本ブロックB2、B3、B4について、コード生成処理を行なうと、図13のように生成コード記憶部2にVLIW命令列が格納される。

0045

次にデバッグ情報生成部によって、プログラム行と実行コードのアドレスとの対応を表す行アドレス情報、及び並列実行可能な命令に対応するプログラム行と実行コードとの対応を表す並列実行情報を生成する。まず生成された実行コードについて、ステップc1において全てのVLIW命令について以降の処理を繰り返す。先ずアドレス0x100の命令を選択してくる。

0046

ステップc2において、VLIW命令内の全ての命令について繰り返す。まず最初にVLIW命令内のsave命令について処理を行なう。ステップc3において、命令に対応するプログラム行を取得し、プログラム行の2行目であるという情報を得る。ステップc4では、ステップc3で取得したプログラム行が、行アドレス記憶部4に既に登録されているかどうかを判定する。Yesと判定された場合はステップc6へと処理を移行し、Noと判定された場合はステップc5へと処理を移行する。ステップc4により、2行目に対応する行アドレス情報が登録済みであるかどうかを判定される。この場合、まだ登録されていないのでNoと判定され、ステップc5へと処理を移行する。

0047

ステップc5では、プログラム行とVLIW命令の実行コードアドレスを行アドレス情報に設定し、行アドレス記憶部4に格納する。ステップc5により、プログラム行の2行目とVLIW命令のアドレス0x100とが行アドレス情報として行アドレス記憶部4に格納される(図11矢印a)。ステップc6では、VLIW命令の実行コードアドレスに対応する記入欄に、命令に対応するソースプログラム行に関する並列実行行情報を追加する。

0048

ステップc6により、VLIW命令の実行コードアドレス0x100に対応する記入欄に、プログラム行の2行目に関する並列実行行情報が追加される。次にステップc7を実行し、ステップc2へと戻り、VLIW命令内の次の命令であるnop命令について繰り返す。nop命令には、対応するプログラム行が関係付けられていないので、ステップc3からステップc6で特に処理は行なわれず、ループを終了する。その結果、VLIW命令内の全ての命令について処理が終るので、ステップc8へと処理が移行する。

0049

ステップc8では、ステップc6で生成した並列実行情報を出力し、並列実行情報記憶部5に格納する(図12矢印b)。以上でアドレス0x100のVLIW命令についての処理を終了し、ステップc1において、次のアドレス0x108の命令を選択し、同様に処理を行なう。最初にステップc2において、VLIW命令内のmov(_mem1),r1の命令を選択する。

0050

ステップc3において、命令に対応するプログラム行を取得し、プログラム行の5行目であるという情報を得る。ステップc4において、5行目に対応する行アドレス情報が登録済みであるかどうかを判定する。この場合、まだ登録されていないのでNoと判定され、ステップc5へと処理を移行する。

0051

ステップc5において、プログラム行の5行目とVLIW命令のアドレス0x108とを行アドレス情報として行アドレス記憶部4に格納する(図11矢印c)。次にステップc6において、VLIW命令の実行コードアドレス0x108に対応する記入欄に、プログラム行の5行目に関する並列実行行情報を追加する。次にステップc7を実行し、ステップc2へと戻り、VLIW命令内の次の命令であるmov (_mem2),r2の命令について繰り返す。

0052

ステップc3において、命令に対応するプログラム行を取得し、プログラム行の6行目であるという情報を得る。ステップc4において、6行目に対応する行アドレス情報が登録済みであるかどうかを判定する。この場合、まだ登録されていないのでNoと判定され、ステップc5へと処理を移行する。

0053

ステップc5において、プログラム行の6行目とVLIW命令のアドレス0x108とを行アドレス情報として行アドレス記憶部4に格納する(図11矢印d)。次にステップc6において、VLIW命令の実行コードアドレス0x108に対応する記入欄に、プログラム行の6行目に関する並列実行行情報を追加する。以上でVLIW命令内の全ての命令について処理が終るので、ステップc8へと処理を移行する。

0054

ステップc8では、ステップc6で生成した並列実行情報を出力し、並列実行情報記憶部5に格納する(図12矢印e)。以上でアドレス0x108のVLIW命令についての処理を終了する。同様に全てのVLIW命令について処理を行なうと、行アドレス記憶部4の内容は図11に示すようになり、並列実行情報記憶部5の内容は図12に示すようになる。

0055

続いてデバッグ支援装置の内部構成について説明する。デバッグ支援装置の内部構成を図2に示す。デバッグ支援装置は、ユーザインターフェィス部11と、コマンドインタプリタ14と、コード実行部15とから構成され、ディスプレィ12及びキーボード13が接続されている。ユーザインターフェィス部11は、ディスプレィ12及びキーボード13を介しての操作環境を操作者に提供する。ここでキーボード13は、デバッグコマンド入力用キータイプを受け付けるために用いられ、ディスプレィ12は、各種ウィンドウを表示してソースプログラム及びオブジェクトコード側命令を視覚化するために用いられる。図14は、ディスプレィ12に表示されるウィンドウの一例を示す図である。図14においてディスプレィ12には、ソースプログラムウィンドゥw1、コマンドラインw2、オブジェクトコードウィンドゥw3が表示される。ここでソースプログラムウィンドゥw1とは、プログラム記憶部1に記憶されているソースプログラムであって、操作者によりリスト表示が指定された部位を表示するためのウィンドウである。

0056

コマンドラインw2は、ソースプログラムウィンドゥw1に表示されたソースプログラムの一部分に関するデバッグコマンドの入力を操作者に促すメッセージを表示するのと共に、コマンドインタプリタ14に対して操作者によりなされたキータイプをエコーバックし、またコード実行部15によるデバッグコマンドの実行結果に関するメッセージを表示する。

0057

オブジェクトコードウィンドゥw3は、ソースプログラムウィンドゥw1に表示されたソースプログラムの一部分に対応するオブジェクトコード側命令列を表示すると共に、各オブジェクトコード側命令に対応するソースコード文の行番号を表示し、生成元のソースコードと、生成されたオブジェクトコードとの対応関係を括弧記号『}』で表現する。

0058

コマンドインタプリタ14は、キーボード13がキータイプされ、デバッグコマンドがユーザインターフェィス部11に入力されると、このデバッグコマンドにおいて用いられているソースコード文の行番号を取り出し、この行番号がどのアドレスに相当するかを行アドレス記憶部4を参照して判定する。アドレスが判定されると、このアドレスに相当するデバッグ動作を生成コード記憶部2に記憶されているVLIW命令列に行わせるようコード実行部15を制御する。

0059

ここでユーザインターフェィス部11に入力されるデバッグコマンドには、SetBreakPointコマンド、runコマンド、ReadVARコマンド、Stepコマンドの四種類のものを考える。SetBreakPointコマンドは第1オペランドにソースプログラムにおける何れかの行番号を指定することができ、当該第1オペランドに指定された行番号に相当するVLIW命令にブレークポイントを設定するコマンドである。

0060

runコマンドは第1オペランドにソースプログラムにおける何れかの行番号を指定することができ、当該第1オペランドに指定された行番号を開始点としてVLIW命令列を実行させるコマンドである。ReadVARコマンドはソースプログラムにおける何れかの変数を第1オペランドに指定することができ、当該第1オペランドに指定された変数に相当するレジスタ、メモリをアクセスしてその保持値を読み出すコマンドである。

0061

Stepコマンドは第1オペランドにソースプログラムにおける何れかの行番号を指定することができ、当該第1オペランドに指定された行番号に相当するVLIW命令のみをワンステップ実行させるコマンドである。コード実行部15は、シミュレータインサーキットエミュレータモニタのいずれかで構成され、シミュレータ、インサーキットエミュレータ、モニタ特有の機能により、ターゲットマシンのハードウェア環境再現し、このハードウェア環境上において生成コード記憶部2に記憶されたVLIW命令列を動作させる。無論、インサーキットエミュレータ、シミュレータ、モニタにより作成されるハードウェア環境は互い異なる訳であるが(モニタ、インサーキットエミュレータによるハードウェア環境は実機のそれとほぼ同一或はそれに近いのに対して、シミュレータによるハードウェア環境はホストコンピュ−タ上で模擬的に作成されたに過ぎない)、何れもプログラムカウンタ、レジスタ、メモリを有するターゲットマシンのハードウェア機能を実現できる点は共通している。

0062

SetBreakPointコマンドからStepコマンドまでのデバッグコマンドの発行時においてコマンドインタプリタ14がどのような処理を行うかを図6のフロ−チャ−トに示す。図6のフロ−チャ−トの処理内容を図14図15(a)、(b)、図16(a)〜(c)に示す表示例を交えながら説明する。ステップS0では、ソースプログラムウィンドゥw1、コマンドラインw2、及びオブジェクトコードウィンドゥw3をディスプレィ12上に表示し、コマンドラインw2にプロムプトを表示して、リスト表示させたい部分を表示させる旨のキータイプがなされるのを待つ。キータイプがなされると、ソースプログラムウィンドゥw1に該当する部分のリスト表示を行い、ステップS1に移行する。

0063

ステップS1では、ユーザインターフェィス部11に対してのデバッグコマンドの入力待ちを行い、もし入力されるとステップS2に移行する。ステップS2では、入力されたデバッグコマンドがrunコマンドであるかを判定し、もしrunコマンドであればステップS6に移行し、そうでないならステップS3に移行する。

0064

ステップS3では、入力されたデバッグコマンドがReadVARコマンドであるかを判定する。もしReadVARコマンドならステップS5に移行し、そうでないならステップS4に移行する。ステップS4では、入力されたデバッグコマンドがSetBreakPointコマンドであるかを判定する。もしSetBreakPointコマンドならステップd1に移行し、そうでないならステップS9に移行する。

0065

ステップS9では、入力されたデバッグコマンドがStepコマンドであるかを判定する。もしStepコマンドならステップS10に移行し、そうでないならステップS1に移行する。ステップd1では、SetBreakPointコマンドのオペランドに記載された行番号に対応するVLIW命令のアドレスを、行アドレス記憶部4から取得する。ここで図14参照符号m1に示すようにオペランドにLine:7「result = 0;」を指定したSetBreakPointコマンドが入力されると、VLIW命令のアドレスとして、アドレス0x110を取得する。

0066

ステップd2では、得られたVLIW命令のアドレスに対して、割り込みを発生させる割込生命令の書き込みを行なう。これによりアドレス0x110の先頭には、割込発生命令が書き込まれる。ステップd3では、割り込みが発生した時に、デバッグ支援装置を制御するプログラムに実行が移るように割り込み処理を設定してステップS1に移行する。以上までの処理が済むと、図14の参照符号m2に示すように、『ブレークポイントを「Line:7」に設定しました』というメッセージを表示し、ステップS1に移行する。ステップS1に移行して、キー入力待ち状態になった後、操作者がLine:1をオペランドに指定したrunコマンドをキータイプすると、ステップS1がYesとなり、ステップS2もYesとなってステップS6に移行する。

0067

ステップS6では、オペランドに指定された行番号をVLIW命令のアドレスに変換する。ステップS7では、VLIW命令のアドレスをコード実行部15内のプログラムカウンタに設定する。ステップS8では、コード実行部15における割込発生待ちを行う。ブレークポイントによりコード実行部15に割り込みが発生すると、ステップf1に移行する。

0068

ステップf1では、ブレークポイントが設定された行に対応するVLIW命令のアドレスを、行アドレス記憶部4から取得する。ここで前回のSetBreakPointコマンドの入力により指定されたブレークポイントはアドレス0x110であり、アドレス0x110が行アドレス記憶部4から取得される。ステップf2では、得られたVLIW命令のアドレス(ブレークポイントのアドレス)に対応する並列実行行を、並列実行情報記憶部5から取得する。ブレークポイントアドレス0x110が取得されているので、アドレス0x110の並列実行情報がアクセスされる。アドレス0x110の並列実行情報には、Line:6「b=a+mem2;」及びLine:7「result = 0;」が格納されているので、Line:6「b=a+mem2;」及びLine:7「result = 0;」が行アドレス記憶部4から取得される。

0069

ステップf3からステップf7では、全ての並列実行行について、ステップf4からステップf6までの処理を繰り返す。アドレス0x110に対しての並列実行行はLine:6「b=a+mem2;」及びLine:7「result = 0;」なのでステップf3からステップf7までの処理は計2回繰り返されることになる。ステップf4では、並列実行行はブレークポイントが設定された行であったかを判定し、もしブレークポイントが設定された並列実行行ならばステップf5においてその行に第1表示色の矢印を表示する。そうでないならばステップf6においてその行に第2表示色の矢印を表示する。

0070

ここで第1表示色を黒色とし、第2表示色を白色とすると、図15(a)に示すように、ブレークポイントが設定されたLine:7「result = 0;」が黒色矢印y1で指示され、Line:7「result = 0;」の並列実行行であるLine:6「b=a+mem2;」は白色矢印y2で指示される。ステップg1では、ブレークポイントが設定された行(停止行という)の行番号を取得する。

0071

ステップg2では、停止行に対応する実行アドレスから、そのアドレスに対応する並列実行情報を取得し、並列実行情報内の並列実行行のうち、停止行以外の全ての並列実行行の行番号を取得する。ステップg2により、現在の停止行である7行目に対応するVLIW命令のアドレスを、行アドレス記憶部4から検索し、アドレス0x110を得る。次いで実行コードのアドレス0x110に対応する並列実行行を、並列実行情報記憶部5から検索し、7行目と6行目を得る。更に、得られた並列実行行のうち、現在の停止行である7行目以外の並列実行行、即ち6行目の情報を取得する。

0072

ステップg3では、停止行のソースコード文と他の全ての並列実行行のソースコード文がソースプログラムウィンドゥw1の表示範囲内に収まるかどうかを判定する。Yesと判定された場合は、ステップg8へと処理を移し、Noと判定された場合はステップg4へと処理を移す。表示可能な行数が25行であるものとすると、Line:6「b=a+mem2;」及びLine:7「result = 0;」を表示させようとしても、現在の停止行である7行目と、それ以外の全ての並列実行行である6行目とが表示範囲内に収まるのでYesと判定される。

0073

ステップg4では、ステップg3がNoである場合、表示範囲内に収まらない停止行あるいは並列実行行を選択する。ステップg5では、現在表示しているウィンドウを分割する。ステップg6では、ステップg4で選択した表示範囲内に収まらない停止行あるいは並列実行行を、分割したウィンドウに表示する。

0074

ステップg7では、全ての停止行及び並列実行行が表示されたかどうかを判定する。Yesと判定された場合、全ての停止行及び並列実行行の表示が終了したので、表示切換を終了し、ステップS1に移行する。Noと判定された場合はステップg5へと処理を移し、更にウィンドウの分割を行なう。ステップg8では、不必要に多数に分割されたウィンドウを統合し、ウィンドウの数を減少させる。

0075

ステップg9では、全ての停止行及び並列実行行をウィンドウに表示し、ステップS1に移行する。ステップS1に移行して、キー入力待ち状態になった後、変数aをオペランドに指定したReadVARコマンドをキータイプすると、ステップS1がYesとなり、ステップS2はNoとなり、ステップS3はYesとなってステップS5に移行する。

0076

ステップS5では、変数に相当するレジスタ或はメモリをアクセスして、その値を表示する。値の表示後、ステップS1に移行して、キー入力待ち状態になった後、Line:8「for(i= 1;i<10;i++);」をオペランドに指定してStepコマンドをキータイプすると、ステップS1がYesとなり、ステップS2もNo、ステップS3もNo、ステップS4もNoとなってステップS9に移行する。ステップS9がYesとなりステップS10に移行する。

0077

ステップS10では、オペランドLineに指定された行番号の次の行をVLIW命令のアドレスに変換する。オペランドで指定された行以降の行でソースコード文が書かれている行はLine:8「for(i=1;i<10;i++)」であり、これを変換すると、アドレス0x118のアドレスが得られる。ステップS11では、変換されたアドレス0x118のVLIW命令に割込発生命令を書き込む。その後ステップS6に移行して、runコマンドの場合と同様、ステップS6〜ステップS8、ステップf1〜f7、ステップg1〜ステップg9の処理を行う。

0078

ステップS6では、オペランドに指定された行番号Line:8「for(i= 1;i<10;i++);」をVLIW命令のアドレス0x118、アドレス0x120、アドレス0x128に変換し、ステップS7では、これらのアドレスをコード実行部15内のプログラムカウンタに設定してこれらの命令分だけ実行する。そうすると、図15(b)のソースプログラムウィンドゥw1に示すように、Line:8「for(i= 1;i<10;i++);」に矢印が表示されると共に、図15(b)のオブジェクトコードウィンドゥw3に示すように、アドレス0x118、アドレス0x120、アドレス0x128に格納された命令6:「mov #1,r4」、命令7:「cmp #10,r4」、命令8:「bge Exit」に矢印が表示される。

0079

次にステップS1に移行して、キー入力待ち状態になった後、Line:11「x=InputData();」をオペランドに指定してStepコマンドをキータイプすると、ステップS2、S3、S4、S9、S10、S11を辿ってステップS6に移行する。ステップS6では、行番号Line:11「x=InputData();」をVLIW命令のアドレス0x130に変換し、ステップS7では、これらのアドレスをコード実行部15内のプログラムカウンタに設定してこれらの命令分だけ実行する。そうすると、図16(a)のソースプログラムウィンドゥw1に示すように、Line:11「x=InputData();」に矢印が表示されると共に、オブジェクトコードウィンドゥw3に示すように、アドレス0x130に格納された命令9:「call _InputData」に矢印が表示される。

0080

次にステップS1に移行して、キー入力待ち状態になった後、Line:12「x=i*x;」をオペランドに指定してStepコマンドをキータイプすると、ステップS1がYesとなり、ステップS2、S3、S4、S9、S10、S11を辿ってステップS6に移行する。ステップS6では、行番号をVLIW命令のアドレス0x138に変換し、ステップS7では、これらのアドレスをコード実行部15内のプログラムカウンタに設定してこれらの命令分だけ実行する。そうすると、図16(b)のソースプログラムウィンドゥw1に示すように、Line:12「x=i*x;」に矢印が表示されると共に、図16(b)のオブジェクトコードウィンドゥw3に示すように、アドレス0x138に格納された命令10:「mul r4,r1」に矢印が表示される。

0081

次にステップS1に移行して、キー入力待ち状態になった後、Line:13「result += x;」をオペランドに指定してStepコマンドをキータイプすると、ステップS1がYesとなり、ステップS2、S3、S4、S9、S10、S11を辿ってステップS6に移行する。ステップS6では、並列実行情報を参照して行番号Line:13「result += x;」をVLIW命令のアドレス0x140に変換する。ステップS7では、これらのアドレスをコード実行部15内のプログラムカウンタに設定してこれらの命令分だけ実行する。アドレス0x140のVLIW命令には、命令11:「add r1,r3」及び命令12:「add #1,r4」が格納されているので、オブジェクトコードウィンドゥw3において命令11:「add r1,r3」及び命令12:「add #1,r4」に矢印を表示すると共に、ソースプログラムウィンドゥw1に表示されたソースプログラムのうち、Line:8「for(i= 1;i<10;i++);」及びLine:13「result += x;」のソースコード文にも矢印を表示する。その結果図16(c)のような表示画面が得られる。

0082

以上のように本実施形態によれば、ソースコード文の組であって、翻訳後の命令が共通の長語命令に格納されたもの行番号と、格納先の長語命令との対応づけを示す並列実行情報を並列実行情報記憶部5に記憶させておき、ソースプログラムにおける何れかのソースコード文の行番号を用いてのデバッグコマンドを受け付けて、このデバッグコマンドに基づいたVLIW命令列の実行をコード実行部15に行わせるので、ソースプログラムのレベルでの操作環境を操作者に提供するのと共に、ソースコード文のうち何処と何処が並列に動作するかを操作者に理解させることができる。

0083

そのため、コンパイラが命令間の並列実行の可能性をより高度に解析してスケジューリングを行い、プログラマが記述したソースプログラムと、VLIW命令列とのギャップが激しくなってもソースコード文のうち何処と何処が並列に動作するかを操作者に確実に理解させることができる。自分が記述したどのソースコードと、どのソースコードとが並列に動作しているかが理解し易くなり、動作検証中にVLIW命令列の不具合が発覚しても、自分が記述したソースプログラムに含まれているどのソースコードがその不具合の原因かが究明し易くなり、デバッグ作業が効率良く行える。

0084

故に、コンパイラにより生成されたオブジェクトコード側命令がVLIW命令列にパッケージされている場合でも、プログラムのコーディングから実機上での動作検証までを高級言語で一貫して行える『高級言語指向の開発環境』を実現することができる。
(応用例)本応用例は、基本ブロックの境界を越えた命令スケジューリング、いわゆる広域スケジューリングがソースコード文に対して行われた場合に、コンパイラ側の並列実行情報生成装置に広域スケジューリングに関する内容を含む並列実行情報を生成させ、デバッグ支援装置にその並列実行情報に基づいた表示を行わせる。

0085

具体的な広域スケジューリングの手法としては、「ブックキーピング」と呼ばれる補償コードを挿入してプログラムの意味を補償しつつも基本ブロック間で命令の入れ替えを行う「広域命令移動」があり、日経エレクトロニクス1996.6.3 663号等にその詳細は記述されている。例えば、基準分岐を越えて命令を移動する『投機的命令移動』を広域スケジューリングの一手法として行う場合、本応用例では、投機的に別の基本ブロックに移動されたソースコード文に対して、デバッグ情報生成部10は投機的に移動されたソースコード文の行番号に投機的である旨を示し、これとVLIW命令のソースコードとを対応づけた並列実行情報を生成し並列実行情報記憶部5に記憶させる。

0086

並列実行情報生成装置のコマンドインタプリタ14は、投機的に移動されたソースコード文の行番号を指定したデバッグコマンドが入力された時、或は、投機的に移動されていない行と並列に実行される行が投機的に移動された行である時、並列実行情報記憶部5を参照してそのソースコード文が投機的に移動されたものである旨を示す表示をユーザインターフェィス部11に行わせる。

0087

この応用では、いわゆる広域スケジューリングがソースコード文に対して行われ、広域的な最適化なされたVLIW命令列が生成された場合でも、それに関する情報によりデバッグ作業を支援できる。尚、上記実施形態において、実行コードの一命令語に格納される命令数は2命令として例示したが、実行コードの一命令語に格納される命令数は2命令でなくてもよく、4命令や更に多くの命令を格納する方式でもよい。

0088

また、矢印によってブレークポイントを表示しているが、特に矢印である必要はなく、別の記号を使用して表示してもよい。更に、ブレークポイントと表示色の異なる矢印によって並列実行行を表しているが、ブレークポイントと異なる記号によって並列実行行を表してもよい。加えて、ブレークポイントと並列実行行が同一表示範囲内で表示できない場合に、表示ウィンドウを分割するとしたが、表示ウィンドウを分割せずに、新たに表示ウィンドウを生成し、ブレークポイントあるいは並列実行行をそれぞれのウィンドウに表示するようにしてもよい。

0089

最後に、コマンドインタプリタ14の手順やデバッグ情報生成部10の手順(図3図7のフロ−チャ−トの手順)等を機械語プログラムにより実現し、これを記録媒体に記録して流通販売の対象にしても良い。このような記録媒体には、ICカード光ディスクフロッピーディスク等があるが、これらに記録された機械語プログラムは汎用コンピュ−タにインストールされることにより利用に供される。このようなコンピュ−タは、インストールした機械語プログラムを逐次実行して実施形態に示したデバッグ支援装置及び並列実行情報生成装置の機能を実現するのである。

発明の効果

0090

操作者による長語命令列の検証作業を支援するデバッグ支援装置は、並列実行性が成立するソースコード文を特定する行番号であって、翻訳後の命令が共通の長語命令に格納されたものの行番号の組みと、格納先の長語命令との対応づけを示す並列実行情報を記憶する第1記憶手段と、ソースプログラムにおける何れかのソースコード文の行番号を用いての検証指示を操作者から受け付ける受付手段と、検証指示に用いられた行番号を含む並列実行情報を第1記憶手段から読み出す読出手段と、読み出された当該並列実行情報内にソースコード文の行番号とは別のソースコード文の行番号が含まれているなら、当該別のソースコード文に関する表示を行う表示手段とを備えることを特徴としており、ソースコード文の行番号を用いての検証指示を受け付けて、並列実行情報内にソースコード文の行番号とは別のソースコード文の行番号が含まれているなら当該別のソースコード文に関する表示を行うので、たとえソースプログラムと、VLIW命令列とのギャップが激しい場合であってもソースコード文のうち何処と何処が並列に動作するかを操作者に確実に理解させることができる。

0091

自分が記述したどのソースコードと、どのソースコードとが並列に動作しているかが理解し易くなり、動作検証中にVLIW命令列の不具合が発覚しても、自分が記述したソースプログラムに含まれているどのソースコードがその不具合の原因が究明し易くなり、デバッグ作業が効率良く行える。また、デバッグ支援装置における表示手段は、検証指示に用いられた行番号のソースコード文を含む部位のプログラムリストを表示する第1リスト表示部と、当該検証指示においての行番号と同一の並列実行情報に別のソースコード文の行番号が含まれているなら、当該別のソースコード文を含む部位のプログラムリストを表示する第2リスト表示部と、第1、第2リスト表示部により表示されたプログラムリストのうち、読出手段により読み出された当該並列実行情報内に含まれているソースコード文を修飾する修飾部とを備えてもよい。

0092

この構成によれば、読み出された当該並列実行情報内に含まれている別のソースコード文に関しての表示を長語命令のプロセッサの実行に伴って行うので、自分が記述したどのソースコードと、どのソースコードとが並列に動作しているかが理解し易くなり、動作検証中にVLIW命令列の不具合が発覚しても、自分が記述したソースプログラムに含まれているどのソースコードがその不具合の原因が究明し易くなり、デバッグ作業が効率良く行える。

0093

故に、コンパイラにより生成されたオブジェクトコード側命令がVLIW命令列にパッケージされている場合でも、プログラムのコーディングから実機上での動作検証までを高級言語で一貫して行える『高級言語指向の開発環境』を実現することができる。また、デバッグ支援装置は、読出手段により読み出された並列実行情報において対応づけられた長語命令をプロセッサに実行させる実行制御手段を備え、表示手段は、プロセッサによる長語命令列の実行に伴って、修飾部により修飾されるソースコード文を変更する修飾対象変更部を備えてもよい。

0094

この構成によれば、検証指示に用いられた行番号のソースコード文を含む部位及びソースコード文に並列実行されるソースコード文を含む部位のプログラムリスト表示がなされるので、操作者は長語命令列をプロセッサに動作させながらも自分が記述したソースプログラムに問題点が無かったかをレビューさせることができる。また読み出された並列実行情報に対応づけられたソースコード文は修飾手段による修飾がなされるので、検証指示がなされたソースコード文がその右辺のソースコード文とどのように係っているかを把握することができる。

0095

また、デバッグ支援装置における検証指示には、ソースプログラムにおける何れかのソースコード文の行番号をスタート行として指定した長語命令列の実行指示があり、修飾部は、プログラムリストにおいてスタート行に対応するソースコード文及び当該ソースコード文と並列実行情報により対応づけられているソースコード文に修飾を施し、実行制御手段は、当該並列実行情報において対応づけられた長語命令のアドレスをスタートアドレスとして長語命令列をプロセッサに実行させることを特徴としてもよい。

0096

この構成によれば、長語命令列内のどの長語命令を実行させるかをソースコード文の行番号で指定することができるので、VLIW命令についての詳しい知識の無い操作者であっても容易に長語命令列を動作させることができる。また、デバッグ支援装置における検証指示には、ソースプログラムにおける何れかのソースコード文の行番号をブレークポイントとして指定したブレークポイント設定指示があり、デバッグ支援装置は、並列実行情報において検証指示に用いられた行番号に対応するソースコード文と対応づけられた長語命令のアドレスにブレークポイントを設定するブレークポイント設定手段を備え、修飾対象変更部は、プロセッサによる長語命令列の実行が、ブレークポイント設定手段によって設定されたブレークポイントにより中断すると、実行が中断したソースコード文及びその行番号が当該ソースコード文と同じ並列実行情報に格納されているソースコード文に修飾対象を変更することを特徴としてもよい。

0097

この構成によれば、長語命令列の実行をどの長語命令で停止させるかをソースコード文の行番号で指定することができるので、不具合原因の可能性が高いソースコード文の直前まで長語命令列を実行させることができ、不具合原因の追究を徹底して行うことができる。

図面の簡単な説明

0098

図1実施形態におけるコンパイラの構成図。
図2実施形態におけるデバッグ支援装置の構成図。
図3依存関係解析部8の処理を示すフローチャートである。
図4第2コード生成部9の処理を示すフローチャートである。
図5デバッグ情報生成部10の処理を示すフローチャートである。
図6コマンドインタプリタ14の処理を示すフロ−チャ−トである。
図7コマンドインタプリタ14の処理を示すフロ−チャ−トである。
図8(a)本発明の実施形態におけるプログラム記憶部の内容を表す図である。
(b)同実施形態における第2コード生成部9に対する入力コードを表す図である。
図9(a)本発明の実施形態における依存関係解析部8に対する入力コードを表す図である。
(b)(a)の入力コードを基本ブロックに分割した結果を表す図である。
図10(a)基本ブロックB1のDAGを表す図である。
(b)基本ブロックB2のDAGを表す図である。(c)基本ブロックB3のDAGを表す図である。(d)基本ブロックB4のDAGを表す図である。
図11本発明の実施形態における行アドレス記憶部4の内容を表す図である。
図12本発明の実施形態における並列実行情報記憶部5の内容を表す図である。
図13本発明の実施形態における生成コード記憶部2の内容を表す図である。
図14本発明の実施形態におけるユーザによるブレークポイントの入力時及びユーザによるプログラム実行命令の入力時の画面を表す図である。
図15(a)本発明の実施形態におけるユーザが指定したブレークポイントにおける、ブレークポイントによる実行停止時の表示結果を表す図である。
(b)同実施形態におけるワンステップ動作時の並列実行行の表示結果を表す図である。
図16(a)〜(c)同実施形態におけるワンステップ動作時の並列実行行の表示結果を表す図である。

--

0099

1プログラム記憶部
2生成コード記憶部
3デバッグ情報記憶部
4行アドレス記憶部
5並列実行情報記憶部
6内部表現変換部
7 第1コード生成部
8依存関係解析部
9 第2コード生成部
10 デバッグ情報生成部
11 ユーザインターフェィス部
12ディスプレィ
13キーボード
14コマンドインタプリタ
15コード実行部

ページトップへ

この技術を出願した法人

この技術を発明した人物

ページトップへ

関連する挑戦したい社会課題

関連する公募課題

ページトップへ

おススメ サービス

おススメ astavisionコンテンツ

新着 最近 公開された関連が強い技術

この 技術と関連性が強い人物

関連性が強い人物一覧

この 技術と関連する社会課題

関連する挑戦したい社会課題一覧

この 技術と関連する公募課題

関連する公募課題一覧

astavision 新着記事

サイト情報について

本サービスは、国が公開している情報(公開特許公報、特許整理標準化データ等)を元に構成されています。出典元のデータには一部間違いやノイズがあり、情報の正確さについては保証致しかねます。また一時的に、各データの収録範囲や更新周期によって、一部の情報が正しく表示されないことがございます。当サイトの情報を元にした諸問題、不利益等について当方は何ら責任を負いかねることを予めご承知おきのほど宜しくお願い申し上げます。

主たる情報の出典

特許情報…特許整理標準化データ(XML編)、公開特許公報、特許公報、審決公報、Patent Map Guidance System データ