JP4272371B2 - デバッグ支援装置、コンパイラ装置、デバッグ支援プログラム、コンパイラプログラム、及びコンピュータ読取可能な記録媒体。 - Google Patents
デバッグ支援装置、コンパイラ装置、デバッグ支援プログラム、コンパイラプログラム、及びコンピュータ読取可能な記録媒体。 Download PDFInfo
- Publication number
- JP4272371B2 JP4272371B2 JP2001339954A JP2001339954A JP4272371B2 JP 4272371 B2 JP4272371 B2 JP 4272371B2 JP 2001339954 A JP2001339954 A JP 2001339954A JP 2001339954 A JP2001339954 A JP 2001339954A JP 4272371 B2 JP4272371 B2 JP 4272371B2
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- program
- iteration
- variable
- debugging support
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3664—Environments for testing or debugging software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3624—Software debugging by performing operations on the source code, e.g. via a compiler
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Description
【発明が属する技術分野】
本発明は、ソースプログラムを翻訳することにより得られたオブジェクトプログラムのデバッグ作業を支援するデバッグ支援装置、コンパイラ装置に関する。
【0002】
【従来の技術】
高度情報化の進展に伴い、プログラムの品質向上が叫ばれて久しい。プログラムの開発を行う開発現場では、プログラマによるデバッグ作業をどのように効率化するかの試行錯誤が日夜続けられている。
最終完成品たるオブジェクトプログラムは、高級プログラミング言語を用いて記述されたソースプログラムをコンパイラが翻訳することにより生成される。デバッグ作業とは、このオブジェクトプログラムを試験的に実行させてみて、その実行時に不都合が現れた場合にソースプログラムを修正し、再度オブジェクトプログラムを作り直すという作業である。このデバッグ作業を効率良く行うよう構成された機器をデバッグ支援装置といい、デバッグ支援装置はオブジェクトプログラムにおける任意の位置にブレークポイントを設定し、このブレークポイントにてオブジェクトプログラムの動作を止める機能(ブレークポイント設定機能)、動作を止めた状態から、一命令ずつ実行してゆく機能(ワンステップ実行機能)、動作を止めた状態にて、ハードウェア資源の保持値を表示する機能(資源参照機能)等の機能を具備する。加えて、例えばブレークポイントが設定された命令に対応するソースコードを表示するという機能を有しており、これにより、バグが発見された場合のソースプログラムの修正がより捗るようにしている。
【0003】
【発明が解決しようとする課題】
ところで近年のプログラムの開発にあたっては、並列化のために最適化されたオブジェクトプログラムをデバッグしたい機会が多々有る。並列化のための最適化手法には、ループアンローリングやソフトウェアパイプライニングといった様々な手法がある。特に後者のソフトウェアパイプライニングがなされたオブジェクトプログラムは、ループ処理の繰り返し単位(イタレーションという)に相当する命令群を複数含み、複数イタレーションに対応する命令群がパイプラインにて並列実行可能なようになっている。ソフトウェアパイプライニングがなされたオブジェクトプログラムのデバッグでは、1つの命令の実行時にどの命令が並列実行され、その命令がソースコードのどの行に対応するのかにプログラマの関心が集まる。しかしパイプラインによるオブジェクトプログラムの実行では、イタレーションに対応する命令群が完全に並列実行されるのではなく、各イタレーションが、前段のイタレーションより僅かに遅れて実行されるという独特の動作を行うので、ソースコードにてこの動作を表現することは困難である。
【0004】
だからといって、並列実行される命令に対応するソースコードを一切表示しないと、プログラマに対する負担が多大になる。つまりプログラマは、自分が記述したソースコードと、オブジェクトプログラムにおける命令との対応関係を充分に把握し、尚且つこれがパイプラインにて実行された場合、どのような動作をなすかを想像してデバッグ作業を行う必要があるため、デバッグ作業が思うように捗らないという問題点がある。
【0005】
本発明の目的は、複数イタレーションが並列実行される様子を表現することができるデバッグ支援装置を提供することである。
【0006】
【課題を解決するための手段】
上記目的は、ループ処理を含むソースプログラムを翻訳する第1過程と、当該ループ処理についての複数イタレーションが並列化されるように変換を施す第2過程とを経て得られるオブジェクトプログラムについてのデバッグ支援装置であって、オブジェクトプログラムを構成する各命令に、複数イタレーションのうち何れかを一意に示す識別子と、そのイタレーションに属するソースコードを特定する行番号とを付加してなるデバッグリストを記憶する記憶手段と、操作者からの操作に従って、記憶されているデバッグリストにおける1つの命令を特定する特定手段と、特定された命令に付加された識別子は、ループ処理のどのイタレーションを示しているかを判定する判定手段と、判定されたイタレーションの前後のイタレーションを示す識別子と、同じ命令に付加されている行番号をデバッグリストから探索する探索手段と、特定された命令に付加された行番号に対応するソースコードと、探索された行番号に対応するソースコードとを表示する第1表示手段とを備えるものにより達成される。
【0007】
【発明の実施の形態】
以降図面を参照しながら、本発明にかかるコンパイラ装置及びデバッグ支援装置の実施形態について説明する。本発明にかかるコンパイラ装置及びデバッグ支援装置は、図1に示すプログラム開発システムを構成する。図1に示すように本システムはコンパイラ装置(コンパイラコア1、ソフトウェアパイプライニング部2を含む)と、プログラム動作環境3(メモリ4、プロセッサ5を含む)と、デバッグ支援装置6(ユーザインターフェイス7、ウィンドゥ識別子付加部8、割付情報変換部9、ブレークポイント設定部10、プログラム実行制御部11、ワンステップ実行制御部12、資源操作処理部13を含む)とから構成される。
【0008】
<コンパイラコア1>
コンパイラコア1は、コンパイラ装置の中核をなすものであり、高級プログラミング言語にて記述されたソースプログラムを翻訳することにより、一次アセンブルプログラムを得る。コンパイラコア1による翻訳は、構文解析処理、不要コード削除、定数の畳み込み、誘導変数最適化、変数に対する資源割り付け等の処理が含まれる。図2(a)にソースプログラムの一例を示し、図2(b)に一次アセンブルプログラムの一例を示す。ソースプログラムは、高級プログラミング言語で記述された文(センテンス)によりループ処理のアルゴリズムを記述するものである。このループ処理は、変数iを誘導変数としていて、配列xの第i番目の要素x[i]を、変数aに代入し(行番号l2)、変数aに変数sを加算して変数bに代入し(行番号l3)、変数bに変数tを乗じて変数cに格納した後(行番号l4)、配列の第i番目の要素y[i]に格納する(行番号l5)というものである。一方、一次アセンブルプログラムは、ソースプログラムと同じループ処理のアルゴリズムを、アセンブル命令で記述するものである。これらのアセンブル命令は、ターゲットマシンのプロセッサが具備するレジスタr0〜r11を操作するものである。
【0009】
一次アセンブルプログラムにおいて配列x[i],y[i]のそれぞれのエントリーアドレスx,yは、レジスタr10,r11に格納され、ループ処理が一回実行される度に、命令B「add r10,4,r10」及び命令G「add r11,4,r11」にて"4"ずつインクリメントされる。一次アセンブルプログラムにおいて誘導変数iの役割を果たすのはこのレジスタr10であり、ループ処理の終了要件は、命令E「cmp r10,x+400」にて、このレジスタr10の値が"x+400"になると判定されることである。変数a,b,c,s,tは、それぞれレジスタr0,r1,r2,r5,r6に対応しており、行番号l2における配列要素x[i]の読み出しは、命令A「ld (r10),r0」に対応する。また、行番号l5における配列要素y[i]の書き込みは、命令F「st r2,(r11)」に対応する。更に、l3,l4における加算、乗算は、命令C「add r0,r5,r1」、命令D「mul r1,r6,r2」にそれぞれ対応する。ここで強調したいのは、一次アセンブルプログラムにはループ処理の高速化のための最適化がなされており、デバッグ作業のためのデバッグ情報として割付情報、行番号が付されている点である。図2(b)における境界"E"は、1つ以上の並列実行可能な命令を区切るエンドコードであり、これによると命令A「ld (r10),r0」−命令B「add r10,4,r10」が第1の並列実行単位、命令C「add r0,r5,r1」が第2の並列実行単位、命令D「mul r1,r6,r2」−命令E「cmp r10,x+400」が第3の並列実行単位、命令F「st r2,(r11)」−命令G「add r11,4,r11」−命令H「blt loop」が第4の並列実行単位となる。これらの命令の末尾に付された「;l1」,「;l2」,「;l3」,「;ln」は、行番号であり、各命令に付加され、その命令に対応するセンテンスの行番号を一意に示す役割をもつ。命令A「ld (r10),r0」に付された「;l2」は、ソースプログラムにおける2行目のセンテンスに対応することを意味し、命令C「add r0,r5,r1」に付された「;l3」は、ソースプログラムにおける3行目のセンテンスに対応することを意味する。命令B「add r10,4,r10」に付された「;ln」は、命令B「add r10,4,r10」に一意に対応するセンテンスが存在しないことを意味する。本明細書では、ソースプログラムのうち行番号により一意に特定されるセンテンスをソースコードという。
【0010】
割付情報は、ソースプログラムの各センテンスに使用されている変数がどの資源(レジスタ)に割り付けられているかを示す情報であり、「;;」を先頭に配することにより、命令列本体とは区別されている。尚、コンパイラコア1により生成されるプログラムは、一次アセンブルプログラムでなくてもよく、コンパイラ装置の内部で解釈可能な言語体系(中間言語体系と呼ばれる)で記述されていてもよい。
【0011】
<ソフトウェアパイプライニング部2>
ソフトウェアパイプライニング部2は、一次アセンブルプログラムに対してソフトウェアパイプライニングを行う。ソフトウェアパイプライニングとは、パイプラインにより並列実行可能な数だけ、イタレーションを構成する命令群(イタレーション命令群)を作成し、ターゲットマシンのパイプラインに適合するよう、これらを加工しておく技術である。ソフトウェアパイプライニング部2による処理手順を簡易化して表した図が図3のフローチャートである。本図を参照しながら、ソフトウェアパイプライニング部2による処理手順の概略を説明する。ソフトウェアパイプライニング部2は、一次アセンブルプログラムからループ処理のボディを構成する命令列を検出し(ステップS1)、ボディ命令列をステージ数nだけコピーし、イタレーションを構成する命令群(イタレーション命令群)をn組み得る(ステップS2)。図2(b)のプログラムにおいてボディに対応するのは、命令A「ld (r10),r0」〜命令H「blt loop」であり、これらがn個に複製されることになる。n組みのイタレーション命令群が得られたところで、投入間隔だけずらして配置することによりパイプラインイメージを作成する(ステップS3)。
【0012】
投入間隔とは、あるイタレーションの実行が開始してから、次のイタレーションが開始するまでの間隔であり、この値が小さい程、ループが高速化されることになる。投入間隔たる命令数を"2"として、命令A「ld (r10),r0」〜命令H「blt loop」を変換することにより得られたパイプラインイメージの一例を図4(a)に示す。パイプラインイメージが得られたところで、パイプラインイメージを、プロログ、エピログ、カーネルに分割する(ステップS4)。図4(b)は、図4(a)のパイプラインイメージから得られるプロログ、エピログ、カーネルの一例を示す図である。ボディの繰り返し回数は100回であるので、図4(c)に示すようにこのカーネルの部分が98(=100-2)回繰り返されることになる。パイプラインイメージが分割された段階にて、プロログ〜エピログを構成する各命令に、自身が属するイタレーションを示すイタレーション識別子「;ix」を付加し(ステップS5)、カーネルを構成する命令に、自身が属するイタレーションを示すステージ識別子「sx;」を付加する(ステップS6)。ステージ識別子とは、カーネル内のイタレーションを識別する識別子である。イタレーション識別子は、一番先行しているイタレーションを基準にして、各イタレーションの相対順序を示しているのに対して、ステージ識別子は、一番遅れているイタレーションを基準にして、各イタレーションの相対順序を示している。この点はイタレーション識別子とステージ識別子との差違といえる。図5は、ステップによりイタレーション識別子、ステージ識別子が付加されたパイプラインイメージを示す図である。
【0013】
続いて異なるイタレーション命令群間の並列実行性及び同一のイタレーション命令群間の並列実行性の何れかが成立する命令同士をグループ化する(ステップS7)。パイプラインイメージでは、縦の並びに位置する命令が並列実行可能性を有することになる。図6(a)(b)は、図5において並列実行可能性が成立する複数命令を示す図である。図5のパイプラインイメージでは、縦の並びに位置する複数の命令に、図6(a)に示すようなイタレーション間の並列実行可能性が存在することになる。並列実行可能性としては、他にコンパイラコア1により一次アセンブルプログラムの生成時に検出されたものがある。これは同一のイタレーション内に成立する並列実行可能性であり、図6(b)にその一例を示す。これら2種類の並列実行可能性のうち何れかが成立するものは並列実行が可能になる。図7(a)(b)は、並列実行可能性が成立するもの同士がグループ化されて形成された並列実行単位(図中では、並列単位と略記している。)を示す図である。本図に示すようにプロログは、命令A「ld (r10),r0」−命令B「add r10,4,r10」とからなる並列実行単位#1と、命令A「ld (r10),r0」−命令B「add r10,4,r10」−命令C「add r0,r5,r1」からなる並列実行単位#2と、命令D「mul r1,r6,r2」−命令E「cmp r10,x+400」−命令C「add r0,r5,r1」からなる並列実行単位#3にて構成される。
【0014】
カーネルは、命令A「ld (r10),r0」−命令B「add r10,4,r10」−命令D「mul r1,r6,r2」−命令E「cmp r10,x+400」からなる並列実行単位#4と、命令C「add r0,r5,r1」−命令F「st r2,(r11)」−命令G「add r11,4,r11」−命令H「blt loop」からなる並列実行単位#5とから構成される。エピログは命令E「cmp r10,x+400」−命令D「mul r1,r6,r2」からなる並列実行単位#6と、命令F「st r2,(r11)」−命令G「add r11,4,r11」−命令H「blt loop」からなる並列実行単位#7から構成される。
【0015】
これらの命令のうち、命令E「cmp r10,x+400」はループ処理の終了要件を判定するための命令でありプロログ−エピログに配する必要はない。また、カーネルについては、98回繰り返し行わねばならない。これらを踏まえ、ステップS8にて、並列実行単位同士を境界で区切ることにより、図8に示す二次アセンブルプログラムを得る(ステップS8)。
【0016】
図8は、ステップS8により得られる二次アセンブルプログラムを示す図である。図8において並列実行単位#1〜並列実行単位#8のそれぞれは、境界たるエンドビット"E"で区切られている。各並列実行単位内の命令は、「;l2」「;l3」「;ln」といった行番号と、「;i1」「;i2」「;i3」といったイタレーション識別子及び「;s1」「;s2」「;s3」といったステージ識別子が付加されている。
【0017】
コンパイラ装置より出力された二次アセンブルプログラムは、アセンブラにより再配置可能なリロケータブルコードに変換される。更にリンカがリロケータブルコードを連結編集することにより、機械語プログラムがえられる。コンパイラ装置により生成された二次アセンブルプログラムは、デバッグという役割をもって利用されるので、これをデバッグリストとよび、機械語プログラムと区別する。コンパイラ装置、アセンブラ、リンカにより生成されるプログラム、即ち、翻訳作業の生成物たる機械語プログラムを、本明細書ではオブジェクトプログラムと称する。また二次アセンブルプログラムのうち、イタレーション識別子、ステージ識別子、行番号を除いた純粋なプログラム部分も、翻訳作業の生成物といえるのでオブジェクトプログラムと称する。
【0018】
<プログラム動作環境3、メモリ4、プロセッサ5>
プログラム動作環境3は、オブジェクトプログラムが実装されるべきターゲットマシンと同じハードウェア環境を実現するものであり、メモリ4及びプロセッサ5を実装するターゲットマシンそのもの(1)、メモリ4及びプロセッサ5を実装するICE(InCircuit Emulator)ボード(2)、メモリ4及びプロセッサ5の機能をソフトウェア的に実現するソフトウェアシミュレータ(3)といった形態がある。
【0019】
メモリ4は、コンパイラ装置、アセンブラ、リンカにより生成された機械語プログラムを格納する。
プロセッサ5は、オブジェクトプログラムに対する現在のアクセス先アドレスを保持するプログラムカウンタ(i)、現在アドレスから命令をフェッチする命令フェッチ回路(ii)、フェッチされた命令を格納する命令レジスタ(iii)、命令レジスタに格納された命令を解読する命令デコーダ(iv)、演算器(v)、汎用レジスタR0〜R15(vi)、データメモリ(vii)、データやアドレス転送用のバス(viii)を備え、3段のイタレーションを投入間隔2のパイプラインにて並列実行することができる。このプロセッサ5は、ユーザモード、スーパーバイザモードという2つの動作モードを有する。ユーザモードとは、オブジェクトプログラムを実行するモードであり、スーパーバイザモードとは、デバッグ支援装置からの指示に従い、動作を行うものでありデバッグ用のモードといえる。プロセッサは通常、ユーザモードに設定されており、ユーザモードからスーパーバイザモードへの切り換えは、PI命令の解読・実行をトリガとする。「PI命令」とは、スーパーバイザモードへと動作モードを切り換えるための割り込み信号を発生させる命令であり、オブジェクトプログラムの任意の箇所に組み込まれている。PI命令には「パスカウント」の設定が可能である。このパスカウントが設定されている場合、プログラムはパスカウントに示される回数だけ、PI命令が解読されるのを待ち、この回数だけPI命令が解読された時点で、スーパーバイザモードの切り換えのための割り込みを発生する。
【0020】
<デバッグ支援装置6>
デバッグ支援装置6は、プロセッサ5がスーパーバイザモードにある場合に、プログラムに様々な指示を与えるプログラムであり、ソースプログラムと、ソフトウェアパイプライニング部2により生成された二次アセンブルプログラム(デバッグリスト)とを格納して、これらを利用したデバッグ作業を実現する。図1に示すようにデバッグ支援装置6は、ユーザインターフェイス7、ウィンドゥ識別子付加部8、割付情報変換部9、ブレークポイント設定部10、プログラム実行制御部11、ワンステップ実行制御部12、資源操作処理部13を備える。
【0021】
<ユーザインターフェイス7>
ユーザインターフェイス7は、図9に示す対話画面を介した対話操作の操作環境を操作者に提供する。図9に示す対話画面は、アセンブラリストが配置されるアセンブラウィンドゥと、ソースリストが配置されるソースウィンドゥ#i、ソースウィンドゥ#i+1、ソースウィンドゥ#i+2とからなる。アセンブラリストとは、デバッグリストたる二次アセンブルプログラムの一部分であり、このうちプロセッサ3により実行されている現在アドレスは、ハッチングにより修飾表示される。
【0022】
ソースリストとは、ソースプログラムを構成する複数センテンスについてのプログラムリストである。ユーザは、ポインティングデバイスを用いることにより、これらプログラムリスト内の任意のセンテンス又は命令を指定することができる。ソースウィンドゥは、並列実行されるイタレーションと同数だけ表示され、それぞれのイタレーションに割り当てられる。図10は、ソースウィンドゥ#i〜ソースウィンドゥ#i+2と、i,i+1,i+2巡目のイタレーションとの対応を示す図である。
【0023】
例えばi,i+1,i+2巡目のイタレーションを並列実行する場合、先行するi,i+1,i+2の順に、これらイタレーションを各ソースウィンドゥに割り当てる。つまりソースウィンドゥ#iには、矢印sy1に示すように一番先行するイタレーションであるi巡目のイタレーションが、ソースウィンドゥ#i+1は矢印sy2に示すようにi+1巡目のイタレーションが、ソースウィンドゥ#i+2は、最語尾たるi+2巡目のイタレーションが矢印sy3に示すように割り当てられる。
【0024】
i巡目イタレーションの実行が済めば、ソースウィンドゥ#i+1,#i+2に割り当てていたi+1,i+2巡目イタレーションを、それぞれ矢印hj1,hj2に示すようにソースウィンドゥ#i、#i+1に移す。i+3巡目のイタレーションが生成されれば、これを矢印hj3に示すようにソースウィンドゥ#i+2に割り当てる。こうした動的な割り当てにより、ユーザインターフェイス7は、複数のイタレーションがパイプライン的に動作している様子を画面上に再現するのである。またソースウィンドゥ#i〜ソースウィンドゥ#i+2のうち、現在アドレスに対応するものは対応行指定マークにて指示され、他のソースウィンドゥとは区別される。現在アドレスに対応するウィンドゥとは以下の意味である。図9において現在アドレス0049に位置する命令A「ld (r10),r0」は、図8において「;s1」というステージ識別子と、「;l2」という行番号とが付加されている。一方、ソースウィンドゥ#i〜ソースウィンドゥ#i+2はi,i+1,i+2巡目のイタレーションに対応しているので、ステージ識別子s1はソースウィンドゥ#iに対応する。ステージ識別子s1に対応するソースウィンドゥ#iが、先に述べた『現在アドレスに対応するウィンドゥ』である。また現在アドレス0049には「;l2」という行番号が付されているので、この行番号「;l2」が現在アドレス0049に対応するセンテンスとして対応行指定マークが付されている。一方、ソースウィンドゥ#i+1、ソースウィンドゥ#i+2は、現在アドレスが属するイタレーションと、並列実行されるイタレーションに対応しており、これらは「;l2」とは異なる行「;l4」,「;l5」にハッチングが付されている。
【0025】
<ウィンドゥ識別子付加部8>
ウィンドゥ識別子付加部8は、二次アセンブルプログラムを構成するそれぞれの命令に対してウィンドゥ識別子及び行番号を付す構成要素であり、その実体は図11のフローチャートである。ウィンドゥ識別子とは、パイプラインにて並列実行可能性される複数イタレーションのそれぞれを示す識別子であり、イタレーションに対するウィンドゥ識別子の割り当ての一例を図12に示す。一番先行するイタレーションにはウィンドゥ識別子w1が、これに続くイタレーションにはw2が、これに続くイタレーションにはw3がそれぞれ割り当てられていることがわかる。イタレーションの個数をnとすると、各命令には、n個のウィンドゥ識別子が割り当てられる。ウィンドゥ識別子と似たような概念として、先に述べたイタレーション識別子及びステージ識別子があり、これらとの差違は以下の通りである。即ち、イタレーション識別子(ステージ識別子)は、命令が属するイタレーションを示すもののみがその命令に付される。これに対してウィンドゥ識別子は、自身が属するイタレーションを始め、並列実行される全てのイタレーションについてのウィンドゥ識別子が命令に付加される。このため、並列実行されるイタレーションの数が"3"であれば、イタレーションに属する命令には、それぞれ3つのウィンドゥ識別子が付加される。
【0026】
図11のフローチャートにおいて、プロログ、カーネル、エピログに属する全ての命令について、ステップS13〜ステップS20の処理を繰り返すループ構造になっている(ステップS11、ステップS12)。ここで一回の繰り返しにおける処理対象を命令iとすると、命令iは、ステップS13にてウィンドゥ識別子w1〜wnが付加された後、ステップS14にて、ループ処理の先頭であるか否かが判定される。その後、命令iが先頭命令である場合はステップS15の処理が施され、命令iが先頭以外である場合は、ステップS16〜ステップS21の処理が施される。ステップS15は、ループ処理の先頭を指定した行番号を、命令iについてのウィンドゥ識別子w1〜wnに付加するという処理を行うステップであり、この場合、命令に付加された複数のウィンドゥ識別子には、共通の行番号が付加されることになる。ステップS16〜ステップS21は、「;ln」に設定された行番号を補間するものである。つまりステップS16にてウィンドゥ識別子w1〜wnのうち、イタレーション識別子(ステージ識別子)に対応するものに行番号「;lx(x=1,2,3,4・・・・)」を付し、それ以外のものに「;ln」を付す。
【0027】
図13は、図8のプログラムに対してウィンドゥ識別子及び行番号を付すことにより得られた二次アセンブルプログラムを示す図である。本図において四角枠で囲んだ行番号とウィンドゥ識別子との組みには、有効な行番号「;l2」「;l3」「;l4」が付加されている。一方、四角枠で囲んでいない行番号とウィンドゥ識別子との組みには、無効な行番号「;ln」が付加されている。
【0028】
その後、命令に付加されたウィンドゥ識別子w1〜wnのそれぞれに対して、ステップS19〜ステップS21の処理を施す(ステップS17、ステップS18)。ステップS19〜ステップS21の繰り返し時において処理対象たるウィンドゥ識別子を「wx」とすると、行番号が「;ln」であるウィンドゥ識別子wxに対しては、命令jに付加された行番号「;ly」が付加される(ステップS21)。ここで命令jとは、命令iに先行する命令であって、ウィンドゥ識別子wxに有効な行番号が付加された命令であり、ステップS20にて特定される。ステップS20及びステップS21におけるウィンドゥ識別子割り当ての過程について図14を参照しながら説明する。ここでは、アドレス0045に位置する命令A「ld (r10),r0」が命令iであると仮定する。
【0029】
図14は、ステップS16の過程を経た段階のプログラムを示す図である。本図においてアドレス0042に位置する命令A「ld (r10),r0」には、ウィンドゥ識別子w3に対してl2が付加されている。一方w1,w2にはlnが付加されている。従って、命令A「ld (r10),r0」については、これらウィンドゥ識別子w1,w2がステップS20、ステップS21の処理が施されることになる。w1については、アドレス0049に位置するカーネル内の命令A「ld (r10),r0」が命令yとして検出される。w2については、アドレス0051に位置するカーネル内の命令A「ld (r10),r0」が命令yとして検出される。そして、これらの命令yに付加された行番号l2が矢印jy1,jy2に示すように行番号「ly」として検出されるのである。同様の付加処理を、行番号が";ln"と設定された全てのウィンドゥ識別子について行えば、図15の二次アセンブルプログラムがえられることになる。尚、図15のプログラムでは、イタレーション識別子及びステージ識別子を示していないが、これは単に図示していないだけであって、これらも二次アセンブルプログラムに付加されていることは留意されたい。何故なら、これらイタレーション識別子及びステージ識別子は、各命令がどのイタレーションに対応するかを特定するというウィンドゥ識別子とは異なる役割があり、これがないと、各命令がどのステージやイタレーションに対応するのかが特定できないからである。尚、命令iに後続する命令であって、ウィンドゥ識別子wxに有効な行番号が付加された命令を、ステップS20において命令jとして特定しても良い。
【0030】
<割付情報変換部9>
割付情報変換部9は、デバッグ作業のために割付情報の加工を行うプログラムであり、その実体は図16のフロ−チャ−トである。このフローチャートによると、割付情報変換部9はステップS27からステップS29までの処理を、各割付情報のそれぞれについて繰り返すというループ構造になっている(ステップS25、ステップS26)。ステップS27にて、割付情報変換部9は開始点及び終了点を示す行番号の組みを用いて変数iの生存区間を特定するという一般の生存区間解析を行う。その後、開始点及び終了点を示す行番号の組みを命令のアドレスに変換し、開始点及び終了点を示すアドレスの組みにより変数iについての生存区間情報を生成して割付情報に付加する(ステップS28)。更に生存区間の範囲内にある命令に付されたウィンドゥ識別子を、変数iについての生存区間情報に付加する(ステップS29)。以上の処理が各割付情報のそれぞれについて繰り返される。図2(a)の一例でいうと、変数aについてはl2〜l3が生存区間、変数bについてはl3〜l4、変数cについてはl4〜l5がそれぞれ生存区間となる。これらの行番号をアドレスに変換し、更にウィンドゥ識別子を付加することにより、図17のように生存区間情報が付加された割付情報が得られる。1つのボディから複数のイタレーション命令群が生成され、1つの行番号の組みが、複数のアドレスの組みに変換されているため、図17では変数a,bについての生存区間情報が複数になっている点には、注意されたい。
【0031】
<プログラム実行制御部11>
プログラム実行制御部11は、オブジェクトプログラムをプロセッサに実行させる構成要素であり、その実体は、図18のフロ−チャ−トを実現するプログラムである。図18のフロ−チャ−トにおいてステップS41は、現在アドレスにブレークポイントが設定されているか否かにより、ステップS42及びステップS43をスキップするか、或はこれらを実行するかを切り換える条件付き分岐ステップである。ステップS42〜ステップS43は、現在アドレスにブレークポイントされている場合に必要な処理であり、ステップS42においてデバッグ支援装置内部に退避されている命令を現在アドレスに書き戻し、ステップS43において現在アドレスをプロセッサのプログラムカウンタに設定して、オブジェクトプログラムをRUNする。ステップS41における条件分岐を経た後、事象待ちステップS44に至る。ステップS44にて成立を待っている事象とは、プロセッサにおけるモード切り換えのための割込発生であり、この事象が成立すれば、プログラムカウンタの現在アドレスを取り出して、オブジェクトプログラムにおいてその現在アドレスに位置する命令を特定し(ステップS45)、その後、特定された命令にウィンドゥ識別子が付加されているか否かに応じて(ステップS46)、ステップS47〜ステップS49の処理、ステップS50〜ステップS54、ステップS40の処理を択一的に実行する。特定された命令にウィンドゥ識別子が付加されている場合、ソースウィンドゥを表示し(ステップS47)、特定された命令に付された行番号lxに対応するセンテンスと、行番号lxから前後2,3行に位置するセンテンスとをウィンドゥwxに表示して(ステップS48)、行番号lxに対応するセンテンスを修飾する(ステップS49)。
【0032】
一方、特定された命令にウィンドゥ識別子が付されている場合、ウィンドゥ識別子の数だけソースウィンドゥを表示し、各ウィンドゥ識別子を割り当てた後、全てのソースウィンドゥについて、ステップS53及びステップS54を繰り返す。ここで一回の繰り返しにあたって処理対象たるウィンドゥ識別子をwxとする。このウィンドゥ識別子wxに付された行番号lxに対応するセンテンスは、行番号lxから前後2,3行に位置するセンテンスとともにウィンドゥwxに表示される(ステップS53)。その後、行番号lxに対応するセンテンスを修飾する(ステップS54)という処理が全てのウィンドゥ識別子について繰り返されるのである。この繰り返しが終われば、特定された命令に付加されたイタレーション識別子(ステージ識別子)に対応するソースウィンドゥにおいて、そのイタレーション識別子(ステージ識別子)に付加された行番号に対応するセンテンスを対応行指定マークにより指定して(ステップS40)処理を終える。
【0033】
図19は、ステップS51〜ステップS54での処理により表示されるソースウィンドゥの一例を示す図である。本図は、アドレス0049がブレークポイントであることを前提にしている。このアドレスに存在する命令A「ld (r10),r0」は、w1からw3までのウィンドゥ識別子が付されているので、3つのソースウィンドゥが表示され、これらウィンドゥ識別子に付加された番号に相当するセンテンスl2,l4,l5がハッチングにて修飾されている。複数のセンテンスが互いに異なるイタレーションに対応していることを知らしめるため、複数のセンテンスは、互いに異なる表示態様で表示することは望ましい。
【0034】
<ブレークポイント設定部10>
ブレークポイント設定部10は、プログラム動作環境3におけるメモリ4内のオブジェクトプログラムに対してブレークポイントを設定する構成要素であり、その実体は図20のフロ−チャ−トを実現するプログラムである。図20のフロ−チャ−トは、ウィンドゥ指定を操作者から受け付け、このウィンドゥ指定に応じてステップS31〜ステップS32、ステップS36及びステップS33〜ステップS36を択一的に実行するものである。アセンブラウィンドゥが指定された際、ステップS31に移行する。
【0035】
ステップS31は、アセンブラウィンドゥ内に表示された命令が指定されるのを待つという事象待ちステップであり、命令指定がなされると、ステップS32及びステップS38が順次実行されることになる。ステップS32では、指定された命令がメモリから取り出されて、アドレスと対応づけてデバッグ支援装置内に退避される。その後ステップS38において、PI命令を用いて特定された命令を上書きする。これらは既存のデバッグ支援装置にて行われる設定処理と何等変わりはない。一方ソースウィンドゥが指定された際、ステップS33をトリガとして、ステップS34〜ステップS38を実行する。ステップS33に移行する。ステップS33は、選択された1つのソースウィンドゥにおけるセンテンスの指定が操作者によりなされるのを待つという事象待ちステップであり、センテンス指定がなされると、ステップS34〜ステップS36が順次実行されることになる。つまり、選択されてるソースウィンドゥと、指定されたセンテンスとの組みに対応する命令xを、ウィンドゥ識別子と行番号との組みに基づき特定し(ステップS34)、特定された命令xと、アドレスとを対応づけてデバッグ支援装置内に退避する(ステップS35)。その後、ブレークポイントを設定すべきアドレスにおける命令に付加されたウィンドゥ識別子と、現在アドレスにおける命令に付加されたウィンドゥ識別子とからステージ差を算出し(ステップS36)、ステージ差をパスカウントとしたPI命令を生成して(ステップS37)、PI命令を用いて特定された命令を上書きする(ステップS38)。これらステップS33〜ステップS38は、ソースウィンドゥ及びセンテンスに対応する命令を、ウィンドゥ識別子と行番号との組みから導くという点に特徴がある。以降ブレークポイント設定部10の動作例を、図21、図22を参照しながら説明する。図21ではソースウィンドウ#1,#i+1,#i+2がそれぞれ、1,2,3巡目のイタレーションにそれぞれ割り当てられている。現在アドレスはアドレス0050であるものとする。図8においてこのアドレス0050に付されたステージ識別子は「;s1」であり、このアドレスが原始的にカーネルにおける1巡目のステージに対応する。
【0036】
ここでユーザは、ソースウィンドウ#i+2の行番号;l5にブレークポイントを設定しようとしている。ソースウィンドウ#i+2は3巡目のイタレーションに対応し、これに対応するステージ識別子はs3である。これに行番号l5;が付されているのは、アドレス0054である。
一方現在アドレス0050は、1巡目のイタレーションに対応しているので、ステージ番号の差である値"2"のパスカウントを付加して、アドレス0054をPI命令に書き換える(ステップS38)。その後機械語プログラムの実行を開始させると、アドレス0054の命令は2回ブレークを見逃され、3回目実行に、PI命令が発動して停止する。図22は、その停止時における表示状態である。図21でソースウィンドウ#i+2が表していた3巡目のイタレーションは、図22ではソースウィンドウ#iに移り、新たに現在実行中の4巡目、5巡目のイタレーションがそれぞれソースウィンドウ#i+1、ソースウィンドウ#i+2に割り当てられている。本図において各ソースウィンドウは、それぞれ行番号l5;,l5;,l4;に停止していることがわかる。
【0037】
<ワンステップ実行制御部12>
ワンステップ実行制御部12は、オブジェクトプログラムに対してブレークポイントを設定する構成要素であり、その実体は、図23のフロ−チャ−トの処理手順を実現するプログラムである。図23のフロ−チャ−トにおいてステップS55は、操作者によるウィンドゥ指定に応じてステップS56〜ステップS57及びステップS58〜ステップS60を択一的に実行する条件付き分岐ステップである。操作者によりアセンブラウィンドゥが指定された場合には、現在アドレスの次のアドレスにある命令を、アドレスと対応づけてデバッグ支援装置内に退避し(ステップS56)、次のアドレスにPI命令を書き込む(ステップS57)。ソースウィンドゥが指定された場合には、現在アドレスに対応するセンテンスを特定し(ステップS58)、特定されたセンテンスの次の行に位置するセンテンスを特定して(ステップS59)、選択されたウィンドゥと、特定されたセンテンスとの組みに対応する命令を特定した後(ステップS60)、特定された命令にPI命令を書き込んで(ステップS61)、現在アドレスをPI命令に設定してから、プロセッサをRUNする(ステップS62)。以降、プログラム実行制御部11と同様、図16のステップS44〜ステップS54、ステップS40の処理を行う(簡略化のため、これらのステップは図21から省略している。)。図24は、アセンブラウィンドゥに対してワンステップ実行を行った場合の一例であり、図25は、ソースウィンドゥに対してワンステップ実行を行った場合の一例を示す図である。図24では、矢印cy1に示すように現在アドレス0049がであることを想定しており、この現在アドレス0049に対して、アセンブラウィンドゥのワンステップ実行を行えば、矢印cy2に示すように現在アドレスが0050になった時点で割り込みが発生する。一方、現在アドレスが同じ0049でありながら、ソースウィンドゥにおけるワンステップ実行では、矢印ry1に示すように現在アドレス0049に対応する行番号;l4であるので、矢印ry2に示すように次の行番号;l5に達した時点で割り込みが発生する。この行番号;l5は、矢印ry3に示すようにアドレス0054に対応するので、アドレス0054に到達した時点で割り込みが発生していることが理解できる。
【0038】
<資源操作処理部13>
資源操作処理部13は、プログラム動作環境3におけるハードウェア資源の操作処理を行う構成要素である。ハードウェア資源の操作には、資源への値の書き込み操作と、資源に保持されている値の参照操作の2種類がある。ハードウェア資源には、プロセッサ5内のレジスタR0〜R15と、ターゲットメモリ4に格納されているものの2つの種類がある。本実施形態における資源操作処理部13が特徴的なのは、以上の資源に対する操作を、変数を介して行う点である。変数を介してなされる資源の参照処理は、図26のフローチャートの処理手順により実現される。以降本フローチャートを参照して、資源操作処理部13による資源参照処理について説明する。図26のフロ−チャ−トにおいてステップS71及びステップS72は、事象待ちステップである。ステップS71で成立を待つ事象とは、操作者によるソースウィンドゥの選択であり、ステップS72で成立を待つ事象とは、選択されたソースウィンドゥ内のセンテンスにて使用されている変数xの指定である。直列的な関係にあるステップS71及びステップS72にて、事象成立が確認されれば、ステップS73を経て、ステップS74を実行する。ステップS74は、変数xの割付情報における有効範囲にアドレスyが属しているか否かに応じて、ステップS75及びステップS76〜ステップS77を択一的に実行する条件付き分岐命令である。ここでアドレスyとは、指定された変数xを使用するセンテンスに対応する命令yのアドレスであり、ステップS73にて特定される。変数xの割付情報における有効範囲にアドレスyが属していない場合、ステップS75においてInvalid表示を行い、属している場合、ステップS76において割付情報に示されている変数xの割り付け資源xを特定し、ステップS77において資源xの保持値を変数xの値として表示する。
【0039】
図27は、図19の状態で、ソースウィンドゥの変数bが操作者により指定された状態を示す図である。図19の状態では、現在アドレスが0049であるので、このアドレス0049が変数の生存区間に属するか否かがステップS74で判定される。枠wk1は、図19のプログラムに対する割付情報の一例を示す。この割付情報において、アドレス0049は、ウィンドゥ識別子w2が付された生存区間に属しているので、このアドレス0049において変数bは有効であり、この変数bに割り付けられた資源r1の値を変数の値として表示する(ステップS77)。一方、このアドレス0049の命令A「ld (r10),r0」には「l4;」の行番号が付加されているので、ソースウィンドゥ#i+1における「;l4」のセンテンスが修飾されることになる。
【0040】
以上のように本実施形態によれば、ソフトウェアパイプライニングが行われた際にそのステージ数分のウィンドウを表示させ、それぞれの停止位置や変数値を表示させることによって、ユーザが混乱することなく各イタレーションの実行状況を把握することが可能になる。
上記実施形態に基づいて説明してきたが、現状において最善の効果が期待できるシステム例として提示したに過ぎない。本発明はその要旨を逸脱しない範囲で変更実施することができる。代表的な変更実施の形態として、以下(A)(B)(C)・・・・のものがある。
【0041】
(A)本実施形態では、ウィンドゥ識別子の付加を行うウィンドゥ識別子付加部8と、割付情報の変換を行う割付情報変換部9とはデバッグ支援装置内に設けたが、コンパイラ装置内に設けてよいことはいうまでもない。
(B)ブレークポイントにより二次アセンブルプログラムの実行が停止した際、ソースウィンドゥを複数表示させ、それぞれのソースウィンドゥ内で、ブレークポイントたる命令に対応するセンテンスを修飾したが、以下の(B−1)、(B−2)のように変更しても良い。
【0042】
(B−1)ブレークポイントにて命令の実行が停止した場合、ブレークポイントたる命令に付加された複数ウィンドゥ識別子についての行番号を参照し、それら複数行番号に対応する複数センテンスを1つのソースウィンドゥ内で修飾表示しても良い。図28は、この変更表示を行った場合の表示例であり、アドレスの命令に付加された複数のウィンドゥ識別子に対応する行番号に対する修飾表示が、1つのソースウィンドゥ内で行われていることがわかる。
【0043】
(B−2)ブレークポイントにて命令の実行が停止した場合、ブレークポイントたる命令に付加された複数ウィンドゥ識別子についての行番号を参照し、それら複数行番号に対応する複数センテンスから代表的なものを1つ選んで1つのソースウィンドゥ内で修飾表示しても良い。この選び方としては、一番先行するイタレーションを示す行番号、あるいは、一番後続するイタレーションを示す行番号を選ぶといった方法がある。図29を一例にして具体的を説明する。アドレスの命令には、w1,w2,w3というウィンドゥ識別子が付加されており、これらウィンドゥ識別子に更に行番号「;l2」「;l4」「;l5」が付されているものとする。これらのうち最も先行しているのは行番号「;l5」なので、この行番号のセンテンスを表示するのである。
【0044】
(C)本実施形態では、一次アセンブルプログラムに対してソフトウェアパイプライニングが行われた場合を一例にして説明したが、これに限定されるものではない。ループ処理のボディを複数イタレーション命令群に翻訳するという処理を経る最適化手法ならどのようなものも本発明を適用することができる。そのような最適化手法にループアンローリングといったものがある。
【0045】
ループアンローリングは、ループ内のボディに含まれるセンテンスを複数センテンスに書き換えて、ループ処理の実行効率を向上させる最適化手法である。例えば、配列bの要素を用いて配列aの要素の定義を行うセンテンス『a[i]=b[i]*(x+10)』を、変数iが100になるまで繰り返し行うループ処理があるものとする。このループ処理に対してループアンローリングを行う場合、ループボディ内のセンテンス『a[i]=b[i]*(x+10)』を『a[i]=b[i]*(x+10)』と、『a[i+1]=b[i+1]*(x+10)』という2つのセンテンスに書き換える。また書換前において誘導変数iは、『i++』に示すように、『1』ずつインクリメントされていたが、書換後では、これが『i+=2』に示すように、『2』ずつインクリメントしてゆくように書き換えられている。書換前では、ループ処理を一回実行する度に、配列aの配列要素が1つずつ決定されていったが、書換後では、ループ処理を一回実行する度に、『a[i]=b[i]*(x+10)』というセンテンスと、『a[i+1]=b[i+1]*(x+10)』というセンテンスとが並列に実行することができ、この場合配列aの配列要素が2つずつ決定されてゆくことになる。これら2つのセンテンスは、それぞれが別個のイタレーション命令群に翻訳されるので、それらイタレーション命令群にステージ識別子を付しておく。こうすることにより、ループアンローリングにより得られた二次アセンブルプログラムに対しても、デバッグ支援装置は本実施形態と同様のデバッグ作業を行うことができる。
【0046】
(D)本実施形態では、プログラム動作環境3及びデバッグ支援装置6はそれぞれ別装置であるものとして説明したが、これらが一体構成されていてもよい。また、デバッグ支援装置6を構成するユーザインターフェイス7〜資源操作処理部13は、プロセッサ5により実行されるプログラムであってもよい。更に、デバッグ支援装置6を構成するユーザインターフェイス7〜資源操作処理部13は、プロセッサ5とは異なるプロセッサにより実行されるプログラムであってもよい。
【0047】
(E)本実施形態では、コンパイラ装置及びデバッグ支援装置6は、それぞれ別装置であるものとして説明したが、これらが一体構成されていてもよい。また、コンパイラ装置を構成するコンパイラコア1〜ソフトウェアパイプライニング部2は、プロセッサ5により実行されるプログラムであってもよい。加えて、プログラム動作環境3、デバッグ支援装置6、コンパイラ装置を一体構成にしてもよい。
【0048】
(F)ソースウィンドゥ#i、#i+1、#i+2のそれぞれにイタレーションを動的に割り当てる場合において、各ソースウィンドゥが何巡目のイタレーションに対応するかを表示してもよい。
(G)図3、図11、図16、図18、図20、図23、図26のフローチャートを参照して説明した手順等を実行形式プログラムにより実現し、これを記録媒体に記録したりネットワーク上で伝送させることにより流通・販売の対象にしても良い。このような記録媒体には、ICカードや光ディスク、フレキシブルディスク等がある。これらに記録された機械語プログラムは汎用コンピュータにインストールされることにより利用に供される。この汎用コンピュータは、インストールした実行形式プログラムを逐次実行して、本実施形態に示した最適化装置の機能を実現するのである。
【0049】
【発明の効果】
以上説明したように、本発明に係るデバッグ支援装置は、ループ処理を含むソースプログラムを翻訳する第1過程と、当該ループ処理についての複数イタレーションが並列化されるように変換を施す第2過程とを経て得られるオブジェクトプログラムについてのデバッグ支援を行うにあたって、オブジェクトプログラムを構成する各命令に、複数イタレーションのうち何れかを一意に示す識別子と、そのイタレーションに属するソースコードを特定する行番号とを付加してなるデバッグリストを記憶する記憶手段と、操作者からの操作に従って、記憶されているデバッグリストにおける1つの命令を特定する特定手段と、特定された命令に付加された識別子は、ループ処理のどのイタレーションを示しているかを判定する判定手段と、判定されたイタレーションの前後のイタレーションを示す識別子と、同じ命令に付加されている行番号をデバッグリストから探索する探索手段と、特定された命令に付加された行番号に対応するソースコードと、探索された行番号に対応するソースコードとを表示する第1表示手段とを備えるものにより達成される。
【0050】
並列実行される命令が、どのソースコードに対応するかをプログラマは、頭の中で容易に想像することができ、ループ処理を動作させたパイプラインにて動作させた場合にも混乱しない。故に、ループ処理にて誤動作が生じたとしても、その誤動作の原因を短期間に究明することができる。
ここで、前記特定手段により特定される命令は、オブジェクトプログラムの動作を止めるべきブレークポイントであってもよい(3)。
【0051】
ブレークポイントに設定された命令が、ユーザが閲覧を望む変数の有効範囲内にある場合、前記デバッグ支援装置は更に、第1表示手段により表示されたソースコードと共に、ユーザが閲覧を望む変数の保持値を表示する第2表示手段を備えていてもよい(5)。ソースプログラムにおけるソースコードのそれぞれの時点において、デバッグ作業対象たる変数がどのように更新されるかをユーザは逐次観察することができる。
【0052】
第1表示手段により表示されたソースコードに対する変数指定を受け付ける受付手段を備え、第2表示手段は、指定された変数の保持値を表示してもよい(6)。第1表示手段により表示されたソースコードから、変数を指定することができるので、ユーザは効率良く各変数の値を参照することができる。
ここで、ループ処理を含むソースプログラムを翻訳し、当該ループ処理についての複数イタレーションが並列化されるように変換を施すコンパイラ装置については、ソースプログラムにおけるループ処理内のボディを翻訳することにより命令群を得る翻訳手段と、命令群を複製し、複数の命令群を得る複製手段と、複数の命令群を構成するそれぞれの命令であって、並列実行されるものを1つのグループにグループ化し、各グループを境界で区切ってオブジェクトプログラムを得るグループ化手段と、オブジェクトプログラムを構成する各命令に、複数イタレーションのうち何れかを一意に示す識別子と、そのイタレーションに属するソースコードを特定する行番号とを付加して、デバッグリストを作成する作成手段とを備えるのが望ましい。ループ処理に適合したオブジェクトプログラムを生成しつつも、このオブジェクトプログラムに識別子、行番号を付加してデバックリストを得るので、デバッグ支援装置がその機能を発揮させることができる。
【図面の簡単な説明】
【図1】プログラム開発システムの内部を示す図である。
【図2】(a)ソースプログラムの一例を示す図である。
(b)一次アセンブルプログラムの一例を示す図である。
【図3】ソフトウェアパイプライニング部2の処理手順を示すフローチャートである。
【図4】(a)命令A「ld (r10),r0」〜命令H「blt loop」を変換することにより得られたパイプラインイメージの一例を示す図である。
(b)図4(a)のパイプラインイメージから得られるプロログ、エピログ、カーネルの一例を示す図である。
(c)ステージ、カーネル、エピログが実行される様子を示す図である。
【図5】ステップによりイタレーション識別子、ステージ識別子が付加されたパイプラインイメージを示す図である。
【図6】(a)(b)図5において並列実行可能性が成立する複数命令を示す図である。
【図7】(a)(b)並列実行可能性が成立するもの同士がグループ化されて形成された並列実行単位を示す図である。
【図8】 ステップS8により得られる二次アセンブルプログラムを示す図である。
【図9】 ユーザインターフェイス7により提供される対話画面を示す図である。
【図10】 ソースウィンドゥ#i〜ソースウィンドゥ#i+2と、i,i+1,i+2巡目のイタレーションとの対応を示す図である。
【図11】 ウィンドゥ識別子付加部8の処理手順を示すフローチャートである。
【図12】 イタレーションに対するウィンドゥ識別子の割り当ての一例を示す図である。
【図13】 図8のプログラムに対してウィンドゥ識別子及び行番号を付すことにより得られた二次アセンブルプログラムを示す図である。
【図14】 ステップS16の過程を経た段階のプログラムを示す図である 。
【図15】 ウィンドゥ識別子が付加された二次アセンブルプログラムの一例を示す図である。
【図16】 割付情報変換部9の処理手順を示すフローチャートである。
【図17】 割付情報と、生存区間情報との一例を示す図である。
【図18】 プログラム実行制御部11の処理手順を示すフローチャートである。
【図19】 二次アセンブルプログラムに対する割付情報の一例を示す図である。
【図20】 ブレークポイント設定部10の処理手順を示すフローチャートである。
【図21】 ブレークポイント設定部10の動作例を示す図である。
【図22】 ブレークポイントによるオブジェクトプログラムの停止時における表示状態の一例を示す図である。
【図23】 ワンステップ実行制御部12の処理手順を示すフローチャートである。
【図24】 アセンブラウィンドゥに対してワンステップ実行を行った場合の一例である。
【図25】 ソースウィンドゥに対してワンステップ実行を行った場合の一例を示す図である。
【図26】 資源操作処理部13の処理手順を示すフローチャートである。
【図27】 図19の状態で、ソースウィンドゥの変数bが操作者により指定された状態を示す図である。
【図28】 変更例(B−1)に対応する表示例である。
【図29】 変更例(B−2)に対応する表示例である。
【符号の説明】
1 コンパイラ装置コア
2 ソフトウェアパイプライニング部
3 プログラム動作環境
4 メモリ
5 プロセッサ
6 デバッグ支援装置
7 ユーザインターフェイス
8 ウィンドゥ識別子付加部
9 割付情報変換部
10 ブレークポイント設定部
11 プログラム実行制御部
12 ワンステップ実行制御部
13 資源操作処理部
Claims (22)
- ループ処理を含むソースプログラムを翻訳する第1過程と、1つのループ処理についての複数イタレーションが並列化されるように変換を施す第2過程とを経て得られるオブジェクトプログラムについてのデバッグ支援装置であって、
オブジェクトプログラムを構成する各命令に、前記並列化された複数のイタレーションのうちのどのイタレーションに属するかを示す識別子と、そのイタレーション中の行番号との組からなる情報を付加してなるデバッグリストを記憶する記憶手段と、
操作者からの操作に従って、記憶されているデバッグリストにおける1つの命令を特定する特定手段と、
前記操作者からの操作に従って特定された命令が、ループ処理のどのイタレーションを示しているかを当該命令に付加された識別子に基づいて判定する判定手段と、
判定されたイタレーションの前後のイタレーションを示す識別子と、前記判定されたイタレーションおよび前記前後のイタレーションをそれぞれ示す識別子を付加された命令に付加されている行番号をデバッグリストに基づいて探索する探索手段と、
特定された命令に付加された行番号に対応するソースコードと、探索された行番号に対応するソースコードとを表示する第1表示手段と
を備えることを特徴とするデバッグ支援装置。 - 前記特定手段により特定される命令は、オブジェクトプログラムの動作を止めるべきブレークポイントである
ことを特徴とする請求項1記載のデバッグ支援装置。 - 前記ブレークポイントには、
特定回数のイタレーションの実行完了後、次のイタレーション実行中にオブジェクトプログラムの動作を止める際の、その特定回数を示すパスカウントが指定されている
ことを特徴とする請求項2記載のデバッグ支援装置 - 前記デバッグ支援装置は更に、
第1表示手段により表示されたソースコードと共に、ブレークポイントに設定された命令がユーザが閲覧を望む変数の有効範囲内にある場合に、その変数の保持値を表示する第2表示手段
を備えることを特徴とする請求項2記載のデバッグ支援装置。 - 第1表示手段により表示されたソースコードに対する変数指定を受け付ける受付手段を備え、
第2表示手段は、
指定された変数の保持値を表示する
ことを特徴とする請求項4記載のデバッグ支援装置。 - 前記デバッグ支援装置は更に、
第1表示手段により表示されたソースコードと共に、ブレークポイントに設定された命令がユーザが閲覧を望む変数の有効範囲外にある場合に、そのデバッグ対象たる変数が有効範囲外である旨を表示する第2表示手段
を備えることを特徴とする請求項2記載のデバッグ支援装置。 - 前記特定手段により特定される命令は
ユーザがワンステップ実行させようとした命令である
ことを特徴とする請求項1記載のデバッグ支援装置。 - ループ処理を含むソースプログラムを翻訳し、1つのループ処理についての複数イタレーションが並列化されるように変換を施すコンパイラ装置であって、
ソースプログラムにおけるループ処理内のボディを翻訳することにより命令群を得る翻
訳手段と、
命令群を複製し、複数の命令群を得る複製手段と、
複数の命令群を構成するそれぞれの命令であって、互いに並列実行されない命令の間にエンドコードを挿入することにより、並列実行される命令で構成されるグループに区切ってオブジェクトプログラムを得るグループ化手段と、
オブジェクトプログラムを構成する各命令に、前記並列化された複数のイタレーションのうちのどのイタレーションに属するかを示す識別子と、そのイタレーション中の行番号との組からなる情報を付加して、デバッグリストを作成する作成手段と
を備えることを特徴とするコンパイラ装置。 - 複数イタレーションの並列実行は、パイプラインにより実現され、
前記コンパイラ装置は、
境界で区切られた各グループを、パイプラインのプロログ、カーネル、エピログのそれぞれに分類する分類手段を含む
ことを特徴とする請求項8記載のコンパイラ装置。 - 各変数について並列実行されるイタレーション毎の有効範囲を示す割付情報を生成する生成手段を備え、
割付情報に示されるイタレーション毎の有効範囲に属する命令は、
各変数に割り付けられた資源をオペランドに使用している
ことを特徴とする請求項8記載のコンパイラ装置。 - ループ処理を含むソースプログラムを翻訳する第1過程と、1つのループ処理についての複数イタレーションが並列化されるように変換を施す第2過程とを経て得られるオブジェクトプログラムについてのデバッグ支援を、コンピュータに行わせるデバッグ支援プログラムであって、
オブジェクトプログラムを構成する各命令に、前記並列化された複数のイタレーションのうちのどのイタレーションに属するかを示す識別子と、そのイタレーション中の行番号との組からなる情報を付加してなるデバッグリストにおける1つの命令を操作者からの操作に従って、特定する特定ステップと、
前記操作者からの操作に従って特定された命令が、ループ処理のどのイタレーションを示しているかを当該命令に付加された識別子に基づいて判定する判定ステップと、
判定されたイタレーションの前後のイタレーションを示す識別子と、前記判定されたイタレーションおよび前記前後のイタレーションをそれぞれ示す識別子を付加された命令に付加されている行番号をデバッグリストに基づいて探索する探索ステップと、
特定された命令に付加された行番号に対応するソースコードと、探索された行番号に対応するソースコードとを表示する第1表示ステップと
からなる手順をコンピュータに行わせることを特徴とするデバッグ支援プログラム。 - 前記特定ステップにより特定される命令は、オブジェクトプログラムの動作を止めるべきブレークポイントである
ことを特徴とする請求項11記載のデバッグ支援プログラム。 - 前記ブレークポイントには、
特定回数のイタレーションの実行完了後、次のイタレーション実行中にオブジェクトプログラムの動作を止める際の、その特定回数を示すパスカウントが指定されている
ことを特徴とする請求項12記載のデバッグ支援プログラム。 - 前記デバッグ支援プログラムは更に、
第1表示手段により表示されたソースコードと共に、ブレークポイントに設定された命令がユーザが閲覧を望む変数の有効範囲内にある場合に、その変数の保持値を表示する第2表示ステップ
からなる手順をコンピュータに行わせることを特徴とする請求項12記載のデバッグ支援プログラム。 - 第1表示ステップにより表示されたソースコードに対する変数指定を受け付ける受付ステップを備え、
第2表示ステップは、
指定された変数の保持値を表示する
ことを特徴とする請求項14記載のデバッグ支援プログラム。 - 前記デバッグ支援プログラムは更に、
第1表示ステップにより表示されたソースコードと共に、ブレークポイントに設定された命令がユーザが閲覧を望む変数の有効範囲外にある場合に、そのデバッグ対象たる変数が有効範囲外である旨を表示する第2表示ステップ
からなる手順をコンピュータに行わせることを特徴とする請求項12記載のデバッグ支援プログラム。 - 前記特定ステップにより特定される命令は
ユーザがワンステップ実行させようとした命令である
ことを特徴とする請求項11記載のデバッグ支援プログラム。 - ループ処理を含むソースプログラムを翻訳し、1つのループ処理についての複数イタレーションが並列化されるように変換を施すコンパイラプログラムであって、
ソースプログラムにおけるループ処理内のボディを翻訳することにより命令群を得る翻
訳ステップと、
命令群を複製し、複数の命令群を得る複製ステップと、
複数の命令群を構成するそれぞれの命令であって、互いに並列実行されない命令の間にエンドコードを挿入することにより、並列実行される命令で構成されるグループに区切ってオブジェクトプログラムを得るグループ化ステップと、
オブジェクトプログラムを構成する各命令に、前記並列化された複数のイタレーションのうちのどのイタレーションに属するかを示す識別子と、そのイタレーション中の行番号との組からなる情報を付加して、デバッグリストを作成する作成ステップと
からなる手順をコンピュータに行わせることを特徴とするコンパイラプログラム。 - 複数イタレーションの並列実行は、パイプラインにより実現され、
前記コンパイラプログラムは、
境界で区切られた各グループを、パイプラインのプロログ、カーネル、エピログのそれぞれに分類する分類ステップを含む
ことを特徴とする請求項18記載のコンパイラプログラム - 各変数について並列実行されるイタレーション毎の有効範囲を示す割付情報を生成する生成ステップを備え、
割付情報に示されるイタレーション毎の有効範囲に属する命令は、
各変数に割り付けられた資源をオペランドに使用している
ことを特徴とする請求項18記載のコンパイラプログラム。 - 請求項11〜17の何れかに記載のデバッグ支援プログラムを、記録したコンピュータ読み取り可能な記録媒体。
- 請求項18〜20の何れかに記載のコンパイラプログラムを、記録したコンピュータ読み取り可能な記録媒体。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001339954A JP4272371B2 (ja) | 2001-11-05 | 2001-11-05 | デバッグ支援装置、コンパイラ装置、デバッグ支援プログラム、コンパイラプログラム、及びコンピュータ読取可能な記録媒体。 |
US10/287,231 US7237229B2 (en) | 2001-11-05 | 2002-11-04 | Debugging aid parallel execution of a plurality of iterations with source lists display corresponding to each iteration |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001339954A JP4272371B2 (ja) | 2001-11-05 | 2001-11-05 | デバッグ支援装置、コンパイラ装置、デバッグ支援プログラム、コンパイラプログラム、及びコンピュータ読取可能な記録媒体。 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2003140920A JP2003140920A (ja) | 2003-05-16 |
JP4272371B2 true JP4272371B2 (ja) | 2009-06-03 |
Family
ID=19154225
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001339954A Expired - Fee Related JP4272371B2 (ja) | 2001-11-05 | 2001-11-05 | デバッグ支援装置、コンパイラ装置、デバッグ支援プログラム、コンパイラプログラム、及びコンピュータ読取可能な記録媒体。 |
Country Status (2)
Country | Link |
---|---|
US (1) | US7237229B2 (ja) |
JP (1) | JP4272371B2 (ja) |
Families Citing this family (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8224636B2 (en) * | 2002-12-17 | 2012-07-17 | Cadence Design Systems, Inc. | Method and system for implementing parallel execution in a computing system and in a circuit simulator |
JP2004303113A (ja) * | 2003-04-01 | 2004-10-28 | Hitachi Ltd | 階層メモリ向け最適化処理を備えたコンパイラおよびコード生成方法 |
JP2006227681A (ja) * | 2005-02-15 | 2006-08-31 | Matsushita Electric Ind Co Ltd | デバッグ装置、デバッグ方法およびプログラム |
US7721267B2 (en) * | 2005-05-16 | 2010-05-18 | Texas Instruments Incorporated | Efficient protocol for encoding software pipelined loop when PC trace is enabled |
JP2006350686A (ja) * | 2005-06-16 | 2006-12-28 | Seiko Epson Corp | 命令セット・シミュレータ生成装置及びシミュレータ生成方法 |
US9146832B2 (en) * | 2005-10-14 | 2015-09-29 | Oracle International Corporation | Debugging functionality embedded in an application |
KR100781358B1 (ko) * | 2005-10-21 | 2007-11-30 | 삼성전자주식회사 | 데이터 처리 시스템 및 그의 데이터 처리방법 |
US8261270B2 (en) * | 2006-06-20 | 2012-09-04 | Google Inc. | Systems and methods for generating reference results using a parallel-processing computer system |
US8146066B2 (en) | 2006-06-20 | 2012-03-27 | Google Inc. | Systems and methods for caching compute kernels for an application running on a parallel-processing computer system |
US8381202B2 (en) * | 2006-06-20 | 2013-02-19 | Google Inc. | Runtime system for executing an application in a parallel-processing computer system |
US8443348B2 (en) * | 2006-06-20 | 2013-05-14 | Google Inc. | Application program interface of a parallel-processing computer system that supports multiple programming languages |
US8136102B2 (en) * | 2006-06-20 | 2012-03-13 | Google Inc. | Systems and methods for compiling an application for a parallel-processing computer system |
US8136104B2 (en) * | 2006-06-20 | 2012-03-13 | Google Inc. | Systems and methods for determining compute kernels for an application in a parallel-processing computer system |
US8108844B2 (en) * | 2006-06-20 | 2012-01-31 | Google Inc. | Systems and methods for dynamically choosing a processing element for a compute kernel |
US8024708B2 (en) * | 2006-06-20 | 2011-09-20 | Google Inc. | Systems and methods for debugging an application running on a parallel-processing computer system |
US7814486B2 (en) * | 2006-06-20 | 2010-10-12 | Google Inc. | Multi-thread runtime system |
US8375368B2 (en) * | 2006-06-20 | 2013-02-12 | Google Inc. | Systems and methods for profiling an application running on a parallel-processing computer system |
US7979494B1 (en) | 2006-11-03 | 2011-07-12 | Quest Software, Inc. | Systems and methods for monitoring messaging systems |
JP2008269529A (ja) * | 2007-04-25 | 2008-11-06 | Toshiba Corp | デバッグ支援装置 |
FR2928753B1 (fr) * | 2008-03-14 | 2012-09-21 | Pierre Fiorini | Architecture de traitement informatique accelere. |
JP5118562B2 (ja) * | 2008-06-20 | 2013-01-16 | 株式会社東芝 | デバッグ支援装置 |
US8627304B2 (en) | 2009-07-28 | 2014-01-07 | International Business Machines Corporation | Vectorization of program code |
US20110271248A1 (en) * | 2010-04-29 | 2011-11-03 | Microsoft Corporation | Converting controls into source code |
US8645920B2 (en) | 2010-12-10 | 2014-02-04 | Microsoft Corporation | Data parallelism aware debugging |
US8990781B2 (en) * | 2012-06-04 | 2015-03-24 | International Business Machines Corporation | Synchronization point visualization for modified program source code |
US20160224258A1 (en) * | 2015-02-02 | 2016-08-04 | Microsoft Technology Licensing, Llc | Generating computer programs for use with computers having processors with dedicated memory |
US10970070B2 (en) * | 2019-03-29 | 2021-04-06 | Arm Limited | Processing of iterative operation |
Family Cites Families (34)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5241635A (en) * | 1988-11-18 | 1993-08-31 | Massachusetts Institute Of Technology | Tagged token data processing system with operand matching in activation frames |
US5262976A (en) * | 1989-11-13 | 1993-11-16 | Harris Corporation | Plural-bit recoding multiplier |
US5179702A (en) * | 1989-12-29 | 1993-01-12 | Supercomputer Systems Limited Partnership | System and method for controlling a highly parallel multiprocessor using an anarchy based scheduler for parallel execution thread scheduling |
US5175856A (en) * | 1990-06-11 | 1992-12-29 | Supercomputer Systems Limited Partnership | Computer with integrated hierarchical representation (ihr) of program wherein ihr file is available for debugging and optimizing during target execution |
US5588152A (en) * | 1990-11-13 | 1996-12-24 | International Business Machines Corporation | Advanced parallel processor including advanced support hardware |
US5625836A (en) * | 1990-11-13 | 1997-04-29 | International Business Machines Corporation | SIMD/MIMD processing memory element (PME) |
US5590345A (en) * | 1990-11-13 | 1996-12-31 | International Business Machines Corporation | Advanced parallel array processor(APAP) |
GB9027853D0 (en) * | 1990-12-21 | 1991-02-13 | Inmos Ltd | Multiple instruction issue |
KR100299691B1 (ko) * | 1991-07-08 | 2001-11-22 | 구사마 사부로 | 확장가능알아이에스씨마이크로프로세서구조 |
US5539911A (en) * | 1991-07-08 | 1996-07-23 | Seiko Epson Corporation | High-performance, superscalar-based computer system with out-of-order instruction execution |
DE69228980T2 (de) * | 1991-12-06 | 1999-12-02 | National Semiconductor Corp., Santa Clara | Integriertes Datenverarbeitungssystem mit CPU-Kern und unabhängigem parallelen, digitalen Signalprozessormodul |
US5528177A (en) * | 1994-09-16 | 1996-06-18 | Research Foundation Of State University Of New York | Complementary field-effect transistor logic circuits for wave pipelining |
US5790825A (en) * | 1995-11-08 | 1998-08-04 | Apple Computer, Inc. | Method for emulating guest instructions on a host computer through dynamic recompilation of host instructions |
JP3380390B2 (ja) * | 1996-03-27 | 2003-02-24 | 富士通株式会社 | デバッグ情報表示装置 |
US6721941B1 (en) * | 1996-08-27 | 2004-04-13 | Compuware Corporation | Collection of timing and coverage data through a debugging interface |
US6760903B1 (en) * | 1996-08-27 | 2004-07-06 | Compuware Corporation | Coordinated application monitoring in a distributed computing environment |
GB9621582D0 (en) * | 1996-10-16 | 1996-12-04 | Russell Tony A | Handling of mushrooms |
US5946493A (en) * | 1997-03-28 | 1999-08-31 | International Business Machines Corporation | Method and system in a data processing system for association of source code instructions with an optimized listing of object code instructions |
US5966538A (en) * | 1997-10-31 | 1999-10-12 | Hewlett-Packard Company | Method and apparatus for automatically determining which compiler options should be used when compiling a computer program |
US5960202A (en) * | 1997-10-31 | 1999-09-28 | Hewlett Packard Company | Method and apparatus for automatically logging compiler options and/or overriding compiler options |
US6161216A (en) * | 1998-04-29 | 2000-12-12 | Emc Corporation | Source code debugging tool |
US6701516B1 (en) * | 1998-05-21 | 2004-03-02 | Qifang Li | P++ software |
GB9825102D0 (en) * | 1998-11-16 | 1999-01-13 | Insignia Solutions Plc | Computer system |
US6571385B1 (en) * | 1999-03-22 | 2003-05-27 | Intel Corporation | Early exit transformations for software pipelining |
US6820250B2 (en) * | 1999-06-07 | 2004-11-16 | Intel Corporation | Mechanism for software pipelining loop nests |
US6412106B1 (en) * | 1999-06-16 | 2002-06-25 | Intervoice Limited Partnership | Graphical system and method for debugging computer programs |
JP2001034504A (ja) * | 1999-07-19 | 2001-02-09 | Mitsubishi Electric Corp | ソースレベルデバッガ |
US6795963B1 (en) * | 1999-11-12 | 2004-09-21 | International Business Machines Corporation | Method and system for optimizing systems with enhanced debugging information |
US6754893B2 (en) * | 1999-12-29 | 2004-06-22 | Texas Instruments Incorporated | Method for collapsing the prolog and epilog of software pipelined loops |
US6799266B1 (en) * | 1999-12-30 | 2004-09-28 | Texas Instruments Incorporated | Methods and apparatus for reducing the size of code with an exposed pipeline by encoding NOP operations as instruction operands |
US6892380B2 (en) * | 1999-12-30 | 2005-05-10 | Texas Instruments Incorporated | Method for software pipelining of irregular conditional control loops |
US6732296B1 (en) * | 2000-07-14 | 2004-05-04 | Rockwell Automation Technologies, Inc. | Object oriented scaleable test executive |
US6912709B2 (en) * | 2000-12-29 | 2005-06-28 | Intel Corporation | Mechanism to avoid explicit prologs in software pipelined do-while loops |
US7178131B2 (en) * | 2003-09-29 | 2007-02-13 | International Business Machines Corporation | Inspecting the runtime behavior of a program while minimizing perturbation |
-
2001
- 2001-11-05 JP JP2001339954A patent/JP4272371B2/ja not_active Expired - Fee Related
-
2002
- 2002-11-04 US US10/287,231 patent/US7237229B2/en not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
US7237229B2 (en) | 2007-06-26 |
US20030093771A1 (en) | 2003-05-15 |
JP2003140920A (ja) | 2003-05-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4272371B2 (ja) | デバッグ支援装置、コンパイラ装置、デバッグ支援プログラム、コンパイラプログラム、及びコンピュータ読取可能な記録媒体。 | |
US6275956B1 (en) | Integrated dynamic-visual parallel debugging apparatus and method thereof | |
US7266809B2 (en) | Software debugger and software development support system for microcomputer operable to execute conditional execution instruction | |
US8359584B2 (en) | Debugging from a call graph | |
EP0241946B1 (en) | Information processing system | |
JPH11194957A (ja) | デバッグ支援装置、並列実行情報生成装置、及びこれらに適用されるプログラムを記録した記録媒体 | |
JPH08272609A (ja) | Vliwプログラムのオブジェクト・コード互換性提供方法 | |
US7028291B2 (en) | Debugging method and debugging device | |
US20060036798A1 (en) | Static memory allocation in a graphical programming system | |
JP2010198629A (ja) | プログラムコード変換方法 | |
JPH09198276A (ja) | プログラムデバッグシステム | |
US20180137025A1 (en) | Multi-language playback framework | |
JP2008033941A (ja) | 三次元キャラクタ・アニメーションを表すオペレータ・グラフの効率的処理 | |
JP2007058731A (ja) | プロセッサ、及び並列命令実行対応デバッグ装置 | |
US8776010B2 (en) | Data type provider for a data store | |
JP2006196002A (ja) | 非同期プログラムフローのモデリングを含むソフトウェアツール | |
JP2009169864A (ja) | コンパイル方法およびコンパイルプログラム | |
JP4328328B2 (ja) | ソフトウエア開発ツールプログラム | |
JP2012014526A (ja) | プログラムコードの構造変換装置、並びにコード構造変換プログラム | |
WO2021140568A1 (ja) | 関数生成プログラム、関数生成方法、及び情報処理装置 | |
Van Put et al. | Lancet: A nifty code editing tool | |
JPH096646A (ja) | プログラムシミュレーション装置 | |
JPH10320212A (ja) | キャッシュ向け最適化方法 | |
JP3461185B2 (ja) | ロードモジュールへのソースコード行番号登録方法および装置 | |
JPH02176938A (ja) | 機械語命令最適化方式 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20041101 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20071113 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20071127 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20080124 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20080729 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20080929 |
|
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: 20090203 |
|
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: 20090227 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120306 Year of fee payment: 3 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 4272371 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: 20120306 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130306 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130306 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140306 Year of fee payment: 5 |
|
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 |
|
LAPS | Cancellation because of no payment of annual fees |