(57)【特許請求の範囲】
【請求項１】
ループ処理を含むソースプログラムを翻訳する第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の何れかに記載のコンパイラプログラムを、記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明が属する技術分野】
本発明は、ソースプログラムを翻訳することにより得られたオブジェクトプログラムのデバッグ作業を支援するデバッグ支援装置、コンパイラ装置に関する。
【０００２】
【従来の技術】
高度情報化の進展に伴い、プログラムの品質向上が叫ばれて久しい。プログラムの開発を行う開発現場では、プログラマによるデバッグ作業をどのように効率化するかの試行錯誤が日夜続けられている。
最終完成品たるオブジェクトプログラムは、高級プログラミング言語を用いて記述されたソースプログラムをコンパイラが翻訳することにより生成される。デバッグ作業とは、このオブジェクトプログラムを試験的に実行させてみて、その実行時に不都合が現れた場合にソースプログラムを修正し、再度オブジェクトプログラムを作り直すという作業である。このデバッグ作業を効率良く行うよう構成された機器をデバッグ支援装置といい、デバッグ支援装置はオブジェクトプログラムにおける任意の位置にブレークポイントを設定し、このブレークポイントにてオブジェクトプログラムの動作を止める機能(ブレークポイント設定機能)、動作を止めた状態から、一命令ずつ実行してゆく機能(ワンステップ実行機能)、動作を止めた状態にて、ハードウェア資源の保持値を表示する機能(資源参照機能)等の機能を具備する。加えて、例えばブレークポイントが設定された命令に対応するソースコードを表示するという機能を有しており、これにより、バグが発見された場合のソースプログラムの修正がより捗るようにしている。
【０００３】
【発明が解決しようとする課題】
ところで近年のプログラムの開発にあたっては、並列化のために最適化されたオブジェクトプログラムをデバッグしたい機会が多々有る。並列化のための最適化手法には、ループアンローリングやソフトウェアパイプライニングといった様々な手法がある。特に後者のソフトウェアパイプライニングがなされたオブジェクトプログラムは、ループ処理の繰り返し単位(イタレーションという)に相当する命令群を複数含み、複数イタレーションに対応する命令群がパイプラインにて並列実行可能なようになっている。ソフトウェアパイプライニングがなされたオブジェクトプログラムのデバッグでは、1つの命令の実行時にどの命令が並列実行され、その命令がソースコードのどの行に対応するのかにプログラマの関心が集まる。しかしパイプラインによるオブジェクトプログラムの実行では、イタレーションに対応する命令群が完全に並列実行されるのではなく、各イタレーションが、前段のイタレーションより僅かに遅れて実行されるという独特の動作を行うので、ソースコードにてこの動作を表現することは困難である。
【０００４】
だからといって、並列実行される命令に対応するソースコードを一切表示しないと、プログラマに対する負担が多大になる。つまりプログラマは、自分が記述したソースコードと、オブジェクトプログラムにおける命令との対応関係を充分に把握し、尚且つこれがパイプラインにて実行された場合、どのような動作をなすかを想像してデバッグ作業を行う必要があるため、デバッグ作業が思うように捗らないという問題点がある。
【０００５】
本発明の目的は、複数イタレーションが並列実行される様子を表現することができるデバッグ支援装置を提供することである。
【０００６】
【課題を解決するための手段】
上記目的は、ループ処理を含むソースプログラムを翻訳する第１過程と、当該ループ処理についての複数イタレーションが並列化されるように変換を施す第２過程とを経て得られるオブジェクトプログラムについてのデバッグ支援装置であって、オブジェクトプログラムを構成する各命令に、複数イタレーションのうち何れかを一意に示す識別子と、そのイタレーションに属するソースコードを特定する行番号とを付加してなるデバッグリストを記憶する記憶手段と、操作者からの操作に従って、記憶されているデバッグリストにおける1つの命令を特定する特定手段と、特定された命令に付加された識別子は、ループ処理のどのイタレーションを示しているかを判定する判定手段と、判定されたイタレーションの前後のイタレーションを示す識別子と、同じ命令に付加されている行番号をデバッグリストから探索する探索手段と、特定された命令に付加された行番号に対応するソースコードと、探索された行番号に対応するソースコードとを表示する第１表示手段とを備えるものにより達成される。
【０００７】
【発明の実施の形態】
以降図面を参照しながら、本発明にかかるコンパイラ装置及びデバッグ支援装置の実施形態について説明する。本発明にかかるコンパイラ装置及びデバッグ支援装置は、図１に示すプログラム開発システムを構成する。図１に示すように本システムはコンパイラ装置（コンパイラコア１、ソフトウェアパイプライニング部２を含む）と、プログラム動作環境３（メモリ４、プロセッサ５を含む）と、デバッグ支援装置６（ユーザインターフェイス７、ウィンドゥ識別子付加部８、割付情報変換部９、ブレークポイント設定部１０、プログラム実行制御部１１、ワンステップ実行制御部１２、資源操作処理部１３を含む）とから構成される。
【０００８】
＜コンパイラコア１＞
コンパイラコア１は、コンパイラ装置の中核をなすものであり、高級プログラミング言語にて記述されたソースプログラムを翻訳することにより、一次アセンブルプログラムを得る。コンパイラコア１による翻訳は、構文解析処理、不要コード削除、定数の畳み込み、誘導変数最適化、変数に対する資源割り付け等の処理が含まれる。図２（ａ）にソースプログラムの一例を示し、図２（ｂ）に一次アセンブルプログラムの一例を示す。ソースプログラムは、高級プログラミング言語で記述された文(センテンス)によりループ処理のアルゴリズムを記述するものである。このループ処理は、変数iを誘導変数としていて、配列xの第i番目の要素x[i]を、変数aに代入し(行番号l2)、変数aに変数sを加算して変数bに代入し(行番号l3)、変数bに変数tを乗じて変数cに格納した後(行番号l4)、配列の第i番目の要素y[i]に格納する(行番号l5)というものである。一方、一次アセンブルプログラムは、ソースプログラムと同じループ処理のアルゴリズムを、アセンブル命令で記述するものである。これらのアセンブル命令は、ターゲットマシンのプロセッサが具備するレジスタr0〜r11を操作するものである。
【０００９】
一次アセンブルプログラムにおいて配列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」にそれぞれ対応する。ここで強調したいのは、一次アセンブルプログラムにはループ処理の高速化のための最適化がなされており、デバッグ作業のためのデバッグ情報として割付情報、行番号が付されている点である。図２（ｂ）における境界"E"は、1つ以上の並列実行可能な命令を区切るエンドコードであり、これによると命令A「ld (r10),r0」−命令B「add r10,4,r10」が第１の並列実行単位、命令C「add r0,r5,r1」が第２の並列実行単位、命令D「mul r1,r6,r2」−命令E「cmp r10,x+400」が第３の並列実行単位、命令F「st r2,(r11)」−命令G「add r11,4,r11」−命令H「blt loop」が第４の並列実行単位となる。これらの命令の末尾に付された「;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」に一意に対応するセンテンスが存在しないことを意味する。本明細書では、ソースプログラムのうち行番号により一意に特定されるセンテンスをソースコードという。
【００１０】
割付情報は、ソースプログラムの各センテンスに使用されている変数がどの資源(レジスタ)に割り付けられているかを示す情報であり、「;;」を先頭に配することにより、命令列本体とは区別されている。尚、コンパイラコア１により生成されるプログラムは、一次アセンブルプログラムでなくてもよく、コンパイラ装置の内部で解釈可能な言語体系(中間言語体系と呼ばれる)で記述されていてもよい。
【００１１】
＜ソフトウェアパイプライニング部２＞
ソフトウェアパイプライニング部２は、一次アセンブルプログラムに対してソフトウェアパイプライニングを行う。ソフトウェアパイプライニングとは、パイプラインにより並列実行可能な数だけ、イタレーションを構成する命令群(イタレーション命令群)を作成し、ターゲットマシンのパイプラインに適合するよう、これらを加工しておく技術である。ソフトウェアパイプライニング部２による処理手順を簡易化して表した図が図３のフローチャートである。本図を参照しながら、ソフトウェアパイプライニング部２による処理手順の概略を説明する。ソフトウェアパイプライニング部２は、一次アセンブルプログラムからループ処理のボディを構成する命令列を検出し（ステップＳ１）、ボディ命令列をステージ数nだけコピーし、イタレーションを構成する命令群（イタレーション命令群）をn組み得る（ステップＳ２）。図２（ｂ）のプログラムにおいてボディに対応するのは、命令A「ld (r10),r0」〜命令H「blt loop」であり、これらがn個に複製されることになる。n組みのイタレーション命令群が得られたところで、投入間隔だけずらして配置することによりパイプラインイメージを作成する（ステップＳ３）。
【００１２】
投入間隔とは、あるイタレーションの実行が開始してから、次のイタレーションが開始するまでの間隔であり、この値が小さい程、ループが高速化されることになる。投入間隔たる命令数を"2"として、命令A「ld (r10),r0」〜命令H「blt loop」を変換することにより得られたパイプラインイメージの一例を図４（ａ）に示す。パイプラインイメージが得られたところで、パイプラインイメージを、プロログ、エピログ、カーネルに分割する（ステップＳ４）。図４（ｂ）は、図４（ａ）のパイプラインイメージから得られるプロログ、エピログ、カーネルの一例を示す図である。ボディの繰り返し回数は100回であるので、図４（ｃ）に示すようにこのカーネルの部分が98(=100-2)回繰り返されることになる。パイプラインイメージが分割された段階にて、プロログ〜エピログを構成する各命令に、自身が属するイタレーションを示すイタレーション識別子「;ix」を付加し（ステップＳ５）、カーネルを構成する命令に、自身が属するイタレーションを示すステージ識別子「sx;」を付加する（ステップＳ６）。ステージ識別子とは、カーネル内のイタレーションを識別する識別子である。イタレーション識別子は、一番先行しているイタレーションを基準にして、各イタレーションの相対順序を示しているのに対して、ステージ識別子は、一番遅れているイタレーションを基準にして、各イタレーションの相対順序を示している。この点はイタレーション識別子とステージ識別子との差違といえる。図５は、ステップによりイタレーション識別子、ステージ識別子が付加されたパイプラインイメージを示す図である。
【００１３】
続いて異なるイタレーション命令群間の並列実行性及び同一のイタレーション命令群間の並列実行性の何れかが成立する命令同士をグループ化する（ステップＳ７）。パイプラインイメージでは、縦の並びに位置する命令が並列実行可能性を有することになる。図６（ａ）（ｂ）は、図５において並列実行可能性が成立する複数命令を示す図である。図５のパイプラインイメージでは、縦の並びに位置する複数の命令に、図６（ａ）に示すようなイタレーション間の並列実行可能性が存在することになる。並列実行可能性としては、他にコンパイラコア１により一次アセンブルプログラムの生成時に検出されたものがある。これは同一のイタレーション内に成立する並列実行可能性であり、図６（ｂ）にその一例を示す。これら2種類の並列実行可能性のうち何れかが成立するものは並列実行が可能になる。図７（ａ）（ｂ）は、並列実行可能性が成立するもの同士がグループ化されて形成された並列実行単位(図中では、並列単位と略記している。)を示す図である。本図に示すようにプロログは、命令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にて構成される。
【００１４】
カーネルは、命令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から構成される。
【００１５】
これらの命令のうち、命令E「cmp r10,x+400」はループ処理の終了要件を判定するための命令でありプロログ−エピログに配する必要はない。また、カーネルについては、98回繰り返し行わねばならない。これらを踏まえ、ステップＳ８にて、並列実行単位同士を境界で区切ることにより、図８に示す二次アセンブルプログラムを得る（ステップＳ８）。
【００１６】
図８は、ステップＳ８により得られる二次アセンブルプログラムを示す図である。図８において並列実行単位#1〜並列実行単位#8のそれぞれは、境界たるエンドビット"E"で区切られている。各並列実行単位内の命令は、「;l2」「;l3」「;ln」といった行番号と、「;i1」「;i2」「;i3」といったイタレーション識別子及び「;s1」「;s2」「;s3」といったステージ識別子が付加されている。
【００１７】
コンパイラ装置より出力された二次アセンブルプログラムは、アセンブラにより再配置可能なリロケータブルコードに変換される。更にリンカがリロケータブルコードを連結編集することにより、機械語プログラムがえられる。コンパイラ装置により生成された二次アセンブルプログラムは、デバッグという役割をもって利用されるので、これをデバッグリストとよび、機械語プログラムと区別する。コンパイラ装置、アセンブラ、リンカにより生成されるプログラム、即ち、翻訳作業の生成物たる機械語プログラムを、本明細書ではオブジェクトプログラムと称する。また二次アセンブルプログラムのうち、イタレーション識別子、ステージ識別子、行番号を除いた純粋なプログラム部分も、翻訳作業の生成物といえるのでオブジェクトプログラムと称する。
【００１８】
＜プログラム動作環境３、メモリ４、プロセッサ５＞
プログラム動作環境３は、オブジェクトプログラムが実装されるべきターゲットマシンと同じハードウェア環境を実現するものであり、メモリ４及びプロセッサ５を実装するターゲットマシンそのもの(1)、メモリ４及びプロセッサ５を実装するICE(InCircuit Emulator)ボード(2)、メモリ４及びプロセッサ５の機能をソフトウェア的に実現するソフトウェアシミュレータ(3)といった形態がある。
【００１９】
メモリ４は、コンパイラ装置、アセンブラ、リンカにより生成された機械語プログラムを格納する。
プロセッサ５は、オブジェクトプログラムに対する現在のアクセス先アドレスを保持するプログラムカウンタ(i)、現在アドレスから命令をフェッチする命令フェッチ回路(ii)、フェッチされた命令を格納する命令レジスタ(iii)、命令レジスタに格納された命令を解読する命令デコーダ(iv)、演算器(v)、汎用レジスタR0〜R15(vi)、データメモリ(vii)、データやアドレス転送用のバス(viii)を備え、3段のイタレーションを投入間隔2のパイプラインにて並列実行することができる。このプロセッサ５は、ユーザモード、スーパーバイザモードという2つの動作モードを有する。ユーザモードとは、オブジェクトプログラムを実行するモードであり、スーパーバイザモードとは、デバッグ支援装置からの指示に従い、動作を行うものでありデバッグ用のモードといえる。プロセッサは通常、ユーザモードに設定されており、ユーザモードからスーパーバイザモードへの切り換えは、PI命令の解読・実行をトリガとする。「PI命令」とは、スーパーバイザモードへと動作モードを切り換えるための割り込み信号を発生させる命令であり、オブジェクトプログラムの任意の箇所に組み込まれている。PI命令には「パスカウント」の設定が可能である。このパスカウントが設定されている場合、プログラムはパスカウントに示される回数だけ、PI命令が解読されるのを待ち、この回数だけPI命令が解読された時点で、スーパーバイザモードの切り換えのための割り込みを発生する。
【００２０】
＜デバッグ支援装置６＞
デバッグ支援装置６は、プロセッサ５がスーパーバイザモードにある場合に、プログラムに様々な指示を与えるプログラムであり、ソースプログラムと、ソフトウェアパイプライニング部２により生成された二次アセンブルプログラム(デバッグリスト)とを格納して、これらを利用したデバッグ作業を実現する。図１に示すようにデバッグ支援装置６は、ユーザインターフェイス７、ウィンドゥ識別子付加部８、割付情報変換部９、ブレークポイント設定部１０、プログラム実行制御部１１、ワンステップ実行制御部１２、資源操作処理部１３を備える。
【００２１】
＜ユーザインターフェイス７＞
ユーザインターフェイス７は、図９に示す対話画面を介した対話操作の操作環境を操作者に提供する。図９に示す対話画面は、アセンブラリストが配置されるアセンブラウィンドゥと、ソースリストが配置されるソースウィンドゥ#i、ソースウィンドゥ#i+1、ソースウィンドゥ#i+2とからなる。アセンブラリストとは、デバッグリストたる二次アセンブルプログラムの一部分であり、このうちプロセッサ３により実行されている現在アドレスは、ハッチングにより修飾表示される。
【００２２】
ソースリストとは、ソースプログラムを構成する複数センテンスについてのプログラムリストである。ユーザは、ポインティングデバイスを用いることにより、これらプログラムリスト内の任意のセンテンス又は命令を指定することができる。ソースウィンドゥは、並列実行されるイタレーションと同数だけ表示され、それぞれのイタレーションに割り当てられる。図１０は、ソースウィンドゥ#i〜ソースウィンドゥ#i+2と、i,i+1,i+2巡目のイタレーションとの対応を示す図である。
【００２３】
例えばi,i+1,i+2巡目のイタレーションを並列実行する場合、先行するi,i+1,i+2の順に、これらイタレーションを各ソースウィンドゥに割り当てる。つまりソースウィンドゥ#iには、矢印sy1に示すように一番先行するイタレーションであるi巡目のイタレーションが、ソースウィンドゥ#i+1は矢印sy2に示すようにi+1巡目のイタレーションが、ソースウィンドゥ#i+2は、最語尾たるi+2巡目のイタレーションが矢印sy3に示すように割り当てられる。
【００２４】
i巡目イタレーションの実行が済めば、ソースウィンドゥ#i+1,#i+2に割り当てていたi+1,i+2巡目イタレーションを、それぞれ矢印hj1,hj2に示すようにソースウィンドゥ#i、#i+1に移す。i+3巡目のイタレーションが生成されれば、これを矢印hj3に示すようにソースウィンドゥ#i+2に割り当てる。こうした動的な割り当てにより、ユーザインターフェイス７は、複数のイタレーションがパイプライン的に動作している様子を画面上に再現するのである。またソースウィンドゥ#i〜ソースウィンドゥ#i+2のうち、現在アドレスに対応するものは対応行指定マークにて指示され、他のソースウィンドゥとは区別される。現在アドレスに対応するウィンドゥとは以下の意味である。図９において現在アドレス0049に位置する命令A「ld (r10),r0」は、図８において「;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」にハッチングが付されている。
【００２５】
＜ウィンドゥ識別子付加部８＞
ウィンドゥ識別子付加部８は、二次アセンブルプログラムを構成するそれぞれの命令に対してウィンドゥ識別子及び行番号を付す構成要素であり、その実体は図１１のフローチャートである。ウィンドゥ識別子とは、パイプラインにて並列実行可能性される複数イタレーションのそれぞれを示す識別子であり、イタレーションに対するウィンドゥ識別子の割り当ての一例を図１２に示す。一番先行するイタレーションにはウィンドゥ識別子w1が、これに続くイタレーションにはw2が、これに続くイタレーションにはw3がそれぞれ割り当てられていることがわかる。イタレーションの個数をnとすると、各命令には、n個のウィンドゥ識別子が割り当てられる。ウィンドゥ識別子と似たような概念として、先に述べたイタレーション識別子及びステージ識別子があり、これらとの差違は以下の通りである。即ち、イタレーション識別子(ステージ識別子)は、命令が属するイタレーションを示すもののみがその命令に付される。これに対してウィンドゥ識別子は、自身が属するイタレーションを始め、並列実行される全てのイタレーションについてのウィンドゥ識別子が命令に付加される。このため、並列実行されるイタレーションの数が"3"であれば、イタレーションに属する命令には、それぞれ3つのウィンドゥ識別子が付加される。
【００２６】
図１１のフローチャートにおいて、プロログ、カーネル、エピログに属する全ての命令について、ステップＳ１３〜ステップＳ２０の処理を繰り返すループ構造になっている（ステップＳ１１、ステップＳ１２）。ここで一回の繰り返しにおける処理対象を命令iとすると、命令iは、ステップＳ１３にてウィンドゥ識別子w1〜wnが付加された後、ステップＳ１４にて、ループ処理の先頭であるか否かが判定される。その後、命令iが先頭命令である場合はステップＳ１５の処理が施され、命令iが先頭以外である場合は、ステップＳ１６〜ステップＳ２１の処理が施される。ステップＳ１５は、ループ処理の先頭を指定した行番号を、命令iについてのウィンドゥ識別子w1〜wnに付加するという処理を行うステップであり、この場合、命令に付加された複数のウィンドゥ識別子には、共通の行番号が付加されることになる。ステップＳ１６〜ステップＳ２１は、「;ln」に設定された行番号を補間するものである。つまりステップＳ１６にてウィンドゥ識別子w1〜wnのうち、イタレーション識別子(ステージ識別子)に対応するものに行番号「;lx(x=1,2,3,4・・・・)」を付し、それ以外のものに「;ln」を付す。
【００２７】
図１３は、図８のプログラムに対してウィンドゥ識別子及び行番号を付すことにより得られた二次アセンブルプログラムを示す図である。本図において四角枠で囲んだ行番号とウィンドゥ識別子との組みには、有効な行番号「;l2」「;l3」「;l4」が付加されている。一方、四角枠で囲んでいない行番号とウィンドゥ識別子との組みには、無効な行番号「;ln」が付加されている。
【００２８】
その後、命令に付加されたウィンドゥ識別子w1〜wnのそれぞれに対して、ステップＳ１９〜ステップＳ２１の処理を施す（ステップＳ１７、ステップＳ１８）。ステップＳ１９〜ステップＳ２１の繰り返し時において処理対象たるウィンドゥ識別子を「wx」とすると、行番号が「;ln」であるウィンドゥ識別子wxに対しては、命令jに付加された行番号「;ly」が付加される（ステップＳ２１）。ここで命令jとは、命令iに先行する命令であって、ウィンドゥ識別子wxに有効な行番号が付加された命令であり、ステップＳ２０にて特定される。ステップＳ２０及びステップＳ２１におけるウィンドゥ識別子割り当ての過程について図１４を参照しながら説明する。ここでは、アドレス0045に位置する命令A「ld (r10),r0」が命令iであると仮定する。
【００２９】
図１４は、ステップＳ１６の過程を経た段階のプログラムを示す図である。本図においてアドレス0042に位置する命令A「ld (r10),r0」には、ウィンドゥ識別子w3に対してl2が付加されている。一方w1,w2にはlnが付加されている。従って、命令A「ld (r10),r0」については、これらウィンドゥ識別子w1,w2がステップＳ２０、ステップＳ２１の処理が施されることになる。w1については、アドレス0049に位置するカーネル内の命令A「ld (r10),r0」が命令yとして検出される。w2については、アドレス0051に位置するカーネル内の命令A「ld (r10),r0」が命令yとして検出される。そして、これらの命令yに付加された行番号l2が矢印jy1,jy2に示すように行番号「ly」として検出されるのである。同様の付加処理を、行番号が";ln"と設定された全てのウィンドゥ識別子について行えば、図１５の二次アセンブルプログラムがえられることになる。尚、図１５のプログラムでは、イタレーション識別子及びステージ識別子を示していないが、これは単に図示していないだけであって、これらも二次アセンブルプログラムに付加されていることは留意されたい。何故なら、これらイタレーション識別子及びステージ識別子は、各命令がどのイタレーションに対応するかを特定するというウィンドゥ識別子とは異なる役割があり、これがないと、各命令がどのステージやイタレーションに対応するのかが特定できないからである。尚、命令iに後続する命令であって、ウィンドゥ識別子wxに有効な行番号が付加された命令を、ステップＳ２０において命令jとして特定しても良い。
【００３０】
＜割付情報変換部９＞
割付情報変換部９は、デバッグ作業のために割付情報の加工を行うプログラムであり、その実体は図１６のフロ−チャ−トである。このフローチャートによると、割付情報変換部９はステップＳ２７からステップＳ２９までの処理を、各割付情報のそれぞれについて繰り返すというループ構造になっている（ステップＳ２５、ステップＳ２６）。ステップＳ２７にて、割付情報変換部９は開始点及び終了点を示す行番号の組みを用いて変数iの生存区間を特定するという一般の生存区間解析を行う。その後、開始点及び終了点を示す行番号の組みを命令のアドレスに変換し、開始点及び終了点を示すアドレスの組みにより変数iについての生存区間情報を生成して割付情報に付加する（ステップＳ２８）。更に生存区間の範囲内にある命令に付されたウィンドゥ識別子を、変数iについての生存区間情報に付加する（ステップＳ２９）。以上の処理が各割付情報のそれぞれについて繰り返される。図２（ａ）の一例でいうと、変数aについてはl2〜l3が生存区間、変数bについてはl3〜l4、変数cについてはl4〜l5がそれぞれ生存区間となる。これらの行番号をアドレスに変換し、更にウィンドゥ識別子を付加することにより、図１７のように生存区間情報が付加された割付情報が得られる。1つのボディから複数のイタレーション命令群が生成され、1つの行番号の組みが、複数のアドレスの組みに変換されているため、図１７では変数a,bについての生存区間情報が複数になっている点には、注意されたい。
【００３１】
＜プログラム実行制御部１１＞
プログラム実行制御部１１は、オブジェクトプログラムをプロセッサに実行させる構成要素であり、その実体は、図１８のフロ−チャ−トを実現するプログラムである。図１８のフロ−チャ−トにおいてステップＳ４１は、現在アドレスにブレークポイントが設定されているか否かにより、ステップＳ４２及びステップＳ４３をスキップするか、或はこれらを実行するかを切り換える条件付き分岐ステップである。ステップＳ４２〜ステップＳ４３は、現在アドレスにブレークポイントされている場合に必要な処理であり、ステップＳ４２においてデバッグ支援装置内部に退避されている命令を現在アドレスに書き戻し、ステップＳ４３において現在アドレスをプロセッサのプログラムカウンタに設定して、オブジェクトプログラムをRUNする。ステップＳ４１における条件分岐を経た後、事象待ちステップＳ４４に至る。ステップＳ４４にて成立を待っている事象とは、プロセッサにおけるモード切り換えのための割込発生であり、この事象が成立すれば、プログラムカウンタの現在アドレスを取り出して、オブジェクトプログラムにおいてその現在アドレスに位置する命令を特定し（ステップＳ４５）、その後、特定された命令にウィンドゥ識別子が付加されているか否かに応じて（ステップＳ４６）、ステップＳ４７〜ステップＳ４９の処理、ステップＳ５０〜ステップＳ５４、ステップＳ４０の処理を択一的に実行する。特定された命令にウィンドゥ識別子が付加されている場合、ソースウィンドゥを表示し（ステップＳ４７）、特定された命令に付された行番号lxに対応するセンテンスと、行番号lxから前後2,3行に位置するセンテンスとをウィンドゥwxに表示して（ステップＳ４８）、行番号lxに対応するセンテンスを修飾する（ステップＳ４９）。
【００３２】
一方、特定された命令にウィンドゥ識別子が付されている場合、ウィンドゥ識別子の数だけソースウィンドゥを表示し、各ウィンドゥ識別子を割り当てた後、全てのソースウィンドゥについて、ステップＳ５３及びステップＳ５４を繰り返す。ここで一回の繰り返しにあたって処理対象たるウィンドゥ識別子をwxとする。このウィンドゥ識別子wxに付された行番号lxに対応するセンテンスは、行番号lxから前後2,3行に位置するセンテンスとともにウィンドゥwxに表示される（ステップＳ５３）。その後、行番号lxに対応するセンテンスを修飾する（ステップＳ５４）という処理が全てのウィンドゥ識別子について繰り返されるのである。この繰り返しが終われば、特定された命令に付加されたイタレーション識別子(ステージ識別子)に対応するソースウィンドゥにおいて、そのイタレーション識別子(ステージ識別子)に付加された行番号に対応するセンテンスを対応行指定マークにより指定して（ステップＳ４０）処理を終える。
【００３３】
図１９は、ステップＳ５１〜ステップＳ５４での処理により表示されるソースウィンドゥの一例を示す図である。本図は、アドレス0049がブレークポイントであることを前提にしている。このアドレスに存在する命令A「ld (r10),r0」は、w1からw3までのウィンドゥ識別子が付されているので、3つのソースウィンドゥが表示され、これらウィンドゥ識別子に付加された番号に相当するセンテンスl2,l4,l5がハッチングにて修飾されている。複数のセンテンスが互いに異なるイタレーションに対応していることを知らしめるため、複数のセンテンスは、互いに異なる表示態様で表示することは望ましい。
【００３４】
＜ブレークポイント設定部１０＞
ブレークポイント設定部１０は、プログラム動作環境３におけるメモリ４内のオブジェクトプログラムに対してブレークポイントを設定する構成要素であり、その実体は図２０のフロ−チャ−トを実現するプログラムである。図２０のフロ−チャ−トは、ウィンドゥ指定を操作者から受け付け、このウィンドゥ指定に応じてステップＳ３１〜ステップＳ３２、ステップＳ３６及びステップＳ３３〜ステップＳ３６を択一的に実行するものである。アセンブラウィンドゥが指定された際、ステップＳ３１に移行する。
【００３５】
ステップＳ３１は、アセンブラウィンドゥ内に表示された命令が指定されるのを待つという事象待ちステップであり、命令指定がなされると、ステップＳ３２及びステップＳ３８が順次実行されることになる。ステップＳ３２では、指定された命令がメモリから取り出されて、アドレスと対応づけてデバッグ支援装置内に退避される。その後ステップＳ３８において、PI命令を用いて特定された命令を上書きする。これらは既存のデバッグ支援装置にて行われる設定処理と何等変わりはない。一方ソースウィンドゥが指定された際、ステップＳ３３をトリガとして、ステップＳ３４〜ステップＳ３８を実行する。ステップＳ３３に移行する。ステップＳ３３は、選択された1つのソースウィンドゥにおけるセンテンスの指定が操作者によりなされるのを待つという事象待ちステップであり、センテンス指定がなされると、ステップＳ３４〜ステップＳ３６が順次実行されることになる。つまり、選択されてるソースウィンドゥと、指定されたセンテンスとの組みに対応する命令xを、ウィンドゥ識別子と行番号との組みに基づき特定し（ステップＳ３４）、特定された命令xと、アドレスとを対応づけてデバッグ支援装置内に退避する（ステップＳ３５）。その後、ブレークポイントを設定すべきアドレスにおける命令に付加されたウィンドゥ識別子と、現在アドレスにおける命令に付加されたウィンドゥ識別子とからステージ差を算出し（ステップＳ３６）、ステージ差をパスカウントとしたPI命令を生成して（ステップＳ３７）、PI命令を用いて特定された命令を上書きする（ステップＳ３８）。これらステップＳ３３〜ステップＳ３８は、ソースウィンドゥ及びセンテンスに対応する命令を、ウィンドゥ識別子と行番号との組みから導くという点に特徴がある。以降ブレークポイント設定部１０の動作例を、図２１、図２２を参照しながら説明する。図２１ではソースウィンドウ#1,#i+1,#i+2がそれぞれ、1,2,3巡目のイタレーションにそれぞれ割り当てられている。現在アドレスはアドレス0050であるものとする。図８においてこのアドレス0050に付されたステージ識別子は「;s1」であり、このアドレスが原始的にカーネルにおける１巡目のステージに対応する。
【００３６】
ここでユーザは、ソースウィンドウ#i+2の行番号;l5にブレークポイントを設定しようとしている。ソースウィンドウ#i+2は3巡目のイタレーションに対応し、これに対応するステージ識別子はs3である。これに行番号l5;が付されているのは、アドレス0054である。
一方現在アドレス0050は、１巡目のイタレーションに対応しているので、ステージ番号の差である値"2"のパスカウントを付加して、アドレス0054をPI命令に書き換える（ステップＳ３８）。その後機械語プログラムの実行を開始させると、アドレス0054の命令は２回ブレークを見逃され、３回目実行に、PI命令が発動して停止する。図２２は、その停止時における表示状態である。図２１でソースウィンドウ#i+2が表していた3巡目のイタレーションは、図２２ではソースウィンドウ#iに移り、新たに現在実行中の4巡目、5巡目のイタレーションがそれぞれソースウィンドウ#i+1、ソースウィンドウ#i+2に割り当てられている。本図において各ソースウィンドウは、それぞれ行番号l5;,l5;,l4;に停止していることがわかる。
【００３７】
＜ワンステップ実行制御部１２＞
ワンステップ実行制御部１２は、オブジェクトプログラムに対してブレークポイントを設定する構成要素であり、その実体は、図２３のフロ−チャ−トの処理手順を実現するプログラムである。図２３のフロ−チャ−トにおいてステップＳ５５は、操作者によるウィンドゥ指定に応じてステップＳ５６〜ステップＳ５７及びステップＳ５８〜ステップＳ６０を択一的に実行する条件付き分岐ステップである。操作者によりアセンブラウィンドゥが指定された場合には、現在アドレスの次のアドレスにある命令を、アドレスと対応づけてデバッグ支援装置内に退避し（ステップＳ５６）、次のアドレスにPI命令を書き込む（ステップＳ５７）。ソースウィンドゥが指定された場合には、現在アドレスに対応するセンテンスを特定し（ステップＳ５８）、特定されたセンテンスの次の行に位置するセンテンスを特定して（ステップＳ５９）、選択されたウィンドゥと、特定されたセンテンスとの組みに対応する命令を特定した後（ステップＳ６０）、特定された命令にPI命令を書き込んで（ステップＳ６１）、現在アドレスをPI命令に設定してから、プロセッサをRUNする（ステップＳ６２）。以降、プログラム実行制御部１１と同様、図１６のステップＳ４４〜ステップＳ５４、ステップＳ４０の処理を行う(簡略化のため、これらのステップは図２１から省略している。)。図２４は、アセンブラウィンドゥに対してワンステップ実行を行った場合の一例であり、図２５は、ソースウィンドゥに対してワンステップ実行を行った場合の一例を示す図である。図２４では、矢印cy1に示すように現在アドレス0049がであることを想定しており、この現在アドレス0049に対して、アセンブラウィンドゥのワンステップ実行を行えば、矢印cy2に示すように現在アドレスが0050になった時点で割り込みが発生する。一方、現在アドレスが同じ0049でありながら、ソースウィンドゥにおけるワンステップ実行では、矢印ry1に示すように現在アドレス0049に対応する行番号;l4であるので、矢印ry2に示すように次の行番号;l5に達した時点で割り込みが発生する。この行番号;l5は、矢印ry3に示すようにアドレス0054に対応するので、アドレス0054に到達した時点で割り込みが発生していることが理解できる。
【００３８】
＜資源操作処理部１３＞
資源操作処理部１３は、プログラム動作環境３におけるハードウェア資源の操作処理を行う構成要素である。ハードウェア資源の操作には、資源への値の書き込み操作と、資源に保持されている値の参照操作の2種類がある。ハードウェア資源には、プロセッサ５内のレジスタR0〜R15と、ターゲットメモリ４に格納されているものの2つの種類がある。本実施形態における資源操作処理部１３が特徴的なのは、以上の資源に対する操作を、変数を介して行う点である。変数を介してなされる資源の参照処理は、図２６のフローチャートの処理手順により実現される。以降本フローチャートを参照して、資源操作処理部１３による資源参照処理について説明する。図２６のフロ−チャ−トにおいてステップＳ７１及びステップＳ７２は、事象待ちステップである。ステップＳ７１で成立を待つ事象とは、操作者によるソースウィンドゥの選択であり、ステップＳ７２で成立を待つ事象とは、選択されたソースウィンドゥ内のセンテンスにて使用されている変数xの指定である。直列的な関係にあるステップＳ７１及びステップＳ７２にて、事象成立が確認されれば、ステップＳ７３を経て、ステップＳ７４を実行する。ステップＳ７４は、変数xの割付情報における有効範囲にアドレスyが属しているか否かに応じて、ステップＳ７５及びステップＳ７６〜ステップＳ７７を択一的に実行する条件付き分岐命令である。ここでアドレスyとは、指定された変数xを使用するセンテンスに対応する命令yのアドレスであり、ステップＳ７３にて特定される。変数xの割付情報における有効範囲にアドレスyが属していない場合、ステップＳ７５においてInvalid表示を行い、属している場合、ステップＳ７６において割付情報に示されている変数xの割り付け資源xを特定し、ステップＳ７７において資源xの保持値を変数xの値として表示する。
【００３９】
図２７は、図１９の状態で、ソースウィンドゥの変数bが操作者により指定された状態を示す図である。図１９の状態では、現在アドレスが0049であるので、このアドレス0049が変数の生存区間に属するか否かがステップＳ７４で判定される。枠wk1は、図１９のプログラムに対する割付情報の一例を示す。この割付情報において、アドレス0049は、ウィンドゥ識別子w2が付された生存区間に属しているので、このアドレス0049において変数bは有効であり、この変数bに割り付けられた資源r1の値を変数の値として表示する（ステップＳ７７）。一方、このアドレス0049の命令A「ld (r10),r0」には「l4;」の行番号が付加されているので、ソースウィンドゥ#i+1における「;l4」のセンテンスが修飾されることになる。
【００４０】
以上のように本実施形態によれば、ソフトウェアパイプライニングが行われた際にそのステージ数分のウィンドウを表示させ、それぞれの停止位置や変数値を表示させることによって、ユーザが混乱することなく各イタレーションの実行状況を把握することが可能になる。
上記実施形態に基づいて説明してきたが、現状において最善の効果が期待できるシステム例として提示したに過ぎない。本発明はその要旨を逸脱しない範囲で変更実施することができる。代表的な変更実施の形態として、以下（Ａ）（Ｂ）（Ｃ）・・・・のものがある。
【００４１】
（Ａ）本実施形態では、ウィンドゥ識別子の付加を行うウィンドゥ識別子付加部８と、割付情報の変換を行う割付情報変換部９とはデバッグ支援装置内に設けたが、コンパイラ装置内に設けてよいことはいうまでもない。
（Ｂ）ブレークポイントにより二次アセンブルプログラムの実行が停止した際、ソースウィンドゥを複数表示させ、それぞれのソースウィンドゥ内で、ブレークポイントたる命令に対応するセンテンスを修飾したが、以下の（Ｂ−１）、（Ｂ−２）のように変更しても良い。
【００４２】
（Ｂ−１）ブレークポイントにて命令の実行が停止した場合、ブレークポイントたる命令に付加された複数ウィンドゥ識別子についての行番号を参照し、それら複数行番号に対応する複数センテンスを1つのソースウィンドゥ内で修飾表示しても良い。図２８は、この変更表示を行った場合の表示例であり、アドレスの命令に付加された複数のウィンドゥ識別子に対応する行番号に対する修飾表示が、1つのソースウィンドゥ内で行われていることがわかる。
【００４３】
（Ｂ−２）ブレークポイントにて命令の実行が停止した場合、ブレークポイントたる命令に付加された複数ウィンドゥ識別子についての行番号を参照し、それら複数行番号に対応する複数センテンスから代表的なものを1つ選んで1つのソースウィンドゥ内で修飾表示しても良い。この選び方としては、一番先行するイタレーションを示す行番号、あるいは、一番後続するイタレーションを示す行番号を選ぶといった方法がある。図２９を一例にして具体的を説明する。アドレスの命令には、w1,w2,w3というウィンドゥ識別子が付加されており、これらウィンドゥ識別子に更に行番号「;l2」「;l4」「;l5」が付されているものとする。これらのうち最も先行しているのは行番号「;l5」なので、この行番号のセンテンスを表示するのである。
【００４４】
（Ｃ）本実施形態では、一次アセンブルプログラムに対してソフトウェアパイプライニングが行われた場合を一例にして説明したが、これに限定されるものではない。ループ処理のボディを複数イタレーション命令群に翻訳するという処理を経る最適化手法ならどのようなものも本発明を適用することができる。そのような最適化手法にループアンローリングといったものがある。
【００４５】
ループアンローリングは、ループ内のボディに含まれるセンテンスを複数センテンスに書き換えて、ループ処理の実行効率を向上させる最適化手法である。例えば、配列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つのセンテンスは、それぞれが別個のイタレーション命令群に翻訳されるので、それらイタレーション命令群にステージ識別子を付しておく。こうすることにより、ループアンローリングにより得られた二次アセンブルプログラムに対しても、デバッグ支援装置は本実施形態と同様のデバッグ作業を行うことができる。
【００４６】
（Ｄ）本実施形態では、プログラム動作環境３及びデバッグ支援装置６はそれぞれ別装置であるものとして説明したが、これらが一体構成されていてもよい。また、デバッグ支援装置６を構成するユーザインターフェイス７〜資源操作処理部１３は、プロセッサ５により実行されるプログラムであってもよい。更に、デバッグ支援装置６を構成するユーザインターフェイス７〜資源操作処理部１３は、プロセッサ５とは異なるプロセッサにより実行されるプログラムであってもよい。
【００４７】
（Ｅ）本実施形態では、コンパイラ装置及びデバッグ支援装置６は、それぞれ別装置であるものとして説明したが、これらが一体構成されていてもよい。また、コンパイラ装置を構成するコンパイラコア１〜ソフトウェアパイプライニング部２は、プロセッサ５により実行されるプログラムであってもよい。加えて、プログラム動作環境３、デバッグ支援装置６、コンパイラ装置を一体構成にしてもよい。
【００４８】
（Ｆ）ソースウィンドゥ#i、#i+1、#i+2のそれぞれにイタレーションを動的に割り当てる場合において、各ソースウィンドゥが何巡目のイタレーションに対応するかを表示してもよい。
（Ｇ）図３、図１１、図１６、図１８、図２０、図２３、図２６のフローチャートを参照して説明した手順等を実行形式プログラムにより実現し、これを記録媒体に記録したりネットワーク上で伝送させることにより流通・販売の対象にしても良い。このような記録媒体には、ICカードや光ディスク、フレキシブルディスク等がある。これらに記録された機械語プログラムは汎用コンピュータにインストールされることにより利用に供される。この汎用コンピュータは、インストールした実行形式プログラムを逐次実行して、本実施形態に示した最適化装置の機能を実現するのである。
【００４９】
【発明の効果】
以上説明したように、本発明に係るデバッグ支援装置は、ループ処理を含むソースプログラムを翻訳する第１過程と、当該ループ処理についての複数イタレーションが並列化されるように変換を施す第２過程とを経て得られるオブジェクトプログラムについてのデバッグ支援を行うにあたって、オブジェクトプログラムを構成する各命令に、複数イタレーションのうち何れかを一意に示す識別子と、そのイタレーションに属するソースコードを特定する行番号とを付加してなるデバッグリストを記憶する記憶手段と、操作者からの操作に従って、記憶されているデバッグリストにおける1つの命令を特定する特定手段と、特定された命令に付加された識別子は、ループ処理のどのイタレーションを示しているかを判定する判定手段と、判定されたイタレーションの前後のイタレーションを示す識別子と、同じ命令に付加されている行番号をデバッグリストから探索する探索手段と、特定された命令に付加された行番号に対応するソースコードと、探索された行番号に対応するソースコードとを表示する第１表示手段とを備えるものにより達成される。
【００５０】
並列実行される命令が、どのソースコードに対応するかをプログラマは、頭の中で容易に想像することができ、ループ処理を動作させたパイプラインにて動作させた場合にも混乱しない。故に、ループ処理にて誤動作が生じたとしても、その誤動作の原因を短期間に究明することができる。
ここで、前記特定手段により特定される命令は、オブジェクトプログラムの動作を止めるべきブレークポイントであってもよい(3)。
【００５１】
ブレークポイントに設定された命令が、ユーザが閲覧を望む変数の有効範囲内にある場合、前記デバッグ支援装置は更に、第１表示手段により表示されたソースコードと共に、ユーザが閲覧を望む変数の保持値を表示する第２表示手段を備えていてもよい(5)。ソースプログラムにおけるソースコードのそれぞれの時点において、デバッグ作業対象たる変数がどのように更新されるかをユーザは逐次観察することができる。
【００５２】
第１表示手段により表示されたソースコードに対する変数指定を受け付ける受付手段を備え、第２表示手段は、指定された変数の保持値を表示してもよい(6)。第１表示手段により表示されたソースコードから、変数を指定することができるので、ユーザは効率良く各変数の値を参照することができる。
ここで、ループ処理を含むソースプログラムを翻訳し、当該ループ処理についての複数イタレーションが並列化されるように変換を施すコンパイラ装置については、ソースプログラムにおけるループ処理内のボディを翻訳することにより命令群を得る翻訳手段と、命令群を複製し、複数の命令群を得る複製手段と、複数の命令群を構成するそれぞれの命令であって、並列実行されるものを1つのグループにグループ化し、各グループを境界で区切ってオブジェクトプログラムを得るグループ化手段と、オブジェクトプログラムを構成する各命令に、複数イタレーションのうち何れかを一意に示す識別子と、そのイタレーションに属するソースコードを特定する行番号とを付加して、デバッグリストを作成する作成手段とを備えるのが望ましい。ループ処理に適合したオブジェクトプログラムを生成しつつも、このオブジェクトプログラムに識別子、行番号を付加してデバックリストを得るので、デバッグ支援装置がその機能を発揮させることができる。
【図面の簡単な説明】
【図１】プログラム開発システムの内部を示す図である。
【図２】（ａ）ソースプログラムの一例を示す図である。
（ｂ）一次アセンブルプログラムの一例を示す図である。
【図３】ソフトウェアパイプライニング部２の処理手順を示すフローチャートである。
【図４】（ａ）命令A「ld (r10),r0」〜命令H「blt loop」を変換することにより得られたパイプラインイメージの一例を示す図である。
（ｂ）図４（ａ）のパイプラインイメージから得られるプロログ、エピログ、カーネルの一例を示す図である。
（ｃ）ステージ、カーネル、エピログが実行される様子を示す図である。
【図５】ステップによりイタレーション識別子、ステージ識別子が付加されたパイプラインイメージを示す図である。
【図６】（ａ）（ｂ）図５において並列実行可能性が成立する複数命令を示す図である。
【図７】（ａ）（ｂ）並列実行可能性が成立するもの同士がグループ化されて形成された並列実行単位を示す図である。
【図８】  ステップＳ８により得られる二次アセンブルプログラムを示す図である。
【図９】  ユーザインターフェイス７により提供される対話画面を示す図である。
【図１０】  ソースウィンドゥ#i〜ソースウィンドゥ#i+2と、i,i+1,i+2巡目のイタレーションとの対応を示す図である。
【図１１】  ウィンドゥ識別子付加部８の処理手順を示すフローチャートである。
【図１２】  イタレーションに対するウィンドゥ識別子の割り当ての一例を示す図である。
【図１３】  図８のプログラムに対してウィンドゥ識別子及び行番号を付すことにより得られた二次アセンブルプログラムを示す図である。
【図１４】  ステップＳ１６の過程を経た段階のプログラムを示す図である  。
【図１５】  ウィンドゥ識別子が付加された二次アセンブルプログラムの一例を示す図である。
【図１６】  割付情報変換部９の処理手順を示すフローチャートである。
【図１７】  割付情報と、生存区間情報との一例を示す図である。
【図１８】  プログラム実行制御部１１の処理手順を示すフローチャートである。
【図１９】  二次アセンブルプログラムに対する割付情報の一例を示す図である。
【図２０】  ブレークポイント設定部１０の処理手順を示すフローチャートである。
【図２１】  ブレークポイント設定部１０の動作例を示す図である。
【図２２】  ブレークポイントによるオブジェクトプログラムの停止時における表示状態の一例を示す図である。
【図２３】  ワンステップ実行制御部１２の処理手順を示すフローチャートである。
【図２４】  アセンブラウィンドゥに対してワンステップ実行を行った場合の一例である。
【図２５】  ソースウィンドゥに対してワンステップ実行を行った場合の一例を示す図である。
【図２６】  資源操作処理部１３の処理手順を示すフローチャートである。
【図２７】  図１９の状態で、ソースウィンドゥの変数bが操作者により指定された状態を示す図である。
【図２８】  変更例（Ｂ−１）に対応する表示例である。
【図２９】  変更例（Ｂ−２）に対応する表示例である。
【符号の説明】
１    コンパイラ装置コア
２    ソフトウェアパイプライニング部
３    プログラム動作環境
４    メモリ
５    プロセッサ
６    デバッグ支援装置
７    ユーザインターフェイス
８    ウィンドゥ識別子付加部
９    割付情報変換部
１０    ブレークポイント設定部
１１    プログラム実行制御部
１２    ワンステップ実行制御部
１３    資源操作処理部
【図１】
0004272371.tif 000002
【図２】
0004272371.tif 000003
【図３】
0004272371.tif 000004
【図４】
0004272371.tif 000005
【図５】
0004272371.tif 000006
【図６】
0004272371.tif 000007
【図７】
0004272371.tif 000008
【図８】
0004272371.tif 000009
【図９】
0004272371.tif 000010
【図１０】
0004272371.tif 000011
【図１１】
0004272371.tif 000012
【図１２】
0004272371.tif 000013
【図１３】
0004272371.tif 000014
【図１４】
0004272371.tif 000015
【図１５】
0004272371.tif 000016
【図１６】
0004272371.tif 000017
【図１７】
0004272371.tif 000018
【図１８】
0004272371.tif 000019
【図１９】
0004272371.tif 000020
【図２０】
0004272371.tif 000021
【図２１】
0004272371.tif 000022
【図２２】
0004272371.tif 000023
【図２３】
0004272371.tif 000024
【図２４】
0004272371.tif 000025
【図２５】
0004272371.tif 000026
【図２６】
0004272371.tif 000027
【図２７】
0004272371.tif 000028
【図２８】
0004272371.tif 000029
【図２９】
0004272371.tif 000030