(57)【要約】【課題】  ソフトウェアパイプライン化されたプログラムのハードウェアデバッギング装置及び方法を提供する。【解決手段】  本発明の一実施形態によるハードウェアデバッギング装置及び方法は、特定の実行ブロックをガーディングし、ソフトウェアパイプライン化されたプログラムの遂行を再開することによって、ソフトウェアパイプライン化されたプログラムのハードウェアデバッギング時にカレンシーの問題を解決し、プロセッサのデバッギング機能を向上させることができる。【選択図】      図１
2013152716.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアパイプライン化された（ｓｏｆｔｗａｒｅ  ｐｉｐｅｌｉｎｅｄ）プログラムのハードウェアデバッギング装置であって、
トリガー（ｔｒｉｇｇｅｒ）が発生すれば、反復カウント及び実行ブロック差情報に基づいて、トリガー反復カウント値を設定するプレディケート設定部と、
プロセッサ再遂行時、前記トリガー反復カウント値に基づいて、所定の実行ブロックに対してプレディケートを予め生成させるプレディケート早期生成部と、
を含むハードウェアデバッギング装置。
【請求項２】
前記反復カウントは、
トリガーが発生した時点のプロセッサの機能ユニット（ｆｕｎｃｔｉｏｎａｌ  ｕｎｉｔ）別にソフトウェアパイプライン化されたプログラムを実行する演算の反復回数である請求項１に記載のハードウェアデバッギング装置。
【請求項３】
前記実行ブロック差は、
トリガーが発生した実行ブロックとプレディケートが早期に生成されねばならない実行ブロックとの差である、
請求項１に記載のハードウェアデバッギング装置。
【請求項４】
前記反復カウント及び前記実行ブロック差情報は、
前記ソフトウェアパイプライン化されたプログラムのコンパイル段階で生成される、
請求項１に記載のハードウェアデバッギング装置。
【請求項５】
現在の反復カウントが、前記設定されたトリガー反復カウントより大きいか、同じであれば、前記所定の実行ブロックは、現在の反復または次の反復に含まれた実行ブロックである、
請求項１に記載のハードウェアデバッギング装置。
【請求項６】
前記装置は、さらに、
前記トリガー反復カウント値が設定されれば、前記トリガーの発生時に中止されたプロセッサを再遂行させるプロセッサ再遂行部、
を含む請求項１乃至５に記載のハードウェアデバッギング装置。
【請求項７】
前記プロセッサ再遂行部は、
前記トリガーが発生する前に、前記プロセッサのレジスタファイルまたはターゲットメモリの値をバックアップする、
請求項６に記載のハードウェアデバッギング装置。
【請求項８】
前記プロセッサ再遂行部は、
前記トリガー反復カウント値が設定されれば、前記バックアップされたレジスタファイルまたはターゲットメモリの値を復元した後、前記中止されたプロセッサを再遂行させる、
請求項６または７に記載のハードウェアデバッギング装置。
【請求項９】
ソフトウェアパイプライン化されたプログラムのハードウェアデバッギング方法であって、
トリガーが発生すれば、反復カウント及びソフトウェアパイプライン化されたプログラムの実行ブロック差情報に基づいて、トリガー反復カウント値を設定する段階と、
プロセッサ再遂行時、前記トリガー反復カウント値に基づいて、所定の実行ブロックに対してプレディケートを予め生成させる段階と、
を含むハードウェアデバッギング方法。
【請求項１０】
前記反復カウントは、
トリガーが発生した時点のプロセッサの機能ユニット別にソフトウェアパイプライン化されたプログラムを実行する演算の反復回数である請求項９に記載のハードウェアデバッギング方法。
【請求項１１】
前記実行ブロック差は、
トリガーが発生した実行ブロックとプレディケートが早期に生成されねばならない実行ブロックとの差である、
請求項９に記載のハードウェアデバッギング方法。
【請求項１２】
前記反復カウント及び前記実行ブロック差情報は、
前記プログラムのコンパイル段階で生成される、
請求項９に記載のハードウェアデバッギング方法。
【請求項１３】
前記所定の実行ブロックは、
プロセッサの再遂行時、現在の反復カウントが前記トリガー反復カウントより大きいか、同じである実行ブロックである、
請求項９に記載のハードウェアデバッギング方法。
【請求項１４】
前記方法は、さらに、
前記トリガー反復カウント値が設定されれば、前記トリガーの発生時に中止されたプロセッサを再遂行させる段階、
を含む請求項９乃至１３に記載のハードウェアデバッギング方法。
【請求項１５】
前記プロセッサを再遂行させる段階は、
前記トリガーが発生する前に、前記プロセッサのレジスタファイルまたはターゲットメモリの値をバックアップする段階を含む、
請求項１４に記載のハードウェアデバッギング方法。
【請求項１６】
前記プロセッサを再遂行させる段階は、
前記トリガー反復カウント値が設定されれば、前記バックアップされたレジスタファイルまたはターゲットメモリの値を復元する段階をさらに含む、
請求項１４または１５に記載のハードウェアデバッギング方法。
【請求項１７】
プロセッサ（ｐｒｏｃｅｓｓｏｒ）が、ソフトウェアパイプライン化されたループを行う間にインタラプトをハンドリングする方法において、
前記ソフトウェアパイプライン化されたループに対する複数の反復の実行を重畳することによって、その複数の反復を行う段階と、
前記ソフトウェアパイプライン化されたループに対する反復の実行ブロックが行われる間にインタラプトを受信すれば、そのインタラプトが発生した反復の遂行を中断し、そのインタラプトが発生したループの反復が行われる前に行われた反復の１つ以上の残りの実行ブロックを行う段階と、
を含む方法。
【請求項１８】
前記方法は、さらに、
前記インタラプトが発生すれば、前記ソフトウェアパイプライン化されたループを行う前に、前記プロセッサのレジスタファイルの内容を復旧する段階と、
初めから前記ソフトウェアパイプライン化されたループの実行を再び始める段階と、
を含む請求項１７に記載の方法。
【請求項１９】
前記方法は、さらに、
前記インタラプトが発生したループの反復と同じ段階で行われ、前記以後に重畳された反復の実行ブロックの遂行を防止する段階、
を含む請求項１７に記載の方法。
【請求項２０】
前記以後に重畳された反復の実行ブロックは、その実行ブロックの遂行結果がプロセッサのレジスタファイルに書き込まれることが防止されるように、プレディケートを通じてガーディングされる、
請求項１９に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアパイプライン化されたプログラムのハードウェアデバッギング装置及び方法に関する。
【背景技術】
【０００２】
プロセッサでソフトウェアパイプライン（ｓｏｆｔｗａｒｅ  ｐｉｐｅｌｉｎｅ）方法は、実行するソフトウェアを段階別に分けて、パイプラインの形態で行う方法であって、処理性能を大きく高めうる。ソフトウェアパイプライン方法は、文章を互いに独立した反復（ｉｔｅｒａｔｉｏｎ）内に位置させることによって、ループの処理を最適化することができる。ソフトウェアパイプライン方法は、外観上、順次的な命令語が並列して実行されるように依存性を除去する。
【０００３】
しかし、ソフトウェアの実行順序を重畳することによって、プロセッサのデバッギングを難しくする。このようにソフトウェアパイプライン化されたプログラムのハードウェアデバッギング時に中止点（ｂｒｅａｋｐｏｉｎｔ）または監視点（ｗａｔｃｈ  ｐｏｉｎｔ）などのトリガー信号が発生すれば、まだ実行されてはならないコードセクションが既に実行されるか、その逆の状況が発生する。これにより、変数（ｖａｒｉａｂｌｅ）値がソースプログラムの同等な地点と一致していないカレンシー（ｃｕｒｒｅｎｃｙ）の問題が発生する。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明は、ソフトウェアパイプライン化されたプログラムのハードウェアデバッギング装置及び方法を提供することである。
【課題を解決するための手段】
【０００５】
本発明の一態様によれば、ソフトウェアパイプライン化されたプログラムのハードウェアデバッギング装置は、トリガー（ｔｒｉｇｇｅｒ）が発生すれば、反復カウント及び実行ブロック差情報に基づいて、トリガー反復カウント値を設定するプレディケート設定部と、プロセッサ再遂行時、トリガー反復カウント値に基づいて、所定の実行ブロックに対してプレディケートを予め生成させるプレディケート早期生成部と、を含む。
【０００６】
この際、反復カウントは、トリガーが発生した時点のプロセッサの機能ユニット（ｆｕｎｃｔｉｏｎａｌ  ｕｎｉｔ）別にソフトウェアパイプライン化されたプログラムを実行する演算の反復回数であり得る。
【０００７】
また、実行ブロックの差は、トリガーが発生した実行ブロックとプレディケートが早期に生成されねばならない実行ブロックとの差であり得る。
【０００８】
また、反復カウント及び実行ブロック差情報は、プログラムのコンパイル段階で生成されることであり得る。
【０００９】
また、現在の反復カウントが設定されたトリガー反復カウント値より大きいか、同じであれば、所定の実行ブロックは、現在の反復または次の反復に含まれた実行ブロックであり得る。
【００１０】
本発明の追加的な態様によれば、ハードウェアデバッギング装置は、トリガー反復カウント値が設定されれば、トリガーの発生時に中止されたプロセッサを再遂行させるプロセッサ再遂行部をさらに含みうる。
【００１１】
この際、プロセッサ再遂行部は、トリガーが発生する前に、プロセッサのレジスタファイルまたはターゲットメモリの値をバックアップすることができる。
【００１２】
また、プロセッサ再遂行部は、トリガー反復カウント値が設定されれば、バックアップされたレジスタファイルまたはターゲットメモリの値を復元した後、中止されたプロセッサを再遂行させることができる。
【００１３】
本発明の一態様によれば、ソフトウェアパイプライン化された（ｓｏｆｔｗａｒｅ  ｐｉｐｅｌｉｎｅｄ）プログラムのハードウェアデバッギング方法は、トリガーが発生すれば、反復カウント及び実行ブロック差情報に基づいて、トリガー反復カウント値を設定する段階と、プロセッサ再遂行時、トリガー反復カウント値に基づいて、所定の実行ブロックに対してプレディケートを予め生成させる段階と、を含む。
【００１４】
この際、反復カウントは、トリガーが発生した時点のプロセッサの機能ユニット別にソフトウェアパイプライン化されたプログラムを実行する演算の反復回数であり得る。
【００１５】
また、実行ブロックの差は、トリガーが発生した実行ブロックとプレディケートが早期に生成されねばならない実行ブロックとの差であり得る。
【００１６】
また、反復カウント及び実行ブロック差情報は、プログラムのコンパイル段階で生成されうる。
【００１７】
また、現在の反復カウントが設定されたトリガー反復カウント値より大きいか、同じであれば、所定の実行ブロックは、その現在の反復または次の反復に含まれた実行ブロックであり得る。
【００１８】
本発明の追加的な態様によれば、トリガー反復カウント値が設定されれば、トリガーの発生時に中止されたプロセッサを再遂行させる段階をさらに含みうる。
【００１９】
この際、プロセッサを再遂行させる段階は、トリガーが発生する前に、プロセッサのレジスタファイルまたはターゲットメモリの値をバックアップする段階を含みうる。
【００２０】
また、プロセッサを再遂行させる段階は、トリガー反復カウント値が設定されれば、バックアップされたレジスタファイルまたはターゲットメモリの値を復元する段階をさらに含みうる。
【００２１】
本発明の一態様によれば、プロセッサ（ｐｒｏｃｅｓｓｏｒ）が、ソフトウェアパイプライン化されたループを行う間にインタラプトをハンドリングする方法は、ソフトウェアパイプライン化されたループに対する複数の反復の実行を重畳することによって、その複数の反復を行う段階と、ソフトウェアパイプライン化されたループに対する反復の実行ブロックが行われる間にインタラプトを受信すれば、そのインタラプトが発生した反復の遂行を中断し、そのインタラプトが発生したループの反復が行われる前に行われた反復の１つ以上の残りの実行ブロックを行う段階と、を含みうる。
【００２２】
その方法は、インタラプトが発生すれば、ソフトウェアパイプライン化されたループを行う前にプロセッサのレジスタファイルの内容を復旧する段階と、初めからソフトウェアパイプライン化されたループの実行を再び始める段階と、をさらに含みうる。
【００２３】
また、その方法は、インタラプトが発生したループの反復と同じ段階で行われ、反復以後に重畳された反復の実行ブロックの遂行を防止する段階をさらに含みうる。
【００２４】
この際、以後に重畳された反復の実行ブロックは、その実行ブロックの遂行結果がプロセッサのレジスタファイルに書き込まれることが防止されるように、プレディケートを通じてガーディングされうる。
【発明の効果】
【００２５】
ソフトウェアパイプライン化されたプログラムのハードウェアデバッギング時にトリガーが発生すれば、プロセッサを再遂行してプレディケートを予め生成することによって、カレンシーの問題を解決し、プロセッサのデバッギング機能を向上させることができる。
【図面の簡単な説明】
【００２６】
【図１】図１は、本発明の一実施形態によるハードウェアデバッギング装置のブロック図である。
【図２】図２は、本発明の一実施形態によるバックアップバッファが含まれたプロセッサの例である。
【図３Ａ】ソフトウェアパイプライン化されたプログラムの実行手続きを説明するための例である。
【図３Ｂ】ソフトウェアパイプライン化されたプログラムの実行手続きを説明するための例である。
【図３Ｃ】ソフトウェアパイプライン化されたプログラムの実行手続きを説明するための例である。
【図４】図４は、本発明の一実施形態によるハードウェアデバッギング方法のフローチャートである。
【発明を実施するための形態】
【００２７】
その他の実施形態の具体的な事項は、詳細な説明及び図面に含まれている。本発明の利点及び特徴、そして、それらを果たす方法は、添付される図面と共に詳細に後述されている実施形態を参照すると、明確になる。しかし、本発明は、以下で開示される実施形態に限定されるものではなく、互いに異なる多様な形態で具現され、単に本実施形態は、本発明の開示を完全にし、当業者に発明の範囲を完全に知らせるために提供されるものであり、本発明は、特許請求の範囲によって定義されるだけである。明細書の全体に亘って同じ参照符号は、同じ構成要素を指称する。
【００２８】
以下、本発明の実施形態によるソフトウェアパイプライン化されたプログラムのハードウェアデバッギング装置及び方法を、図面を参考にして詳しく説明する。
【００２９】
図１は、本発明の一実施形態によるハードウェアデバッギング装置のブロック図である。図２は、本発明の一実施形態によるバックアップバッファが含まれたプロセッサの例である。本実施形態によるハードウェアデバッギング装置１００は、プロセッサ２００の一部の構成になりうる。そのプロセッサ２００は、コンピュータ、モバイル端末、タブレット、家電器具、センサーのような端末に含まれうる。
【００３０】
図１を参照すると、ハードウェアデバッギング装置１００は、プレディケート設定部１１０、プロセッサ再遂行部１２０、及びプレディケート早期生成部１３０を含む。
【００３１】
プレディケート設定部１１０は、反復カウント（ｉｔｅｒ＿ｃｎｔ）及び実行ブロック差（ｅｘｅｃ＿ｂｌｏｃｋ＿ｄｉｆｆ）情報に基づいて、トリガー反復カウント（ｔｒｉｇ＿ｉｔｅｒ＿ｃｎｔ）値を設定する。例えば、プレディケート設定部１１０は、インタラプト（ｉｎｔｅｒｒｕｐｔ）、中止点または監視点などのトリガーイベントが発生すれば、トリガー反復カウント値を設定することができる。この際、反復カウント（ｉｔｅｒ＿ｃｎｔ）は、トリガーが発生した時点のプロセッサの機能ユニット別にソフトウェアパイプライン化されたプログラムを実行する演算の反復回数を意味する。
【００３２】
また、実行ブロックの差（ｅｘｅｃ＿ｂｌｏｃｋ＿ｄｉｆｆ）は、トリガーが発生した実行ブロックとプレディケートが早期に生成されねばならない実行ブロックとの差を意味する。反復カウント（ｉｔｅｒ＿ｃｎｔ）と実行ブロック差（ｅｘｅｃ＿ｂｌｏｃｋ＿ｄｉｆｆ）情報は、プログラムのコンパイル段階で予め生成されうる。
【００３３】
一方、トリガーが発生すれば、プロセッサは中止することができる。例えば、ループの特定の反復でトリガーイベントが発生すれば、そのループの実行回数は、実行ブロック間で異なるようになり、カレンシーの問題が発生する。この問題を解決するために、プロセッサ再遂行部１２０は、そのトリガーイベントが発生するか、プレディケート設定部１１０によってトリガー反復カウント（ｔｒｉｇ＿ｉｔｅｒ＿ｃｎｔ）が設定されれば、プロセッサをリセット（ｒｅｓｅｔ）し、ループを再び遂行させることができる。したがって、そのループは、初めから再び実行され、プレディケートは、カレンシーの問題を防止するために早期に生成される。図２を参照すると、プロセッサ２００は、レジスタファイル２１０ｂ、多数の機能ユニットＦＵ０〜ＦＵ３、メモリコントローラ２２０を含みうる。また、別途のレジスタファイル復元バッファ２１０及びメモリ復元バッファ２２０ａをさらに含みうる。一例として、プロセッサ２００は、ＣＧＡ（Ｃｏａｒｓｅ−Ｇｒａｉｎｅｄ  Ａｒｒａｙ）基盤の再構成可能プロセッサであり得る。プロセッサが行われれば、トリガーが発生するまでに機能ユニットＦＵ０〜ＦＵ３で各種の演算が行われ、その演算の結果がレジスタファイル２１０ｂに反映されて、最初のレジスタ値（ｌｉｖｅ−ｉｎ、ｌｉｖｅ−ｏｕｔ  ｖａｌｕｅ）が変更されうる。また、メモリ書き込み演算（ｍｅｍｏｒｙ  ｗｒｉｔｅ  ｏｐｅｒａｔｉｏｎ）によって、メモリコントローラ２２０ｂが対象メモリの値を変更することができる。したがって、トリガーイベントの発生によって、プロセッサ２００を初めから再び行うためには、このように変更されたレジスタファイル２１０ｂのレジスタ値やメモリの値を初期状態に復元しなければならない。
【００３４】
プロセッサ再遂行部１２０は、プロセッサ２００が最初に演算を行い始めれば、レジスタファイル２１０ｂのレジスタ値をレジスタファイル復元バッファ２１０ａにバックアップする。また、プロセッサ２００遂行途中に対象メモリに記録される元のメモリ値をメモリ復元バッファ２２０ａにバックアップすることができる。
【００３５】
プロセッサ再遂行部１２０は、プレディケート設定部１１０によってトリガー反復カウント（ｔｒｉｇ＿ｉｔｅｒ＿ｃｎｔ）が設定されれば、レジスタファイル復元バッファ２１０ａにバックアップされたレジスタ値とメモリ復元バッファ２２０ａにバックアップされている元のメモリ値とをそれぞれレジスタファイル２１０ｂと対象メモリとに復元することができる。プロセッサ再遂行部１２０は、復元が完了すれば、トリガーの発生によって中止されたプロセッサ２００をリセットし、再遂行させることができる。
【００３６】
プロセッサ２００が再遂行される間にトリガー反復カウント（ｔｒｉｇ＿ｉｔｅｒ＿ｃｎｔ）値に基づいて、所定の実行ブロックに対してプレディケートを予め生成することができる。例えば、プロセッサ２００が、ループを再遂行した結果、現在の反復カウントが設定されたトリガー反復カウント（ｔｒｉｇ＿ｉｔｅｒ＿ｃｎｔ）より大きいか、同じであれば、プレディケート早期生成部１３０は、プレディケートを予め生成することができる。
【００３７】
図３Ａないし図３Ｃは、ソフトウェアパイプライン化されたプログラムの実行手続きを説明するための例である。図３Ａないし図３Ｃを参照して、ハードウェアデバッギング装置１００の多様な実施形態を説明する。
【００３８】
図３Ａで、最初の反復（ｉ＝１）は、４つのインストラクションブロック（ｉｎｓｔｒｕｃｔｉｏｎ  ｂｌｏｃｋ）を含む。その最初の反復（ｉ＝１）の最初のインストラクションブロックは、最初の段階（ｓｔａｇｅ）で実行される。その最初の反復（ｉ＝１）の二番目のインストラクションブロックは、二番目の段階で実行される。
【００３９】
図３Ａは、４つの実行ブロック（１〜４）の遂行に対して６回の反復を行うソフトウェアパイプライン化されたプログラムの実行の一例を示すものである。また、エピローグは、プレディケートを通じて実行ブロックをガーディングすることで具現されている。ＣＧＡ基盤のスケジューラは、モジュロ（ｍｏｄｕｌｏ）スケジューリング技法を使ってスケジューリングするために、ループのプロローグまたはエピローグで非有効演算（ｉｎｖａｌｉｄ  ｏｐｅｒａｔｉｏｎ）が含まれうる。非有効演算の実行は、プレディケートを通じて実行ブロックをガーディング（ｇｕａｒｄｉｎｇ）することで制御される。プレディケートによってガーディングされた実行ブロックの非有効演算が機能ユニットＦＵ０〜ＦＵ４で行われれば、その実行の結果は、レジスタファイル２１０ｂに記録されない。
【００４０】
図３Ｂは、ソフトウェアパイプライン化されたプログラムの実行中にトリガーが発生した場合、一般的な実行手続きを示すものである。三番目の反復（ｉ＝３）を行う途中に実行ブロック２でトリガーが発生した場合を例示したものである。図３Ｂに例示されたように、三番目の反復の実行ブロック２でトリガーイベントが発生すれば、一般的なデバッギング実行手続きでは、４番目の反復の最後の実行ブロック１まで行われて、実行ブロック１は４回行われ、実行ブロック４は１回行われる。
【００４１】
このように、一般的なソフトウェアパイプライン化されたプログラムの実行手続きでは、トリガーの発生時点で実際には実行されてはならない四番目の反復の実行ブロック１は実行され、逆に、実際には実行されなければならない二番目の反復の実行ブロック４は実行されず、カレンシーの問題が発生する。
【００４２】
中止点や監視点のようなトリガー信号が発生すれば、次の反復を待たなければならないコードがあまりにも早く実行され、またはその逆の場合も発生する。これにより、多様なカレンシーの問題が発生する。図３Ｂの例で、三番目の反復の二番目の実行ブロックでトリガーが発生する。
【００４３】
図３Ｃは、ソフトウェアパイプライン化されたプログラムの実行中にトリガーが発生した場合の実行手続きを示すものである。本実施形態によれば、カレンシーの問題は防止される。図３Ｃを参照すると、三番目の反復（ｉ＝３）の実行ブロック２でトリガーイベントが発生すれば、プレディケートが生成される。そのプレディケートは、四番目の反復の実行ブロック１の実行をガーディングする。
【００４４】
このように、四番目の反復の実行ブロック１の実行をガーディングするためのプレディケートを生成するために、プロセッサ２００でループが再び始まることができる。また、プロセッサ再遂行部１２０は、プロセッサ２００が遂行を始めれば、トリガーイベントが発生する前にレジスタファイル２１０ｂのレジスタ値をレジスタファイル復元バッファ２１０ａにバックアップすることができる。また、プロセッサ再遂行部１２０は、元のメモリ値をメモリ復元バッファ２２０ａにバックアップすることができる。例えば、元のメモリ値は、プロセッサ２００が行う途中にメモリコントローラ２２０ｂによって対象メモリに記録されうる。
【００４５】
プレディケート設定部１１０は、トリガーイベントが発生すれば、反復カウント（ｉｔｅｒ＿ｃｎｔ）と実行ブロック差（ｅｘｅｃ＿ｂｌｏｃｋ＿ｄｉｆｆ）情報とを用いて、トリガー反復カウント（ｔｒｉｇ＿ｉｔｅｒ＿ｃｎｔ）を生成することができる。この際、トリガー反復カウント（ｔｒｉｇ＿ｉｔｅｒ＿ｃｎｔ）は、下記の数式によって計算されうる。
【００４６】
ｔｒｉｇ＿ｉｔｅｒ＿ｃｎｔ＝ｉｔｅｒ＿ｃｎｔ−ｅｘｅｃ＿ｂｌｏｃｋ＿ｄｉｆｆ＋１
図３Ｃを参照すると、トリガーイベントは、三番目の反復の実行ブロック２で発生する。この際、そのトリガーイベントが発生した時点の反復カウント（ｉｔｅｒ＿ｃｎｔ）は、３である。また、実行ブロックの差（ｅｘｅｃ＿ｂｌｏｃｋ＿ｄｉｆｆ）は、１である。これは、トリガーが発生した実行ブロックが実行ブロック２であり、実際に実行されてはならない実行ブロック、すなわち、プレディケートが早期に生成されねばならない実行ブロックが実行ブロック１であるためである。したがって、トリガー反復カウント（ｔｒｉｇ＿ｉｔｅｒ＿ｃｎｔ）は、前記の数式によって計算すれば、３になる。
【００４７】
プロセッサ再遂行部１２０は、トリガー反復カウント（ｔｒｉｇ＿ｉｔｅｒ＿ｃｎｔ）が設定されれば、バックアップしたレジスタ値とメモリとを復元し、プロセッサ２００をリセットして再遂行することができる。
【００４８】
プロセッサ２００は、再遂行され、プログラムを初めから行う。例えば、もし、現在の反復カウントが設定されたトリガー反復カウント（ｔｒｉｇ＿ｉｔｅｒ＿ｃｎｔ）より大きいか、同じであれば、プロセッサ早期生成部１３０は、現在の反復と次の反復とに属した実行ブロックに対して予めプレディケートを生成させ、その実行ブロックに対する演算をガーディングすることができる。例えば、プロセッサが反復を再遂行する時、現在の反復カウントが４になれば、プレディケートは、四番目の反復を始める時、実行ブロック１に対して早期に生成されうる。結果的に、プロセッサが四番目の反復を行う時、そのプレディケートを通じて実行ブロック１をガーディングすることができる。
【００４９】
以後、五番目の時間段階（ｓｔａｇｅ）で行われる間に、二番目の反復（ｉ＝２）の実行ブロック４に対するプレディケートは、予め生成されていないために、二番目の反復の実行ブロック４の実行は行われる。逆に、三番目の反復の実行ブロック３は、トリガーが発生した以前段階で実行された三番目の反復の実行ブロック２からプレディケート情報を受信してガーディングされうる。次いで、四番目の反復の実行ブロック２は、同一ループの以前段階で生成されたプレディケート情報を四番目の反復の実行ブロック１から受信してガーディングされうる。
【００５０】
プロセッサ２００は、このような方式でエピローグまで行った後、デバッギング状態に入る。
【００５１】
図３Ｃの実施形態によれば、カレンシーの問題は防止される。最初の反復と二番目の反復は、完全に行われ、三番目の反復の実行ブロック３から六番目の反復の実行ブロック４までの実行は防止される。これを具現するために、ＣＧＡは機能を再開し、プレディケート早期生成方法が行われる。
【００５２】
図４は、本発明の一実施形態によるハードウェアデバッギング方法のフローチャートである。図４を参照して、ハードウェアデバッギング方法を説明する。
【００５３】
まず、プロセッサ再遂行部１２０は、プロセッサ２００遂行が始まれば、レジスタファイル２１０ｂのレジスタ値をレジスタファイル復元バッファ２１０ａにバックアップし、プロセッサ２００の遂行途中にメモリコントローラ２２０ｂによって対象メモリに記録される時、元のメモリ値をメモリ復元バッファ２２０ａにバックアップする（段階３１０）。
【００５４】
次いで、プレディケート設定部１１０は、中止点または監視点などのトリガーが発生すれば、反復カウント（ｉｔｅｒ＿ｃｎｔ）と実行ブロック差（ｅｘｅｃ＿ｂｌｏｃｋ＿ｄｉｆｆ）情報とを用いて、トリガー反復カウント（ｔｒｉｇ＿ｉｔｅｒ＿ｃｎｔ）を計算する。この際、反復カウント（ｉｔｅｒ＿ｃｎｔ）と実行ブロック差（ｅｘｅｃ＿ｂｌｏｃｋ＿ｄｉｆｆ）情報は、プログラムのコンパイル段階で生成されうる。図３Ａないし図３Ｃを参照して、トリガー反復カウント（ｔｒｉｇ＿ｉｔｅｒ＿ｃｎｔ）を生成させる手続きを説明した。
【００５５】
次いで、トリガー反復カウント（ｔｒｉｇ＿ｉｔｅｒ＿ｃｎｔ）が設定されれば、プロセッサ再遂行部１２０は、レジスタファイル復元バッファ２１０ａ及びメモリ復元バッファ２２０ａにバックアップされている値をレジスタファイル２１０ｂ及び対象メモリ２２０ｂに復元する（段階３３０）。
【００５６】
次いで、バックアップされた値の復元が完了すれば、プロセッサ再遂行部１２０は、トリガーの発生時に中止されたプロセッサ２００をリセットし、再遂行させる（段階３４０）。
【００５７】
最後に、図３Ａないし図３Ｃを参照して前述したように、プレディケート早期生成部１３０は、プロセッサ２００が再遂行されて、現在の反復カウントが設定されたトリガー反復カウント（ｔｒｉｇ＿ｉｔｅｒ＿ｃｎｔ）より大きいか、同じであれば、その反復以下の実行ブロックに対しては、予めプレディケートを生成してガーディングさせる（段階３５０）。
【００５８】
開示された実施形態によれば、図３Ｂのように、ループの特定の反復を行う途中にトリガーが発生する場合、その時点で各実行ブロックごとに遂行回数が変わって、発生するカレンシーの問題を防止することができる。
【００５９】
一方、本発明の実施形態は、コンピュータで読み取り可能な記録媒体にコンピュータで読み取り可能なコードとして具現しうる。コンピュータで読み取り可能な記録媒体は、コンピュータシステムによって読み取れるデータが保存されるあらゆる種類の記録装置を含む。
【００６０】
コンピュータで読み取り可能な記録媒体の例としては、ＲＯＭ、ＲＡＭ、ＣＤ−ＲＯＭ、磁気テープ、フロッピー（登録商標）ディスク、光データ保存装置などがあり、またキャリアウェーブ（例えば、インターネットを介した伝送）の形態で具現することを含む。また、コンピュータで読み取り可能な記録媒体は、ネットワークで連結されたコンピュータシステムに分散されて、分散方式でコンピュータで読み取り可能なコードとして保存されて実行可能である。そして、本発明を具現するための機能的な（ｆｕｎｃｔｉｏｎａｌ）プログラム、コード及びコードセグメントは、本発明が属する技術分野のプログラマーによって容易に推論されうる。
【００６１】
当業者なら、本発明が、その技術的思想や必須的な特徴を変更せずとも、他の具体的な形態で実施されることを理解できるであろう。したがって、前述した実施形態は、あらゆる面で例示的なものであり、限定的ではないということを理解しなければならない。本発明の範囲は、前記詳細な説明よりは後述する特許請求の範囲によって表われ、特許請求の範囲の意味及び範囲、そして、その均等概念から導出されるあらゆる変更または変形された形態が、本発明の範囲に含まれると理解されなければならない。
【産業上の利用可能性】
【００６２】
本発明は、ソフトウェアパイプライン化されたプログラムのハードウェアデバッギング装置及び方法関連の技術分野に適用可能である。
【符号の説明】
【００６３】
１００  ハードウェアデバッギング装置
１１０  プレディケート設定部
１２０  プロセッサ再遂行部
１３０  プレディケート早期生成部
２００  プロセッサ
２１０  レジスタファイル
２２０  メモリコントローラ
【図１】
2013152716.tif 000003
【図２】
2013152716.tif 000004
【図３Ａ】
2013152716.tif 000005
【図３Ｂ】
2013152716.tif 000006
【図３Ｃ】
2013152716.tif 000007
【図４】
2013152716.tif 000008