(58)【調査した分野】(Int.Cl.,DB名)
前記第1プログラムから前記第1マッピングテーブルを生成し、前記第2プログラムから前記第2マッピングテーブルを生成するマッピングテーブル生成部をさらに含む請求項1に記載の混合モードプログラムのソースコードエラー位置検出装置。
前記第1マッピングテーブル及び前記第2マッピングテーブルは、命令語マッピング情報、レジスタマッピング情報またはメモリマッピング情報のうち少なくとも1つを含む請求項1又は2に記載の混合モードプログラムのソースコードエラー位置検出装置。
前記第1マッピングテーブルと前記第2マッピングテーブルは、命令語マッピング情報、レジスタマッピング情報及びメモリマッピング情報のうち少なくとも1つを含む請求項11に記載の混合モードプログラムのソースコード有効化装置。
前記ローレベルデータ抽出部は、前記第1プログラムと前記第2プログラムとのそれぞれからシミュレーション中の所定の時間区間の間に、ローレベルデータを抽出する請求項11又は12に記載の混合モードプログラムのソースコード有効化装置。
【背景技術】
【0002】
通常、再構成可能アーキテクチャー(reconfigurable architecture)とは、所定の作業を行うためのコンピューティング装置のハードウェア的構成をハードウェアレベルでそれぞれの作業に最適化されるように変更することができるアーキテクチャーを意味する。
【0003】
所定の作業をハードウェア的にのみ処理すると、ハードウェアの機能は固定されるので、作業内容に若干の変更が加えられた場合、これを効率的に処理しにくい。ほとんどのハードウェアは、固定された方式で動作するように構成されるためである。また、所定の作業をソフトウェア的にのみ処理すると、その作業の特性に合わせてソフトウェアを変更して処理することが可能であるが、ハードウェア的処理に比べて速度が遅い。ソフトウェアを多様な作業に適応させても、ハードウェアが固定された場合には、最適の性能が得られないためである。
【0004】
再構成可能アーキテクチャーは、このようなハードウェア/ソフトウェアの長所をいずれも満足させることができる。より詳細には、再構成可能ハードウェアアーキテクチャーは、カスタマイズドハードウェアによる最適の性能を保証しながらも、カスタマイズドソフトウェアの柔軟性を提供する。特に、同じ作業が反復的に行われ、作業を最適化することによって、全般的な性能を意味があるように改善しうるデジタル信号処理分野では、このような再構成可能アーキテクチャーが多くの注目を浴びている。
【0005】
再構成可能アーキテクチャーの種類は、さまざまであるが、そのうち、コースグレインアレイ(Coarse−Grained Array)が代表的である。コースグレインアレイは、複数個のプロセッシングエレメント(PE:Processing Element)からなる。そして、プロセッシングユニット間の連結状態が調節されることによって、特定の動作や作業に最適化されることが可能である。
【0006】
一方、最近、コースグレインアレイの特定のプロセッシングユニットをVLIW(Very Long Instruction Word)マシンとして活用する再構成可能アーキテクチャーが登場した。このような再構成可能アーキテクチャーは、2つの実行モードを有する。通常、CGAモード及びVLIWモードを有する再構成可能アーキテクチャーは、CGAモードでは同じ演算が反復されるループを処理し、VLIWモードでは、ループ演算以外に一般的な演算を処理する。CGAモードは、ループ演算をさらに効率的に処理できるためである。
【0007】
ところが、CGA(Coarse Grained Array)基盤の再構成可能プロセッサは、非常に複雑な構造を有する。そのようなプロセッサは、多数の機能ユニット、グローバルレジスタファイル、ローカルレジスタファイルを含む。
【0008】
もし、CGAでデータ従属性(data dependency)が存在する場合、コンパイラでは、これを分析して処理するのに難点が多い。データ従属性を見つけることが重要な理由は、もし、データ従属性を見つけることができない場合、データ従属性を満足することができない不適切なデータや衝突を起こすデータが生成されて、エラーが発生するためである。例えば、コンパイラが、このデータ従属性を解決することができない場合、ユーザ、すなわち、プログラマーは、CGAにマッピングされたバイナリファイルのエラーを検出することさえできない。したがって、プログラムの遂行時に意図していない誤った結果が発生する恐れがある。再構成可能ハードウェアアーキテクチャーが、データ処理を実行しようとすれば、ランタイムエラーを避けなければならない。
【発明を実施するための形態】
【0017】
<実施の形態の概要>
本発明の一側面による混合モードプログラムのソースコードエラー位置検出装置は、第1プログラムに対してシミュレーションを行い、第2プログラムに対してシミュレーションを行うシミュレーション部と、前記第1プログラムの前記シミュレーションを通じて前記第1プログラムに関する第1ローレベルデータを、前記第2プログラムの前記シミュレーションを通じて前記第2プログラムに関する第2ローレベルデータを抽出するローレベルデータ抽出部と、前記第1プログラムから生成された第1マッピングテーブルに前記第1ローレベルデータを対応させて、検証対象マッピングテーブルを生成し、前記第2プログラムから生成された第2マッピングテーブルに前記第2ローレベルデータを対応させて、基準マッピングテーブルを生成する比較データ生成部と、前記検証対象マッピングテーブルと前記基準マッピングテーブルとを比較して、データが一致しないレコードを検出し、前記レコードに関するプログラム位置情報を得るエラー位置検出部と、を含む。
【0018】
この際、ソースコードを第1モードでコンパイルすることにより前記第1プログラムを、前記ソースコードを第2モードでコンパイルすることにより前記第2プログラムを生成するコンパイラ部をさらに含みうる。
【0019】
また、前記第1プログラムから前記第1マッピングテーブルを生成し、前記第2プログラムから前記第2マッピングテーブルを生成するマッピングテーブル生成部をさらに含みうる。
【0020】
また、前記第1マッピングテーブル及び前記第2マッピングテーブルは、命令語マッピング情報、レジスタマッピング情報またはメモリマッピング情報のうち少なくとも1つを含みうる。
【0021】
また、前記ローレベルデータ抽出部は、シミュレーションが行われる時間区間のうちの一部に対してのみローレベルデータを抽出することができる。
【0022】
また、前記ローレベルデータ抽出部は、レジスタデータ、メモリデータ、プログラムカウンター、イテレーションカウントのうち少なくとも1つを含みうる。
【0023】
さらに、前記エラー位置検出部は、プログラムカウンターに基づいて、ソースコードのうち、エラーを誘発する位置を検出することができる。
【0024】
本発明の他の側面による混合モードプログラムのソースコードエラー位置検出方法は、検証プログラムをシミュレーションする段階と、基準プログラムをシミュレーションする段階と、前記検証対象プログラムの前記シミュレーションを通じて、前記検証対象プログラムのローレベルデータを抽出する段階と、前記基準プログラムの前記シミュレーションを通じて、前記基準プログラムのローレベルデータを抽出する段階と、前記検証対象プログラムのローレベルデータを、前記第1マッピングテーブルに対応させて、前記ソースコードと前記検証対象プログラムとの関係を表わす検証対象マッピングテーブルを生成する段階と、前記基準プログラムのローレベルデータを、前記第2マッピングテーブルに対応させて、前記ソースコードと前記基準プログラムとの関係を表わす基準マッピングテーブルを生成する段階と、前記検証対象マッピングテーブルと前記基準マッピングテーブルとを比較して、データが一致しないレコードを検出し、前記レコードに関するプログラム位置情報を得る段階と、を含む。
【0025】
この際、ソースコードを第1モードでコンパイルすることにより前記検証対象プログラムを生成し、前記ソースコードを第2モードでコンパイルすることにより前記基準プログラムを生成する段階をさらに含みうる。
【0026】
また、前記ソースコードと前記検証対象プログラムとの関係を表わす前記第1マッピングテーブル及び前記ソースコードと前記基準プログラムとの関係を表わす前記第2マッピングテーブルを生成する段階をさらに含みうる。
【0027】
本発明のさらに他の側面による混合モードプログラムのソースコードエラー位置検出方法は、検証データテーブルを生成する段階と、基準データテーブルを生成する段階と、前記検証データテーブルと前記基準データテーブルとを比較して、データが一致しないレコードがあるか否かを判断する段階と、を含む。
【0028】
この際、データが一致しないレコードがある場合、前記レコードに関するプログラムカウンター情報及びFUインデックス情報を用いてソースコードでの対応する位置を検出する段階をさらに含みうる。
【0029】
また、前記検証データテーブルを生成する段階は、第1モードを用いてコンパイルされた検証対象プログラムに関するマッピングテーブルに、前記検証対象プログラムのローレベルデータを対応させることで行われる。
【0030】
また、前記基準データテーブルを生成する段階は、前記第1モードと異なる第2モードとを用いてコンパイルされた基準プログラムに関するマッピングテーブルに、前記基準プログラムのローレベルデータを対応させることで行われる。
【0031】
さらに、前記検証対象プログラムのローレベルデータを、前記検証対象プログラムのシミュレーション中に抽出する段階をさらに含みうる。
【0032】
また、前記基準プログラムのローレベルデータを、前記基準プログラムのシミュレーション中に抽出する段階をさらに含みうる。
【0033】
本発明のさらに他の側面による混合モードプログラムのソースコード有効化装置は、第1プログラムと第2プログラムとをシミュレーションするシミュレーション部と、前記第1プログラムの前記シミュレーションを通じて第1ローレベルデータを抽出し、前記第2プログラムの前記シミュレーションを通じて第2ローレベルデータを抽出するローレベルデータ抽出部と、前記第1ローレベルデータを前記第1プログラムから生成された第1マッピングテーブルにマッピングして、検証対象マッピングテーブルを生成し、前記第2ローレベルデータを前記第2プログラムから生成された第2マッピングテーブルにマッピングして、基準マッピングテーブルを生成する比較データ生成部と、前記検証対象マッピングテーブルを前記基準マッピングテーブルと比較して、前記ソースコードが有効であるか否かに関する案内を提供するエラー位置検出部と、を含む。
【0034】
この際、前記第1マッピングテーブルと前記第2マッピングテーブルは、命令語マッピング情報、レジスタマッピング情報及びメモリマッピング情報のうち少なくとも1つを含みうる。
【0035】
また、前記ローレベルデータ抽出部は、前記第1プログラムと前記第2プログラムとのそれぞれからシミュレーション中の所定の時間区間の間に、ローレベルデータを抽出することができる。
【0036】
また、前記ローレベルデータは、レジスタデータ、メモリデータ、プログラムカウンター(PC)及びイテレーションカウンターのうち少なくとも1つを含みうる。
【0037】
<実施の形態の詳細>
以下、添付した図面を参照して、実施のための具体的な例を詳しく説明する。
【0038】
図1は、再構成可能プロセッサを説明する図である。
図1を参照すると、再構成可能プロセッサ100は、再構成可能アレイ110及びメモリ120を含む。
【0039】
以下で、イテレーション(iteration、反復)とは、ループが数回実行されるとき、それぞれのループの実行を意味する。例えば、ループが3回実行される場合、ループの最初の実行を最初のイテレーションと言い、ループの二番目の実行を二番目のイテレーションと言い、ループの三番目の実行を三番目のイテレーションと言う。同じイテレーションに属する命令が、互いに異なるプロセッシングエレメントにマッピングされ、各プロセッシングエレメントが同時に動作することによって、命令が並列的に処理されうる。これにより、再構成可能プロセッサ100の演算速度が向上する。命令語を複数のプロセッシングエレメントにマッピングして同時に複数の作業を実行させる多様な技法が存在する。例えば、マルチタスキングとマルチスレッディングが、そのような技法の例である。複数のプロセッシングエレメントを使い、プロセスが分割されている場合には、並列処理を行うことによって、他の作業が完了する前に所定の作業を開始できるので、作業を処理する全般的な所要時間を節減することができるので、並列処理は望ましい。
【0040】
ある実施形態で、再構成可能プロセッサ100は、CGAモード、VLIWモードなどで駆動されるように設定されうる。例えば、再構成可能プロセッサ100は、CGAモードでループ演算を処理し、VLIWモードでは、一般的な演算またはループ演算を処理することができる。但し、VLIWモードでループ演算ができるが、CGAモードでループ演算を処理することよりも効率が落ちる。効率を極大化するために、一実施形態で、ループ演算は、CGAモードで処理してループ演算の効率性を高め、CGAモードで処理することができないその他の演算は、VLIWモードで処理させうる。その結果、1つのプログラムが実行されるとき、再構成可能プロセッサ100は、CGAモード及びVLIWモードを交互に駆動することによって、プログラムの性能による最適の結果が得られる。
【0041】
再構成可能アレイ110は、レジスタファイル111及び多数のプロセッシングエレメント(PE)112を含む。実施形態で、再構成可能アレイ110は、最適の演算を行うようにハードウェア的構成を変更することが可能である。例えば、再構成可能アレイ110は、演算の種類によって多数のプロセッシングエレメント間の連結状態を変更することができる。もし、プロセッシングエレメントが、他の方式で連結されれば、再構成可能アレイ110がデータを処理する方法が変更されることによって、与えられた種類の演算にさらに優れているように適応されうる。
【0042】
レジスタファイル111は、プロセッシングエレメント112間のデータ伝達のために使われるか、命令実行に必要な各種のデータを保存する。レジスタファイル111は、プロセッシングエレメント112が作業を処理するときに使うデータを判読し、記録することができるワーキングメモリとして使われる。例えば、それぞれのプロセッシングエレメント112は、レジスタファイル111に接続して命令実行に使われるデータを読み取るか、書き込むことが可能である。但し、あらゆるプロセッシングエレメント112が、互いに連結されるものではないために、特定のプロセッシングエレメントの場合には、レジスタファイル111に接続するために、他のプロセッシングエレメントを経由することもできる。
【0043】
プロセッシングエレメント112は、割り当てられた命令を実行することができる。プロセッシングエレメント112の連結状態及び動作順序は、処理しようとする作業によって変更されうる。前述したように、与えられたアーキテクチャー内でプロセッシングエレメントの連結と順序とを変更することによって、プロセッシングエレメントが特定のタスクを処理するために再構成されうる。
【0044】
メモリ120は、プロセッシングエレメント112間の連結状態に関する情報、命令のように、プロセッシングに必要な情報及びプロセッシングの結果情報を保存することができる。命令は、再構成可能アレイ110に提供される命令であってもよい。例えば、メモリ120は、再構成可能アレイ110によって処理される前に、処理するデータを保存するか、再構成可能アレイ110によって生成された処理結果を保存することができる。また他の例を挙げれば、メモリ120には、再構成可能プロセッサ100の駆動に必要な情報、再構成可能アレイの連結状態情報、再構成可能アレイの動作方法についての情報などを保存することができる。
【0045】
図2は、混合モードプログラムを生成するマルチモードプロセッサの一例を示すブロック図である。
【0046】
マルチモードプロセッサ20は、2つ以上のモードを有しており、各モードで2つ以上のモードで動作するように設計されたハードウェアは、互いに異なる方式で動作する。例えば、マルチモードプロセッサ20は、第1モードブロック220及び第2モードブロック210(例えば、CGAモード、VLIWモードなど)を有しており、各モードで、ハードウェアは、互いに異なる方式で動作する。マルチモードプロセッサは、第1モードブロック220と第2モードブロック210との間で特定の時刻に、または特定のイベントが発生したときに、モードを切り替えることができる。モード別にプロセッシングエレメント(PE)などの資源を分離することもでき、一部または全体を共有することもできる。
【0047】
ところが、各モードでハードウェア構造と動作方式が異なるので、コンパイラでのスケジューリング及びマッピング結果も変わる。したがって、コンパイルされたコードが、互いに異なるモードで適切に実行されるためには、コンパイルされたコードに関するスケジューリング及びマッピングを調和させることによって、複数のモードが相手の資源の使用を尊重できるように資源を共有することを保証する必要がある。
【0048】
図2で言う混合モードプログラムは、シーケンシャルプログラムである。すなわち、コンパイル方法が変更されるか、実行状況が変わっても、同じ結果を作り出すプログラムを意味する。
【0049】
プログラムがシーケンシャルであるためには、プログラムをコンパイルするとき、同じ結果を生成する2つ以上の混合モードプログラムを生成できなければならない。したがって、プログラムの互いに異なるモードで実行される部分に対する制約を課すことによって、プログラムの互いに異なる部分が相手の動作に干渉せず、“シーケンシャル”プログラムの属性を失わないようにしなければならない。
【0050】
図3は、
図2のマルチモードプロセッサでコンパイルされた2種の混合モードプログラムを例示した図である。
【0051】
混合モードプログラム30は、時刻(t=0)から時刻(t=t
1)までは第1モードで、時刻(t=t
1)から時刻(t=t
2)までは第2モードで、時刻(t=t
2)から時刻(t=t
3)までは再び第1モードで、ソースコードをコンパイルして生成したプログラムである。それぞれの時間区間に生成されたプログラム部分を、それぞれ識別符号300、310、320で区別する。
【0052】
混合モードプログラム31は、ソースコード全体を第1モードでコンパイルして生成したプログラムである。混合モードプログラム31は、第1モードと第2モードとの遂行比率が1:0になる場合であると言える。
【0053】
第1モードがVLIWモードであり、第2モードがCGAモードである場合を想定する。もし、CGAモードでデータ従属性が存在する場合、コンパイラでは、これを分析して処理するのに難点が多い。もし、コンパイラが、このデータ従属性を解決することができない場合、ユーザ、すなわち、プログラマーは、CGAマッピングされたバイナリファイルのエラーを検出することさえできない。したがって、プログラムの遂行時に意図していない誤った結果が発生する恐れがある。このようなランタイムエラーは、プログラムの適切な動作に有害であり、プログラムのシーケンシャル動作を妨害するので、防止されなければならない。
【0054】
しかし、混合モードプログラム30がCGAモードでマッピングされるとき、誤ったバイナリデータが生成されうる。誤ったバイナリデータが生成されたことを突き止めるために、実施形態では、バイナリデータが正しいことを保証するための基準データを生成する。例えば、次のようなアプローチを使うことができる。バイナリデータの有効性を判断するために、混合モードプログラム30のソースコードをエラーの発生可能性が非常に少ないモードで、例えば、VLIWモードでコンパイルした混合モードプログラム31を生成する。
【0055】
次いで、混合モードプログラム31のバイナリデータをCGAモードでマッピングされた混合モードプログラム30のバイナリデータと比較する。混合モードプログラム31の方がエラーの発生可能性が低いので、検証の対象となる混合モードプログラム30と判断の基準となる混合モードプログラム31とのバイナリ(ローレベル)データが一致するならば、混合モードプログラム30にエラーがないと判断することができる。一方、もし、エラーが存在するならば、比較を通じてエラーの根源を判断しうる。
【0056】
図4は、本発明の一側面による混合モードプログラムのソースコードエラー位置検出方法を例示したフローチャートである。
図4で例示したように、混合モードプログラムのソースコードエラー位置検出方法は、コンパイル段階(ステップS100)と、シミュレーション及びローレベルデータ抽出段階(ステップS110)と、比較データ生成段階(ステップS120)及びエラー位置検出段階(ステップS130)と、を含んでなる。
【0057】
コンパイル段階(ステップS100)では、第1モードを用いてソースコード(すなわち、ハイレベルデータ)をコンパイルして、検証対象プログラムを生成し、第2モードを用いて同じソースコードをコンパイルして、基準プログラムを生成する。この際、ハイレベルデータとローレベルデータとの間の関係を表わすマッピングテーブルを生成する段階(ステップS101:図示せず)がさらに行われる。
【0058】
シミュレーション及びローレベルデータ抽出段階(ステップS110)では、検証対象プログラム及び基準プログラムをそれぞれシミュレーションしながら、必要なローレベルデータを抽出する。この際、ある実施形態では、シミュレーションのあらゆる区間ではなく、特定の時間区間のみを指定して、ローレベルデータを抽出することもできる。ローレベルデータは、既定の時間区間から抽出されうる。検証対象プログラムで検証を要するモードは、特定の時間区間でのみ検証が必要であり、その他の時間区間では、コードの有効性が問題にならないためである。
【0059】
比較データ生成段階(ステップS120)では、検証対象プログラムをシミュレーションしながら抽出されたローレベルデータと基準プログラムをシミュレーションしながら抽出されたローレベルデータとを互いに比較できるように適切にデータ変換を行う。互いに異なるモードから抽出されるローレベルデータは、一般的に適切にデータ変換を行わない場合、比較をするのが適当ではないために、一部の実施形態では、このような段階が必要である。これは、段階(ステップS110)から生成されたマッピングテーブルにローレベルデータを対応させる過程を通じて行われる。
【0060】
エラー位置検出段階(ステップS130)では、検証対象プログラムのローレベルデータがマッピングされたマッピングテーブル(すなわち、“検証対象マッピングテーブル”)と基準プログラムのローレベルデータがマッピングされたマッピングテーブル(すなわち、“基準マッピングテーブル”)とを比較して、2つのテーブルで対応するデータが一致しないレコードがあるか否かを判断する。データが一致しないレコードがある場合、そのレコードに関するプログラム位置情報を得る。ローレベルデータがマッピングされたマッピングテーブルを利用すれば、特定のローレベルデータに対応するハイレベルデータ、すなわち、ソースコードの位置を探索することができるためである。例えば、前述したマッピング技法を用いてソースコードのどの部分が異常なローレベルデータの生成と関連したかを判断することができる。ソースコードの当該部分を識別することによって、ユーザにデバッギングを要するソースコードの問題領域を案内することができる。
【0061】
図5は、本発明の一側面による混合モードプログラムのソースコードエラー位置検出装置を例示したブロック図である。
図5で例示したように、混合モードプログラムのソースコードエラー位置検出装置50は、コンパイラ部500と、マッピングテーブル生成部510と、シミュレーション部520と、ローレベルデータ抽出部530と、比較データ生成部540及びエラー位置検出部550と、を含んでなる。
【0062】
コンパイラ部500は、ソースコード(すなわち、ハイレベルデータ)をコンパイルして、シーケンシャル混合モードプログラムを生成する。
【0063】
マッピングテーブル生成部510は、コンパイラ部が混合モードプログラムを生成するときに、その混合モードプログラムに指定されたモードに対するマッピングテーブルを生成する。
【0064】
マッピングテーブルは、ハイレベルデータがコンパイラによって如何に変換されたかを表わすテーブルである。もし、マッピングテーブルの生成が難しい場合、コンパイラ部500は、最適化のレベルを低めることができる。最適化作業としては、例えば、削除、値変更、順序変更などの作業がある。
【0065】
また、マッピングテーブルは、命令語マッピング情報、レジスタマッピング情報またはメモリマッピング情報などを含む。また、マッピング情報が有効なタイムスロット情報を含むこともある。この情報をマッピングテーブルに記録することによって、ソースコードとローレベルデータとの間のデータ依存性を追跡し、潜在的なデータ依存性に関する問題があるか否かを判断することができる。
【0066】
シミュレーション部520は、生成された検証対象プログラム及び基準プログラムに対してそれぞれシミュレーションを行う。検証対象プログラムと基準プログラムとをシミュレーションすることによって、プログラムを実行するときに生成されるローレベルデータをキャプチャーして、プログラムの効果が何なのかを確かめることができる。
【0067】
ローレベルデータ抽出部530は、シミュレーション部520がプログラムのシミュレーションを行うとき、必要なローレベルデータを抽出する。
【0068】
この際、シミュレーションのあらゆる区間ではなく、特定の時間区間のみを指定してローレベルデータを抽出することもできる。前述したように、一部の実施形態では、特定の時間区間に対してのみシミュレーションを行って、プロセスを分析することができる。
【0069】
抽出されたローレベルデータは、検証対象プログラムと基準プログラムとがシミュレーションされるハードウェアの動作を特徴付ける多様なストレージ及びオペレーションについての情報を有しうる。シミュレーション手続きの一部として、検証対象プログラムと基準プログラムは、データを処理し、データ処理の一部として、情報がレジスタファイル111とメモリ120とに伝送されるか、レジスタファイル111とメモリ120とから伝送することができる。抽出されたローレベルデータは、この情報の流れをキャプチャーする。例えば、抽出されたローレベルデータは、レジスタデータやメモリデータのような情報を含みうる。また、抽出されたローレベルデータは、メモリアクセス履歴、例えば、メモリのアドレス、データのような情報を含みうる。また、抽出されたローレベルデータは、プログラム内での特定のデータの位置を表わす情報、例えば、プログラムカウンター(PC)、イテレーションカウントのような情報を含みうる。このデータを追跡することによって、如何なる情報が結果に影響を及ぼすかを評価することができる。
【0070】
比較データ生成部540は、検証対象プログラムをシミュレーションしながら抽出されたローレベルデータと基準プログラムをシミュレーションしながら抽出されたローレベルデータとを互いに比較できるように適切にデータ変換を行う。例えば、検証対象プログラムと基準プログラムとに対してマッピングテーブルを互いに比較することができる。マッピングテーブルを比較するために、比較データ生成部は、ローレベルデータをマッピングテーブルにコンパイルすることによって、マッピングテーブルが比較手続きに使われるようにする。
【0071】
データ変換手続きは、マッピングテーブル生成部510から生成されたマッピングテーブルにローレベルデータ抽出部530が抽出したローレベルデータを対応させる過程を通じて行われる。
【0072】
エラー位置検出部550は、検証対象マッピングテーブルと基準マッピングテーブルとを比較して、2つのテーブルでデータが一致しないレコードがあるか否かを判断する。データが一致しないレコードは、データ依存性問題などによってディバッグを必要とする問題があることを表わす。
【0073】
データが一致しないレコードがある場合、そのレコードに関するプログラム位置情報を得る。
【0074】
ローレベルデータが対応したマッピングテーブルを利用すれば、特定のローレベルデータに対応するハイレベルデータ、すなわち、ローレベルコードで問題を誘発するソースコードの位置を探索することができるためである。例えば、抽出されたローレベルデータのプログラムカウンター情報を基準マッピングテーブルにマッピングして、検証対象マッピングテーブルのPC値と基準マッピングテーブルのPC値との間で不一致が見付かった場合、ソースコードで、メモリ内の不一致が見付かった特定位置にアクセスするコードの位置を発見できる。
【0075】
図6は、混合モードプログラムのソースコードエラー位置検出装置で行われるエラー位置検出手続きの一例を示す図である。
図6の実施形態で、マルチモードプロセッサは、VLIWモードとCGAモードとの2種のモードを含むとする。
【0076】
また、検証対象プログラムは、VLIWモードとCGAモードとの混合モードプログラムであり、基準プログラムは、VLIWモード単独でコンパイルされたプログラムであるとする。
【0077】
本実施形態で、ソースコードエラー位置検出装置60、61は、物理的に1つの装置で構成される。しかし、他の実施形態では、追加的な構成要素を含むか、装置60と装置61とにそれぞれ含まれる互いに異なる構成要素になりうる。VLIW+CGA混合モードで行われる場合は、ソースコードエラー位置検出装置60に、VLIW単独モードで行われる場合は、ソースコードエラー位置検出装置61に区分した。また、VLIW+CGA混合モードプログラムが検証対象プログラムになり、VLIW単独モードプログラムが基準プログラムになるとする。コンパイル手続きは、VLIWモードで生成される基準プログラムが正しい基準であり、VLIW+CGA混合モード検証対象プログラムがシーケンシャルプログラムであることを保証する。
【0078】
コンパイラ部600、601は、それぞれソースコードをコンパイルしてプログラムを生成する。
【0079】
この際、もし、ソースコードにループ区間が存在すれば、ループ区間は、最適化前処理過程を経た後、CGA構造にマッピングされる。したがって、CGAマッピングコードの出力は、最適化前処理によってソースコードにあるループの出力と異なりうる。したがって、ホストコンパイル及びシミュレーションの実行により、CGAマッピングコードの基準出力が得られない。一方、
図6の実施形態では、CGAにマッピングされるコードをVLIWでマッピングして基準値を得る。したがって、VLIW+CGA混合モードのシミュレーションによる出力データとVLIW単独モードのシミュレーションによる出力データとを比較することによって、検証が可能である。データ依存性が侵害されていないならば、VLIW+CGA混合モードシミュレーションは、VLIWモードシミュレーションの結果と一致しなければならないためである。
【0080】
VLIW+CGAコンパイル600で、CGAモードでマッピングされたソースコードの出力データは、次にVLIWモードでマッピングされる。このコードは、コンパイル過程でレジスタ割り当て段階以前までは、検証対象プログラムと基準プログラムとで同様にコンパイルされる。したがって、CGA出力データは、同じ仮想レジスタに保存される。この値を比較するために、マッピングテーブル生成部610、611は、出力データに対するレジスタ割り当てマッピングテーブルを生成する。
【0081】
メモリ位置に保存される変数の比較は、それぞれのプログラムのフローごとにメモリ書き込みアクセスに対してアドレス別に最終保存されるデータを比較することによってなされる。
【0082】
一方、CGAマッピングとは異なって、VLIWマッピングでは、仮想レジスタのスピル(spill)によるメモリ書き込みアクセスが発生する恐れがある。このような場合は、比較対象から除外されなければならないので、VLIW単独モードのマッピングテーブルには、プログラムカウンター値(PC)とファンクションユニット(FU)インデックス情報とを通じて当該位置で行われる命令語がスピルによるものであるか、メモリに位置した変数をアクセスするものであるかを区分する情報が追加されうる。
【0083】
RTLシミュレーター620、621がシミュレーションを行う間に、ローレベルデータ抽出部630、631は、あらゆるメモリ書き込みアクセスに対するアドレスと値とを抽出する。共に、VLIW単独モードで、ローレベルデータ抽出部631は、メモリアクセスごとにPC及びFUインデックス情報を共に抽出する。シミュレーションが終了すれば、コンパイラ部600、601から受けた物理レジスタの最終値を抽出する。
【0084】
比較データ生成部640、641は、同じアドレスに関するメモリ書き込みアクセスデータが複数個ある場合、最終メモリ書き込みアクセスに関する値のみを記録する。VLIW単独モードの場合、比較データ生成部641は、PCとFUインデックス情報を抽出するが、スピルによるメモリ書き込みアクセスの値は除外する。
【0085】
一方、エラー位置検出部(図示せず)は、CGA出力に該当する仮想レジスタに保存された最終値を比較すると共に、CGA実行区間で発生したメモリ書き込みアクセスの最終値をVLIWにマッピングした場合の値と比較することによって、検証対象プログラムのエラー有無を判断する。
【0086】
一方、同じアドレスに対するデータの読み取りアクセスと書き込みアクセスとの“順序”は、スケジューリングが変わっても変更されない。したがって、各アドレスで値の順序を比較することによって、メモリ従属性違反を見つけることができる。
【0087】
一方、VLIW単独プログラムのフローでは、マッピングテーブルにスピルによるメモリ書き込みアクセスであるかを判断する情報が追加される。また、メモリ従属性違反の位置を発見した場合、PCとFUインデックス情報に対応するソースコード位置(例えば、ファイル名とソースコードのライン番号)とを知らせることができる。これを通じて、ユーザは、ソースコードのうち、エラーが発生したラインが分かる。この情報が、ユーザに提供されるならば、ユーザは、これを用いてディバッグ手続きを行い、問題を発生させたソースコード内のエラーまたはバグを直すことができる。さらに、ループインデックスがマッピングされたレジスタ情報やメモリロケーション情報もさらに含まれうる。
【0088】
RTLシミュレーター620、621は、メモリ読み取り/書き込みアクセスに対するアドレス及び値を抽出する。VLIW単独モードの場合、PC及び実行されるFUインデックス情報及びループインデックスがマッピングされたレジスタ値またはメモリロケーション値が共に保存される。
【0089】
図7は、マッピングテーブルの一例を示す図である。
図7で示すように、マッピングテーブルは、ハイレベルデータとローレベルデータとを関連付ける情報を保存する。例えば、マッピングテーブルは、特定時刻における特定のプログラムカウンター(PC=m、m+1、m+2など)に対するハイレベルデータ(例えば、ソースコードファイル名、行番号、変数名など)と、ローレベルデータ(レジスタアドレス値またはメモリアドレス値)とを対応付けていることが分かる。
【0090】
図8は、抽出されたローレベルデータの一例を示す図である。
図8で示すように、特定のサイクル(cycle=n、n+1、n+2など)について、レジスタアドレスまたはメモリアドレスごとに保存された値及びPC値が対応していることが分かる。
【0091】
図9は、本発明の他の側面による混合モードプログラムのソースコードエラー位置検出方法の一例を示すフローチャートである。
図9に例示した混合モードプログラムのソースコードエラー位置検出方法は、検証データテーブルを生成する段階(ステップS200)と、基準データテーブルを生成する段階(ステップS210)と、検証データテーブルと基準データテーブルとを比較する段階(ステップS220)及びエラー位置検出段階(ステップS230)と、を含んでなる。
【0092】
検証データテーブルを生成する段階(ステップS200)では、第1モードを用いてコンパイルされた検証対象プログラムに関するマッピングテーブルにローレベルデータを対応させて、検証データテーブルを生成する。マッピングテーブルの例示は、
図7ないし
図8に示した。
【0093】
マッピングテーブルは、コンパイル過程から生成され、ローレベルデータは、コンパイルされた検証対象プログラムのシミュレーション過程から抽出されうる。ローレベル情報は、例えば、レジスタ及び/またはメモリアドレス情報及びレジスタまたはメモリに関する特定の時刻の値を含む。実施形態によれば、如何なるハイレベル命令が、ソースコード内でローレベルの変更を誘導するかを判断することができる。
【0094】
基準データテーブルを生成する段階(ステップS210)では、第2モードを用いてコンパイルされた検証対象プログラムに関するマッピングテーブルにローレベルデータを対応させて、検証データテーブルを生成する。基準データテーブルは、検証データテーブルが生成されるものと同様の方式で生成される。
【0095】
段階(ステップS220)では、検証データテーブルと基準データテーブルとを比較して、2つのテーブルでデータが一致しないレコードがあるか否かを判断する。
【0096】
もし、データが一致しないレコードがある場合、段階(ステップS230)では、そのレコードに関するプログラムカウンター情報及びFUインデックス情報を用いてプログラム位置情報を得る。
【0097】
したがって、ユーザは、エラーが発生した場合、そのエラーを誘発したソースコードが如何なるラインにあるかを知らせる情報を提供されうる。このような情報を用いてユーザは、ソースコードを検査するか、ディバッグツールを用いてエラーを修正することができる。
【0098】
一方、本発明の実施形態は、コンピュータで読み取り可能な記録媒体にコンピュータで読み取り可能なコードとして具現することが可能である。コンピュータで読み取り可能な記録媒体は、コンピュータシステムによって読み取れるデータが保存されるあらゆる種類の記録装置を含む。
【0099】
コンピュータで読み取り可能な記録媒体の例としては、ROM、RAM、CD−ROM、磁気テープ、フロッピー(登録商標)ディスク、光データ保存装置などがあり、また、搬送波(例えば、インターネットを介した伝送)の形態で具現するものを含む。また、コンピュータで読み取り可能な記録媒体は、ネットワークで連結されたコンピュータシステムに分散されて、分散方式でコンピュータで読み取り可能なコードとして保存されて実行可能である。そして、本発明を具現するための機能的なプログラム、コード及びコードセグメントは、本発明が属する技術分野のプログラマーによって容易に推論されうる。
【0100】
さらに、前述した実施形態は、本発明を例示的に説明するためのものであって、本発明の権利範囲が、特定の実施形態に限定されるものではない。