JP5602599B2 - ループ検知装置、ループ検知方法及びループ検知プログラム - Google Patents
ループ検知装置、ループ検知方法及びループ検知プログラム Download PDFInfo
- Publication number
- JP5602599B2 JP5602599B2 JP2010266642A JP2010266642A JP5602599B2 JP 5602599 B2 JP5602599 B2 JP 5602599B2 JP 2010266642 A JP2010266642 A JP 2010266642A JP 2010266642 A JP2010266642 A JP 2010266642A JP 5602599 B2 JP5602599 B2 JP 5602599B2
- Authority
- JP
- Japan
- Prior art keywords
- unit
- loop
- call stack
- stack
- instruction
- 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 OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/28—Error detection; Error correction; Monitoring by checking the correct order of processing
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
- G06F9/325—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop counter
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Prevention of errors by analysis, debugging or testing of software
- G06F11/362—Debugging of software
- G06F11/3636—Debugging of software by tracing the execution of the program
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Quality & Reliability (AREA)
- Computer Hardware Design (AREA)
- Debugging And Monitoring (AREA)
- Devices For Executing Special Programs (AREA)
Description
記憶部105a/b(バッファ)からコールスタック情報を読み出し、ループ始点候補の命令inst[s]の実行時におけるコールスタックと、末尾の命令inst[n]の実行時におけるコールスタックとを比較する。本実施例では、記憶部105a/b(バッファ)に記憶されるコールスタック情報は、各命令inst[i]の実行時におけるコールスタックを構成する各スタックフレーム内のリターンアドレスである。コールスタック比較部220による比較結果は、始点候補の位置情報sと共に、判定結果出力部240へ渡される。
k=min(k1、k2) ―(1)
但し、m= min0≦i≦ncallStack[i].depth ―(2)
k1= callStack[s].depth − m ―(3)
k2= callStack[n].depth − m ―(4)
現在の処理対処の命令がまだn番目の命令でない場合(ステップ715:NO)、処理はステップ720へ進み、コールスタック構築部230は、現在の処理対象の命令inst[i]の命令の種類を判定する。命令の種類が関数の呼び出し命令である場合、処理はステップ725へ進み、コールスタック構築部230は、リンクリストのノードを新たに生成する。そしてコールスタック構築部230は、新規に生成したノードのaddressフィールドに、呼び出し命令である現在の処理対象の命令inst[i]のプログラムアドレス順での次の命令のアドレス(リターンアドレス)を設定し、parentフィールドに現在の処理対象ノードPを設定する。その後コールスタック構築部230は、現在の処理対象ノードPを、ステップ725において新規に生成したノードで更新する(ステップ730)。
Claims (11)
- コンピュータの計算処理により、プログラムにおける各単位処理のうち連続して実行された単位処理の列がループであるか否かを判定するループ検知方法であって、前記コンピュータが、
前記コンピュータの記憶部から前記単位処理の列についてアドレス情報を読み出して、前記単位処理の列内のループ始点候補の単位処理と末尾の単位処理の各々のアドレスを比較するステップと、
前記コンピュータの記憶部から前記単位処理の列についてコールスタック情報を読み出して、前記ループ始点候補の単位処理の実行時におけるコールスタックと、前記末尾の単位処理の実行時におけるコールスタックを比較するステップと、
前記アドレス及び前記コールスタックの各比較結果が一致であることを条件に、前記単位処理の列がループをなすとの判定結果を出力するステップと、
を含み、
前記コールスタックの比較は、前記コールスタックを構成する各スタックフレーム内のリターンアドレスの比較であり、
前記各スタックフレーム内のリターンアドレスの比較は、最後に積まれたスタックフレームからk番目(kは所定の正の整数)のスタックフレームまでの各リターンアドレスの比較であって、
前記単位処理の列内の各単位処理実行時のコールスタック内において最も浅いコールスタックの深さをm、前記ループ始点候補の単位処理の実行時におけるコールスタックの深さをk 1 、及び前記末尾の単位処理の実行時におけるコールスタックの深さをk 2 とした場合に、前記所定の正の整数kは、k 1 からmを差し引いた値と、k 2 からmを差し引いた値のうち小さい方の値として算出される、ループ検知方法。 - 前記コンピュータが、前記コンピュータの記憶部から前記単位処理の列について単位処理の種類情報及びアドレス情報を読み出して、前記ループ始点候補の単位処理の実行時におけるコールスタックと、前記末尾の単位処理の実行時におけるコールスタックとを構築し、前記コールスタック情報として前記記憶部に記憶するステップを更に含む、請求項1に記載のループ検知方法。
- 前記単位処理の種類情報は、前記単位処理が、呼び出し側の単位処理、呼び出され側の単位処理、及びそれ以外のいずれであるかを示す情報である、請求項2に記載のループ検知方法。
- 各コールスタックの構築は、前記単位処理の列について単位処理の種類情報及びアドレス情報を参照して、枝分かれしたリンクリストであって、該リンクリストの各ノードが、
スタックフレームを表し、かつ、該スタックフレームのリターンアドレスと該スタックフレームの1つ前のスタックフレームを表すノードへの参照(リンク)とを記録するデータフィールドを有する、前記リンクリストを作成するステップとを含み、前記単位処理の列内の任意の単位処理の実行時のコールスタックは、該任意の単位処理に対応するスタックフレームを表すノードを出発点として前記参照に基づいて1つ前のスタックフレームのノードを順次辿っていき、辿った各ノードのリターンアドレスを繋げることにより構築される、請求項3に記載のループ検知方法。 - 前記単位処理は、1つの命令、基本ブロック、又は分岐命令である、請求項1に記載のループ検知方法。
- 前記コンピュータが、前記単位処理の列内の各単位処理を前記ループ始点候補の単位処理として順次決定し、該決定ごとに各ステップを繰り返し実行するステップを更に含む、請求項1に記載のループ検知方法。
- 前記コンピュータが、単位処理ごとに実行回数をカウントするステップと、前記実行回数が所定の値に達することを応答して、前記コンピュータの記憶部への前記単位処理の列の記録を開始するステップと、前記単位処理の列がループをなすとの判定の出力に応答して該判定に基づいて前記単位処理の列のトレースを生成し、最適化してコンパイルするステップとを更に実行する、請求項1に記載のループ検知方法。
- コンピュータに、請求項1〜7のいずれか1項に記載の方法の各ステップを実行させるループ検知プログラム。
- プログラムにおける各単位処理のうち連続して実行された単位処理の列がループをなすか否かを判定するループ検知装置であって、
前記単位処理の列についてアドレス情報及びコールスタック情報を記憶する記憶部と、
前記記憶部から前記単位処理の列についてアドレス情報を読み出して、前記単位処理の列内のループ始点候補の単位処理と末尾の単位処理の各々のアドレスを比較するアドレス比較部と、
前記記憶部から前記単位処理の列についてコールスタック情報を読み出して、前記ループ始点候補の単位処理の実行時におけるコールスタックと、前記末尾の単位処理の実行時におけるコールスタックを比較するコールスタック比較部と、
前記アドレス及び前記コールスタックの各比較結果が一致であることを条件に、前記単位処理の列がループをなすとの判定結果を出力する出力部と、
を含み、
前記コールスタック比較部は、前記コールスタックの比較は、前記コールスタックを構成する各スタックフレーム内のリターンアドレスの比較を、最後に積まれたスタックフレームからk番目(kは所定の正の整数)のスタックフレームまでの各リターンアドレスの比較により実行し、
前記単位処理の列内の各単位処理実行時のコールスタック内において最も浅いコールスタックの深さをm、前記ループ始点候補の単位処理の実行時におけるコールスタックの深さをk 1 、及び前記末尾の単位処理の実行時におけるコールスタックの深さをk 2 とした場合に、前記所定の正の整数kは、k 1 からmを差し引いた値と、k 2 からmを差し引いた値のうち小さい方の値として算出する、
ループ検知装置。 - プログラムにおける各単位処理のうち連続して実行された単位処理の列がループをなすか否かを判定するループ検知装置であって、
前記単位処理の列の各単位処理についてアドレス情報及び該単位処理の種類情報を記憶する記憶部と、
前記記憶部から前記単位処理の列についてアドレス情報を読み出して、前記単位処理の列内のループ始点候補の単位処理と末尾の単位処理の各々のアドレスを比較するアドレス比較部と、
前記記憶部から前記単位処理の種類情報及び前記アドレス情報を読み出して、前記ループ始点候補の単位処理の実行時におけるコールスタックと、前記末尾の単位処理の実行時におけるコールスタックとを構築する、コールスタック構築部と、
前記ループ始点候補の単位処理の実行時におけるコールスタックと、前記末尾の単位処理の実行時におけるコールスタックを比較するコールスタック比較部と、
前記アドレス及び前記コールスタックの各比較結果が一致であることを条件に、前記単位処理の列がループをなすとの判定結果を出力する出力部と、
を含み、
前記コールスタック比較部は、前記コールスタックの比較は、前記コールスタックを構成する各スタックフレーム内のリターンアドレスの比較を、最後に積まれたスタックフレームからk番目(kは所定の正の整数)のスタックフレームまでの各リターンアドレスの比較により実行し、
前記単位処理の列内の各単位処理実行時のコールスタック内において最も浅いコールスタックの深さをm、前記ループ始点候補の単位処理の実行時におけるコールスタックの深さをk 1 、及び前記末尾の単位処理の実行時におけるコールスタックの深さをk 2 とした場合に、前記所定の正の整数kは、k 1 からmを差し引いた値と、k 2 からmを差し引いた値のうち小さい方の値として算出する、
ループ検知装置。 - 前記コールスタックの構築部は、前記単位処理の列について単位処理の種類情報及びアドレス情報を参照して、枝分かれしたリンクリストであって、該リンクリストの各レコードが、スタックフレームを表し、かつ、リターンアドレスと1つ前のスタックフレームを表すレコードへの参照(リンク)とを記録する、前記リンクリストを作成し、求めるべき単位処理の実行時のコールスタックを、該単位処理に対応するスタックフレームを表すレコードを出発点として前記参照に基づいて1つ前のスタックフレームのレコードを順次辿っていき、各レコードのリターンアドレスを繋げることにより構築する、請求項10に記載のループ検知装置。
Priority Applications (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2010266642A JP5602599B2 (ja) | 2010-11-30 | 2010-11-30 | ループ検知装置、ループ検知方法及びループ検知プログラム |
| US13/301,099 US8856762B2 (en) | 2010-11-30 | 2011-11-21 | Loop detection apparatus, loop detection method, and loop detection program |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2010266642A JP5602599B2 (ja) | 2010-11-30 | 2010-11-30 | ループ検知装置、ループ検知方法及びループ検知プログラム |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JP2012118678A JP2012118678A (ja) | 2012-06-21 |
| JP5602599B2 true JP5602599B2 (ja) | 2014-10-08 |
Family
ID=46127430
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2010266642A Expired - Fee Related JP5602599B2 (ja) | 2010-11-30 | 2010-11-30 | ループ検知装置、ループ検知方法及びループ検知プログラム |
Country Status (2)
| Country | Link |
|---|---|
| US (1) | US8856762B2 (ja) |
| JP (1) | JP5602599B2 (ja) |
Families Citing this family (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US8522222B2 (en) * | 2010-06-21 | 2013-08-27 | Microsoft Corporation | Tracing just-in-time compilation with pointers to local variables |
| CN105677297B (zh) * | 2014-11-18 | 2018-05-04 | 龙芯中科技术有限公司 | 套锁实现方法及装置 |
| US11163592B2 (en) | 2020-01-10 | 2021-11-02 | International Business Machines Corporation | Generation of benchmarks of applications based on performance traces |
| US11138094B2 (en) * | 2020-01-10 | 2021-10-05 | International Business Machines Corporation | Creation of minimal working examples and environments for troubleshooting code issues |
Family Cites Families (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH03296148A (ja) * | 1990-04-13 | 1991-12-26 | Matsushita Electric Ind Co Ltd | ソフトウェアのテスト網羅性検出装置 |
| JP3362972B2 (ja) * | 1994-08-30 | 2003-01-07 | 松下電器産業株式会社 | ソフトウェアシミュレータ |
| US6751789B1 (en) * | 1997-12-12 | 2004-06-15 | International Business Machines Corporation | Method and system for periodic trace sampling for real-time generation of segments of call stack trees augmented with call stack position determination |
-
2010
- 2010-11-30 JP JP2010266642A patent/JP5602599B2/ja not_active Expired - Fee Related
-
2011
- 2011-11-21 US US13/301,099 patent/US8856762B2/en active Active
Also Published As
| Publication number | Publication date |
|---|---|
| US20120137111A1 (en) | 2012-05-31 |
| JP2012118678A (ja) | 2012-06-21 |
| US8856762B2 (en) | 2014-10-07 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN112074817B (zh) | 具有跨级别跟踪映射的执行控制 | |
| JP5473768B2 (ja) | マルチパス動的プロファイリングのためのコンピュータに実行させる方法、システム及びコンピュータ・プログラム | |
| US20110106776A1 (en) | Incremental implementation of undo/redo support in legacy applications | |
| US20130111451A1 (en) | Program Log Record Optimization | |
| TWI482094B (zh) | 在程式碼轉換期間異常的精確處理之方法與裝置 | |
| US20130212565A1 (en) | Application analysis method, analysis system and recording medium | |
| US20110145799A1 (en) | Path-sensitive dataflow analysis including path refinement | |
| JP5602599B2 (ja) | ループ検知装置、ループ検知方法及びループ検知プログラム | |
| US20150220315A1 (en) | Method and apparatus for compiling | |
| Sinz et al. | A Precise Memory Model for {Low-Level} Bounded Model Checking | |
| CN107678748A (zh) | 一种源代码文件编译方法及装置 | |
| CN115906092B (zh) | 一种跨合约检测智能合约漏洞的符号执行方法 | |
| US20100250564A1 (en) | Translating a comprehension into code for execution on a single instruction, multiple data (simd) execution | |
| US20130262842A1 (en) | Code generation method and information processing apparatus | |
| Donaldson et al. | Automatic analysis of scratch-pad memory code for heterogeneous multicore processors | |
| US8433697B2 (en) | Flexible metadata composition | |
| CN105653271B (zh) | 行为树的静态解析、执行以及优化方法和装置 | |
| Fazekas et al. | Certifying Incremental SAT Solving. | |
| US20160357655A1 (en) | Performance information generating method, information processing apparatus and computer-readable storage medium storing performance information generation program | |
| CN114327497A (zh) | 一种代码处理方法、装置及设备 | |
| CN114968247B (zh) | 预编译方法、设备和计算机程序产品 | |
| US20120096247A1 (en) | Reconfigurable processor and method for processing loop having memory dependency | |
| US20090064092A1 (en) | Visual programming language optimization | |
| JP2018124901A (ja) | プログラム分析装置、プログラム分析方法及びプログラム分析プログラム | |
| KR101910934B1 (ko) | 루프의 프롤로그 또는 에필로그의 비유효 연산을 처리하는 장치 및 방법 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20130903 |
|
| A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20140418 |
|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20140513 |
|
| RD12 | Notification of acceptance of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7432 Effective date: 20140603 |
|
| A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20140604 |
|
| A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20140704 |
|
| 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: 20140729 |
|
| RD14 | Notification of resignation of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7434 Effective date: 20140729 |
|
| A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20140820 |
|
| R150 | Certificate of patent or registration of utility model |
Ref document number: 5602599 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
| LAPS | Cancellation because of no payment of annual fees |