(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6097572
(24)【登録日】2017年2月24日
(45)【発行日】2017年3月15日
(54)【発明の名称】ソフトウェアパイプライン化されたプログラムのハードウェアデバッギング装置及び方法
(51)【国際特許分類】
G06F 11/36 20060101AFI20170306BHJP
G06F 9/48 20060101ALI20170306BHJP
【FI】
G06F11/36 128
G06F11/36 148
G06F9/46 310K
【請求項の数】20
【全頁数】13
(21)【出願番号】特願2013-9247(P2013-9247)
(22)【出願日】2013年1月22日
(65)【公開番号】特開2013-152716(P2013-152716A)
(43)【公開日】2013年8月8日
【審査請求日】2015年9月8日
(31)【優先権主張番号】10-2012-0007383
(32)【優先日】2012年1月25日
(33)【優先権主張国】KR
(73)【特許権者】
【識別番号】390019839
【氏名又は名称】三星電子株式会社
【氏名又は名称原語表記】Samsung Electronics Co.,Ltd.
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100091214
【弁理士】
【氏名又は名称】大貫 進介
(72)【発明者】
【氏名】沈 熙 峻
(72)【発明者】
【氏名】趙 淵 坤
【審査官】
多賀 実
(56)【参考文献】
【文献】
特開2002−251282(JP,A)
【文献】
特開平11−272474(JP,A)
【文献】
特開平04−024836(JP,A)
【文献】
特開昭60−250440(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/38
G06F 9/45
G06F 9/48
G06F 11/14
G06F 11/28−11/36
(57)【特許請求の範囲】
【請求項1】
ソフトウェアパイプライン化された(software pipelined)プログラムのハードウェアデバッギング装置であって、
トリガー(trigger)が発生すれば、反復カウント及び実行ブロック差情報に基づいて、トリガー反復カウント値を設定するプレディケート設定部と、
プロセッサ再遂行時、前記トリガー反復カウント値に基づいて、所定の実行ブロックに対してプレディケートを予め生成させるプレディケート早期生成部と、
を含むハードウェアデバッギング装置。
【請求項2】
前記反復カウントは、
トリガーが発生した時点のプロセッサの機能ユニット(functional unit)別にソフトウェアパイプライン化されたプログラムを実行する演算の反復回数である請求項1に記載のハードウェアデバッギング装置。
【請求項3】
前記実行ブロック差は、
トリガーが発生した実行ブロックとプレディケートが早期に生成されねばならない実行ブロックとの差である、
請求項1に記載のハードウェアデバッギング装置。
【請求項4】
前記反復カウント及び前記実行ブロック差情報は、
前記ソフトウェアパイプライン化されたプログラムのコンパイル段階で生成される、
請求項1に記載のハードウェアデバッギング装置。
【請求項5】
現在の反復カウントが、前記設定されたトリガー反復カウントより大きいか、同じであれば、前記所定の実行ブロックは、現在の反復または次の反復に含まれた実行ブロックである、
請求項1に記載のハードウェアデバッギング装置。
【請求項6】
前記装置は、さらに、
前記トリガー反復カウント値が設定されれば、前記トリガーの発生時に中止されたプロセッサを再遂行させるプロセッサ再遂行部、
を含む請求項1乃至5いずれか一項に記載のハードウェアデバッギング装置。
【請求項7】
前記プロセッサ再遂行部は、
前記トリガーが発生する前に、前記プロセッサのレジスタファイルまたはターゲットメモリの値をバックアップする、
請求項6に記載のハードウェアデバッギング装置。
【請求項8】
前記プロセッサ再遂行部は、
前記トリガー反復カウント値が設定されれば、前記バックアップされたレジスタファイルまたはターゲットメモリの値を復元した後、前記中止されたプロセッサを再遂行させる、
請求項7に記載のハードウェアデバッギング装置。
【請求項9】
ソフトウェアパイプライン化されたプログラムのハードウェアデバッギング方法であって、
トリガーが発生すれば、反復カウント及びソフトウェアパイプライン化されたプログラムの実行ブロック差情報に基づいて、トリガー反復カウント値を設定する段階と、
プロセッサ再遂行時、前記トリガー反復カウント値に基づいて、所定の実行ブロックに対してプレディケートを予め生成させる段階と、
を含むハードウェアデバッギング方法。
【請求項10】
前記反復カウントは、
トリガーが発生した時点のプロセッサの機能ユニット別にソフトウェアパイプライン化されたプログラムを実行する演算の反復回数である請求項9に記載のハードウェアデバッギング方法。
【請求項11】
前記実行ブロック差は、
トリガーが発生した実行ブロックとプレディケートが早期に生成されねばならない実行ブロックとの差である、
請求項9に記載のハードウェアデバッギング方法。
【請求項12】
前記反復カウント及び前記実行ブロック差情報は、
前記プログラムのコンパイル段階で生成される、
請求項9に記載のハードウェアデバッギング方法。
【請求項13】
前記所定の実行ブロックは、
プロセッサの再遂行時、現在の反復カウントが前記トリガー反復カウントより大きいか、同じである実行ブロックである、
請求項9に記載のハードウェアデバッギング方法。
【請求項14】
前記方法は、さらに、
前記トリガー反復カウント値が設定されれば、前記トリガーの発生時に中止されたプロセッサを再遂行させる段階、
を含む請求項9乃至13いずれか一項に記載のハードウェアデバッギング方法。
【請求項15】
前記プロセッサを再遂行させる段階は、
前記トリガーが発生する前に、前記プロセッサのレジスタファイルまたはターゲットメモリの値をバックアップする段階を含む、
請求項14に記載のハードウェアデバッギング方法。
【請求項16】
前記プロセッサを再遂行させる段階は、
前記トリガー反復カウント値が設定されれば、前記バックアップされたレジスタファイルまたはターゲットメモリの値を復元する段階をさらに含む、
請求項15に記載のハードウェアデバッギング方法。
【請求項17】
プロセッサ(processor)が、ソフトウェアパイプライン化されたループを行う間にインタラプトをハンドリングする方法において、
前記ソフトウェアパイプライン化されたループに対する複数の反復の実行を重畳することによって、その複数の反復を行う段階と、
前記ソフトウェアパイプライン化されたループに対する反復の実行ブロックが行われる間にインタラプトを受信すれば、そのインタラプトが発生した反復の遂行を中断し、そのインタラプトが発生したループの反復が行われる前に行われた反復の1つ以上の残りの実行ブロックを行う段階と、
を含む方法。
【請求項18】
前記方法は、さらに、
前記インタラプトが発生すれば、前記ソフトウェアパイプライン化されたループを行う前に、前記プロセッサのレジスタファイルの内容を復旧する段階と、
初めから前記ソフトウェアパイプライン化されたループの実行を再び始める段階と、
を含む請求項17に記載の方法。
【請求項19】
前記方法は、さらに、
前記インタラプトが発生したループの反復と同じ段階において行われ、前記インタラプトが発生した以後に重畳された反復の実行ブロックの遂行を防止する段階、
を含む請求項17に記載の方法。
【請求項20】
前記インタラプトが発生した以後に重畳された反復の実行ブロックは、その実行ブロックの遂行結果がプロセッサのレジスタファイルに書き込まれることが防止されるように、プレディケートを通じてガーディングされる、
請求項19に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ソフトウェアパイプライン化されたプログラムのハードウェアデバッギング装置及び方法に関する。
【背景技術】
【0002】
プロセッサでソフトウェアパイプライン(software pipeline)方法は、実行するソフトウェアを段階別に分けて、パイプラインの形態で行う方法であって、処理性能を大きく高めうる。ソフトウェアパイプライン方法は、文章を互いに独立した反復(iteration)内に位置させることによって、ループの処理を最適化することができる。ソフトウェアパイプライン方法は、外観上、順次的な命令語が並列して実行されるように依存性を除去する。
【0003】
しかし、ソフトウェアの実行順序を重畳することによって、プロセッサのデバッギングを難しくする。このようにソフトウェアパイプライン化されたプログラムのハードウェアデバッギング時に中止点(breakpoint)または監視点(watch point)などのトリガー信号が発生すれば、まだ実行されてはならないコードセクションが既に実行されるか、その逆の状況が発生する。これにより、変数(variable)値がソースプログラムの同等な地点と一致していないカレンシー(currency)の問題が発生する。
【発明の概要】
【発明が解決しようとする課題】
【0004】
本発明は、ソフトウェアパイプライン化されたプログラムのハードウェアデバッギング装置及び方法を提供することである。
【課題を解決するための手段】
【0005】
本発明の一態様によれば、ソフトウェアパイプライン化されたプログラムのハードウェアデバッギング装置は、トリガー(trigger)が発生すれば、反復カウント及び実行ブロック差情報に基づいて、トリガー反復カウント値を設定するプレディケート設定部と、プロセッサ再遂行時、トリガー反復カウント値に基づいて、所定の実行ブロックに対してプレディケートを予め生成させるプレディケート早期生成部と、を含む。
【0006】
この際、反復カウントは、トリガーが発生した時点のプロセッサの機能ユニット(functional unit)別にソフトウェアパイプライン化されたプログラムを実行する演算の反復回数であり得る。
【0007】
また、実行ブロックの差は、トリガーが発生した実行ブロックとプレディケートが早期に生成されねばならない実行ブロックとの差であり得る。
【0008】
また、反復カウント及び実行ブロック差情報は、プログラムのコンパイル段階で生成されることであり得る。
【0009】
また、現在の反復カウントが設定されたトリガー反復カウント値より大きいか、同じであれば、所定の実行ブロックは、現在の反復または次の反復に含まれた実行ブロックであり得る。
【0010】
本発明の追加的な態様によれば、ハードウェアデバッギング装置は、トリガー反復カウント値が設定されれば、トリガーの発生時に中止されたプロセッサを再遂行させるプロセッサ再遂行部をさらに含みうる。
【0011】
この際、プロセッサ再遂行部は、トリガーが発生する前に、プロセッサのレジスタファイルまたはターゲットメモリの値をバックアップすることができる。
【0012】
また、プロセッサ再遂行部は、トリガー反復カウント値が設定されれば、バックアップされたレジスタファイルまたはターゲットメモリの値を復元した後、中止されたプロセッサを再遂行させることができる。
【0013】
本発明の一態様によれば、ソフトウェアパイプライン化された(software pipelined)プログラムのハードウェアデバッギング方法は、トリガーが発生すれば、反復カウント及び実行ブロック差情報に基づいて、トリガー反復カウント値を設定する段階と、プロセッサ再遂行時、トリガー反復カウント値に基づいて、所定の実行ブロックに対してプレディケートを予め生成させる段階と、を含む。
【0014】
この際、反復カウントは、トリガーが発生した時点のプロセッサの機能ユニット別にソフトウェアパイプライン化されたプログラムを実行する演算の反復回数であり得る。
【0015】
また、実行ブロックの差は、トリガーが発生した実行ブロックとプレディケートが早期に生成されねばならない実行ブロックとの差であり得る。
【0016】
また、反復カウント及び実行ブロック差情報は、プログラムのコンパイル段階で生成されうる。
【0017】
また、現在の反復カウントが設定されたトリガー反復カウント値より大きいか、同じであれば、所定の実行ブロックは、その現在の反復または次の反復に含まれた実行ブロックであり得る。
【0018】
本発明の追加的な態様によれば、トリガー反復カウント値が設定されれば、トリガーの発生時に中止されたプロセッサを再遂行させる段階をさらに含みうる。
【0019】
この際、プロセッサを再遂行させる段階は、トリガーが発生する前に、プロセッサのレジスタファイルまたはターゲットメモリの値をバックアップする段階を含みうる。
【0020】
また、プロセッサを再遂行させる段階は、トリガー反復カウント値が設定されれば、バックアップされたレジスタファイルまたはターゲットメモリの値を復元する段階をさらに含みうる。
【0021】
本発明の一態様によれば、プロセッサ(processor)が、ソフトウェアパイプライン化されたループを行う間にインタラプトをハンドリングする方法は、ソフトウェアパイプライン化されたループに対する複数の反復の実行を重畳することによって、その複数の反復を行う段階と、ソフトウェアパイプライン化されたループに対する反復の実行ブロックが行われる間にインタラプトを受信すれば、そのインタラプトが発生した反復の遂行を中断し、そのインタラプトが発生したループの反復が行われる前に行われた反復の1つ以上の残りの実行ブロックを行う段階と、を含みうる。
【0022】
その方法は、インタラプトが発生すれば、ソフトウェアパイプライン化されたループを行う前にプロセッサのレジスタファイルの内容を復旧する段階と、初めからソフトウェアパイプライン化されたループの実行を再び始める段階と、をさらに含みうる。
【0023】
また、その方法は、インタラプトが発生したループの反復と同じ段階で行われ、反復以後に重畳された反復の実行ブロックの遂行を防止する段階をさらに含みうる。
【0024】
この際、以後に重畳された反復の実行ブロックは、その実行ブロックの遂行結果がプロセッサのレジスタファイルに書き込まれることが防止されるように、プレディケートを通じてガーディングされうる。
【発明の効果】
【0025】
ソフトウェアパイプライン化されたプログラムのハードウェアデバッギング時にトリガーが発生すれば、プロセッサを再遂行してプレディケートを予め生成することによって、カレンシーの問題を解決し、プロセッサのデバッギング機能を向上させることができる。
【図面の簡単な説明】
【0026】
【
図1】
図1は、本発明の一実施形態によるハードウェアデバッギング装置のブロック図である。
【
図2】
図2は、本発明の一実施形態によるバックアップバッファが含まれたプロセッサの例である。
【
図3A】ソフトウェアパイプライン化されたプログラムの実行手続きを説明するための例である。
【
図3B】ソフトウェアパイプライン化されたプログラムの実行手続きを説明するための例である。
【
図3C】ソフトウェアパイプライン化されたプログラムの実行手続きを説明するための例である。
【
図4】
図4は、本発明の一実施形態によるハードウェアデバッギング方法のフローチャートである。
【発明を実施するための形態】
【0027】
その他の実施形態の具体的な事項は、詳細な説明及び図面に含まれている。本発明の利点及び特徴、そして、それらを果たす方法は、添付される図面と共に詳細に後述されている実施形態を参照すると、明確になる。しかし、本発明は、以下で開示される実施形態に限定されるものではなく、互いに異なる多様な形態で具現され、単に本実施形態は、本発明の開示を完全にし、当業者に発明の範囲を完全に知らせるために提供されるものであり、本発明は、特許請求の範囲によって定義されるだけである。明細書の全体に亘って同じ参照符号は、同じ構成要素を指称する。
【0028】
以下、本発明の実施形態によるソフトウェアパイプライン化されたプログラムのハードウェアデバッギング装置及び方法を、図面を参考にして詳しく説明する。
【0029】
図1は、本発明の一実施形態によるハードウェアデバッギング装置のブロック図である。
図2は、本発明の一実施形態によるバックアップバッファが含まれたプロセッサの例である。本実施形態によるハードウェアデバッギング装置100は、プロセッサ200の一部の構成になりうる。そのプロセッサ200は、コンピュータ、モバイル端末、タブレット、家電器具、センサーのような端末に含まれうる。
【0030】
図1を参照すると、ハードウェアデバッギング装置100は、プレディケート設定部110、プロセッサ再遂行部120、及びプレディケート早期生成部130を含む。
【0031】
プレディケート設定部110は、反復カウント(iter_cnt)及び実行ブロック差(exec_block_diff)情報に基づいて、トリガー反復カウント(trig_iter_cnt)値を設定する。例えば、プレディケート設定部110は、インタラプト(interrupt)、中止点または監視点などのトリガーイベントが発生すれば、トリガー反復カウント値を設定することができる。この際、反復カウント(iter_cnt)は、トリガーが発生した時点のプロセッサの機能ユニット別にソフトウェアパイプライン化されたプログラムを実行する演算の反復回数を意味する。
【0032】
また、実行ブロックの差(exec_block_diff)は、トリガーが発生した実行ブロックとプレディケートが早期に生成されねばならない実行ブロックとの差を意味する。反復カウント(iter_cnt)と実行ブロック差(exec_block_diff)情報は、プログラムのコンパイル段階で予め生成されうる。
【0033】
一方、トリガーが発生すれば、プロセッサは中止することができる。例えば、ループの特定の反復でトリガーイベントが発生すれば、そのループの実行回数は、実行ブロック間で異なるようになり、カレンシーの問題が発生する。この問題を解決するために、プロセッサ再遂行部120は、そのトリガーイベントが発生するか、プレディケート設定部110によってトリガー反復カウント(trig_iter_cnt)が設定されれば、プロセッサをリセット(reset)し、ループを再び遂行させることができる。したがって、そのループは、初めから再び実行され、プレディケートは、カレンシーの問題を防止するために早期に生成される。
図2を参照すると、プロセッサ200は、レジスタファイル210b、多数の機能ユニットFU0〜FU3、メモリコントローラ220を含みうる。また、別途のレジスタファイル復元バッファ210及びメモリ復元バッファ220aをさらに含みうる。一例として、プロセッサ200は、CGA(Coarse−Grained Array)基盤の再構成可能プロセッサであり得る。プロセッサが行われれば、トリガーが発生するまでに機能ユニットFU0〜FU3で各種の演算が行われ、その演算の結果がレジスタファイル210bに反映されて、最初のレジスタ値(live−in、live−out value)が変更されうる。また、メモリ書き込み演算(memory write operation)によって、メモリコントローラ220bが対象メモリの値を変更することができる。したがって、トリガーイベントの発生によって、プロセッサ200を初めから再び行うためには、このように変更されたレジスタファイル210bのレジスタ値やメモリの値を初期状態に復元しなければならない。
【0034】
プロセッサ再遂行部120は、プロセッサ200が最初に演算を行い始めれば、レジスタファイル210bのレジスタ値をレジスタファイル復元バッファ210aにバックアップする。また、プロセッサ200遂行途中に対象メモリに記録される元のメモリ値をメモリ復元バッファ220aにバックアップすることができる。
【0035】
プロセッサ再遂行部120は、プレディケート設定部110によってトリガー反復カウント(trig_iter_cnt)が設定されれば、レジスタファイル復元バッファ210aにバックアップされたレジスタ値とメモリ復元バッファ220aにバックアップされている元のメモリ値とをそれぞれレジスタファイル210bと対象メモリとに復元することができる。プロセッサ再遂行部120は、復元が完了すれば、トリガーの発生によって中止されたプロセッサ200をリセットし、再遂行させることができる。
【0036】
プロセッサ200が再遂行される間にトリガー反復カウント(trig_iter_cnt)値に基づいて、所定の実行ブロックに対してプレディケートを予め生成することができる。例えば、プロセッサ200が、ループを再遂行した結果、現在の反復カウントが設定されたトリガー反復カウント(trig_iter_cnt)より大きいか、同じであれば、プレディケート早期生成部130は、プレディケートを予め生成することができる。
【0037】
図3Aないし
図3Cは、ソフトウェアパイプライン化されたプログラムの実行手続きを説明するための例である。
図3Aないし
図3Cを参照して、ハードウェアデバッギング装置100の多様な実施形態を説明する。
【0038】
図3Aで、最初の反復(i=1)は、4つのインストラクションブロック(instruction block)を含む。その最初の反復(i=1)の最初のインストラクションブロックは、最初の段階(stage)で実行される。その最初の反復(i=1)の二番目のインストラクションブロックは、二番目の段階で実行される。
【0039】
図3Aは、4つの実行ブロック(1〜4)の遂行に対して6回の反復を行うソフトウェアパイプライン化されたプログラムの実行の一例を示すものである。また、エピローグは、プレディケートを通じて実行ブロックをガーディングすることで具現されている。CGA基盤のスケジューラは、モジュロ(modulo)スケジューリング技法を使ってスケジューリングするために、ループのプロローグまたはエピローグで非有効演算(invalid operation)が含まれうる。非有効演算の実行は、プレディケートを通じて実行ブロックをガーディング(guarding)することで制御される。プレディケートによってガーディングされた実行ブロックの非有効演算が機能ユニットFU0〜FU4で行われれば、その実行の結果は、レジスタファイル210bに記録されない。
【0040】
図3Bは、ソフトウェアパイプライン化されたプログラムの実行中にトリガーが発生した場合、一般的な実行手続きを示すものである。三番目の反復(i=3)を行う途中に実行ブロック2でトリガーが発生した場合を例示したものである。
図3Bに例示されたように、三番目の反復の実行ブロック2でトリガーイベントが発生すれば、一般的なデバッギング実行手続きでは、4番目の反復の最後の実行ブロック1まで行われて、実行ブロック1は4回行われ、実行ブロック4は1回行われる。
【0041】
このように、一般的なソフトウェアパイプライン化されたプログラムの実行手続きでは、トリガーの発生時点で実際には実行されてはならない四番目の反復の実行ブロック1は実行され、逆に、実際には実行されなければならない二番目の反復の実行ブロック4は実行されず、カレンシーの問題が発生する。
【0042】
中止点や監視点のようなトリガー信号が発生すれば、次の反復を待たなければならないコードがあまりにも早く実行され、またはその逆の場合も発生する。これにより、多様なカレンシーの問題が発生する。
図3Bの例で、三番目の反復の二番目の実行ブロックでトリガーが発生する。
【0043】
図3Cは、ソフトウェアパイプライン化されたプログラムの実行中にトリガーが発生した場合の実行手続きを示すものである。本実施形態によれば、カレンシーの問題は防止される。
図3Cを参照すると、三番目の反復(i=3)の実行ブロック2でトリガーイベントが発生すれば、プレディケートが生成される。そのプレディケートは、四番目の反復の実行ブロック1の実行をガーディングする。
【0044】
このように、四番目の反復の実行ブロック1の実行をガーディングするためのプレディケートを生成するために、プロセッサ200でループが再び始まることができる。また、プロセッサ再遂行部120は、プロセッサ200が遂行を始めれば、トリガーイベントが発生する前にレジスタファイル210bのレジスタ値をレジスタファイル復元バッファ210aにバックアップすることができる。また、プロセッサ再遂行部120は、元のメモリ値をメモリ復元バッファ220aにバックアップすることができる。例えば、元のメモリ値は、プロセッサ200が行う途中にメモリコントローラ220bによって対象メモリに記録されうる。
【0045】
プレディケート設定部110は、トリガーイベントが発生すれば、反復カウント(iter_cnt)と実行ブロック差(exec_block_diff)情報とを用いて、トリガー反復カウント(trig_iter_cnt)を生成することができる。この際、トリガー反復カウント(trig_iter_cnt)は、下記の数式によって計算されうる。
【0046】
trig_iter_cnt=iter_cnt−exec_block_diff+1
図3Cを参照すると、トリガーイベントは、三番目の反復の実行ブロック2で発生する。この際、そのトリガーイベントが発生した時点の反復カウント(iter_cnt)は、3である。また、実行ブロックの差(exec_block_diff)は、1である。これは、トリガーが発生した実行ブロックが実行ブロック2であり、実際に実行されてはならない実行ブロック、すなわち、プレディケートが早期に生成されねばならない実行ブロックが実行ブロック1であるためである。したがって、トリガー反復カウント(trig_iter_cnt)は、前記の数式によって計算すれば、3になる。
【0047】
プロセッサ再遂行部120は、トリガー反復カウント(trig_iter_cnt)が設定されれば、バックアップしたレジスタ値とメモリとを復元し、プロセッサ200をリセットして再遂行することができる。
【0048】
プロセッサ200は、再遂行され、プログラムを初めから行う。例えば、もし、現在の反復カウントが設定されたトリガー反復カウント(trig_iter_cnt)より大きいか、同じであれば、プロセッサ早期生成部130は、現在の反復と次の反復とに属した実行ブロックに対して予めプレディケートを生成させ、その実行ブロックに対する演算をガーディングすることができる。例えば、プロセッサが反復を再遂行する時、現在の反復カウントが4になれば、プレディケートは、四番目の反復を始める時、実行ブロック1に対して早期に生成されうる。結果的に、プロセッサが四番目の反復を行う時、そのプレディケートを通じて実行ブロック1をガーディングすることができる。
【0049】
以後、五番目の時間段階(stage)で行われる間に、二番目の反復(i=2)の実行ブロック4に対するプレディケートは、予め生成されていないために、二番目の反復の実行ブロック4の実行は行われる。逆に、三番目の反復の実行ブロック3は、トリガーが発生した以前段階で実行された三番目の反復の実行ブロック2からプレディケート情報を受信してガーディングされうる。次いで、四番目の反復の実行ブロック2は、同一ループの以前段階で生成されたプレディケート情報を四番目の反復の実行ブロック1から受信してガーディングされうる。
【0050】
プロセッサ200は、このような方式でエピローグまで行った後、デバッギング状態に入る。
【0051】
図3Cの実施形態によれば、カレンシーの問題は防止される。最初の反復と二番目の反復は、完全に行われ、三番目の反復の実行ブロック3から六番目の反復の実行ブロック4までの実行は防止される。これを具現するために、CGAは機能を再開し、プレディケート早期生成方法が行われる。
【0052】
図4は、本発明の一実施形態によるハードウェアデバッギング方法のフローチャートである。
図4を参照して、ハードウェアデバッギング方法を説明する。
【0053】
まず、プロセッサ再遂行部120は、プロセッサ200遂行が始まれば、レジスタファイル210bのレジスタ値をレジスタファイル復元バッファ210aにバックアップし、プロセッサ200の遂行途中にメモリコントローラ220bによって対象メモリに記録される時、元のメモリ値をメモリ復元バッファ220aにバックアップする(段階310)。
【0054】
次いで、プレディケート設定部110は、中止点または監視点などのトリガーが発生すれば、反復カウント(iter_cnt)と実行ブロック差(exec_block_diff)情報とを用いて、トリガー反復カウント(trig_iter_cnt)を計算する。この際、反復カウント(iter_cnt)と実行ブロック差(exec_block_diff)情報は、プログラムのコンパイル段階で生成されうる。
図3Aないし
図3Cを参照して、トリガー反復カウント(trig_iter_cnt)を生成させる手続きを説明した。
【0055】
次いで、トリガー反復カウント(trig_iter_cnt)が設定されれば、プロセッサ再遂行部120は、レジスタファイル復元バッファ210a及びメモリ復元バッファ220aにバックアップされている値をレジスタファイル210b及び対象メモリ220bに復元する(段階330)。
【0056】
次いで、バックアップされた値の復元が完了すれば、プロセッサ再遂行部120は、トリガーの発生時に中止されたプロセッサ200をリセットし、再遂行させる(段階340)。
【0057】
最後に、
図3Aないし
図3Cを参照して前述したように、プレディケート早期生成部130は、プロセッサ200が再遂行されて、現在の反復カウントが設定されたトリガー反復カウント(trig_iter_cnt)より大きいか、同じであれば、その反復以下の実行ブロックに対しては、予めプレディケートを生成してガーディングさせる(段階350)。
【0058】
開示された実施形態によれば、
図3Bのように、ループの特定の反復を行う途中にトリガーが発生する場合、その時点で各実行ブロックごとに遂行回数が変わって、発生するカレンシーの問題を防止することができる。
【0059】
一方、本発明の実施形態は、コンピュータで読み取り可能な記録媒体にコンピュータで読み取り可能なコードとして具現しうる。コンピュータで読み取り可能な記録媒体は、コンピュータシステムによって読み取れるデータが保存されるあらゆる種類の記録装置を含む。
【0060】
コンピュータで読み取り可能な記録媒体の例としては、ROM、RAM、CD−ROM、磁気テープ、フロッピー(登録商標)ディスク、光データ保存装置などがあり、またキャリアウェーブ(例えば、インターネットを介した伝送)の形態で具現することを含む。また、コンピュータで読み取り可能な記録媒体は、ネットワークで連結されたコンピュータシステムに分散されて、分散方式でコンピュータで読み取り可能なコードとして保存されて実行可能である。そして、本発明を具現するための機能的な(functional)プログラム、コード及びコードセグメントは、本発明が属する技術分野のプログラマーによって容易に推論されうる。
【0061】
当業者なら、本発明が、その技術的思想や必須的な特徴を変更せずとも、他の具体的な形態で実施されることを理解できるであろう。したがって、前述した実施形態は、あらゆる面で例示的なものであり、限定的ではないということを理解しなければならない。本発明の範囲は、前記詳細な説明よりは後述する特許請求の範囲によって表われ、特許請求の範囲の意味及び範囲、そして、その均等概念から導出されるあらゆる変更または変形された形態が、本発明の範囲に含まれると理解されなければならない。
【産業上の利用可能性】
【0062】
本発明は、ソフトウェアパイプライン化されたプログラムのハードウェアデバッギング装置及び方法関連の技術分野に適用可能である。
【符号の説明】
【0063】
100 ハードウェアデバッギング装置
110 プレディケート設定部
120 プロセッサ再遂行部
130 プレディケート早期生成部
200 プロセッサ
210 レジスタファイル
220 メモリコントローラ