|Publication number||US7162713 B2|
|Application number||US 09/805,423|
|Publication date||Jan 9, 2007|
|Filing date||Mar 13, 2001|
|Priority date||Mar 14, 2000|
|Also published as||US20010056571, WO2001069391A2, WO2001069391A3|
|Publication number||09805423, 805423, US 7162713 B2, US 7162713B2, US-B2-7162713, US7162713 B2, US7162713B2|
|Inventors||Thomas J. Pennello|
|Original Assignee||Arc International|
|Export Citation||BiBTeX, EndNote, RefMan|
|Patent Citations (26), Non-Patent Citations (3), Referenced by (10), Classifications (11), Legal Events (5)|
|External Links: USPTO, USPTO Assignment, Espacenet|
This application claims priority to U.S. Provisional Patent Application Ser. No. 60/189,192 filed Mar. 14, 2000, entitled “Difference Engine Method And Apparatus”, the disclosure of which is incorporated herein in its entirety.
A portion of the disclosure of this patent document contains material which is subject to copyright protection. The copyright owner has no objection to the facsimile reproduction by anyone of the patent document or the patent disclosure, as it appears in the Patent and Trademark Office patent files or records, but otherwise reserves all copyright rights whatsoever.
1. Field of the Invention
The present invention relates to the field of methods of manipulating data, and specifically to computer programs useful for the manipulation and analysis of data strings associated with one or more digital processors or peripheral devices, such as during processor debug analysis.
2. Description of Related Technology
RISC (or reduced instruction set computer) processors are well known in the computing arts. RISC processors generally have the fundamental characteristic of utilizing a substantially reduced instruction set as compared to non-RISC (commonly known as “CISC”) processors. Typically, RISC processor machine instructions are not all micro-coded, but rather may be executed immediately without decoding, thereby affording significant economies in terms of processing speed. This “streamlined” instruction handling capability furthermore allows greater simplicity in the design of the processor (as compared to non-RISC devices), thereby allowing smaller silicon and reduced cost of fabrication.
RISC processors are also typically characterized by (i) load/store memory architecture (i.e., only the load and store instructions have access to memory; other instructions operate via internal registers within the processor); (ii) unity of processor and compiler; and (iii) pipelining.
In addition to the single RISC processor core described above, such cores may be used in conjunction with the same or other types of processor cores, whether as physically discrete components or as functions within a single die. For example, a plurality of similar or identical microprocessor cores may be used to form a multi-processor architecture adapted for parallel processing of data streams. Alternatively, a microprocessor core may be used with a digital signal processor (DSP) core on the same die, the DSP core performing high sampling rate operations requiring its unique architecture (such as FFT calculations or speech processing).
In such multi-core environments (and in fact in other types of configurations), situations frequently arise wherein data may need to be converted from one format to another, or patterns within the data recognized and analyzed to identify useful functional relationships based thereon, or identify problems within the cores. For example, the comparison of the respective processor core stack traces for a debugging program has significant utility for such data manipulation and analysis. Similarly, the designer/programmer may wish to examine state information from the various cores during programming or design synthesis.
One example of the foregoing problem is graphically illustrated in Table 1 below:
TABLE 1 Input 1 Input 2 Input 3 Input 4 A A A S R C C T B B B U C C V D D D B B B
Given the four input strings (i.e., Inputs 1–4) of Table 1, it might be desired to have the output formatted as follows:
When such formatting and analysis of the N inputs is optimized, the analysis/debug process is made more efficient as a whole, and more useful information can be readily extracted. Such is the case in debugging multiple parallel processor cores, such as the aforementioned RISC processors. Consider the example of a debugger, wherein the same program is run on two different processor cores simultaneously, and where the output of both programs is expected to be the same:
Note that the output of both processors (identified as “” and “” in the code above) must be visually inspected by the programmer to ensure that the two programs have arrived at the same function together.
Furthermore, in the case where such formatting or pattern recognition is required in a repetitive or iterative fashion, inefficiencies such as the foregoing visual inspection requirement may be multiplied many times over.
Based on the foregoing, there is a need for an improved method and apparatus for formatting such data from a plurality of outputs from one or more threads, and analyzing and recognizing patterns therein. Ideally, such method and apparatus would be adapted to format/analyze a plurality (“N”) of different input sources, confirm the presence of similarities in the data associated with each source, and automatically identify the presence and location of differences therein. Such improved method would also be able to be reduced to an algorithmic or computer program representation for ready use in a variety of different hardware environments.
The present invention satisfies the aforementioned needs by providing an improved method and apparatus for analyzing data strings, particularly in the multi-processor environment.
In a first aspect of the invention, an improved method for analyzing data comprising one or more strings or threads is disclosed. The method generally comprises initializing the data by building a symbol array; and finding differences within the data by analyzing various relationships within the data strings, such as the existence of unique strings.
In one exemplary embodiment, the method of initializing comprises creating an empty symbol table; creating a symbol array with at least one element for each input string; for each input string, determining whether the string is in the symbol table; and if the string is in the symbol table, then obtaining the symbol number of the string from the symbol table.
In one exemplary embodiment, the method of finding differences within the data comprises providing a plurality of inputs; processing inputs which do not share any strings with other inputs (i.e., “unique” inputs); evaluating the excluded set; identifying groups of contiguous strings which are identical in all inputs (i.e., finding “shared chunks”); identifying groups that are in the same order in all of the inputs; identifying inputs with strings before the first group; and finding differences among the subset of inputs comprising such strings before the first group.
In one exemplary embodiment, the method of processing unique inputs comprises clearing the symbol counts array; for each string in each input, incrementing the symbol count; for each string in each input, determining the symbol count for that string; and for each input, adding the input to the excluded set.
In one exemplary embodiment, the method of finding “shared chunks” comprises creating a list of anchors containing strings that occur at a predetermined frequency; for each input of each anchor, generating a new group and associating each anchor string with that group; for each input of each anchor, associating each string which precedes the group and which is identical in all inputs with the new group; and for each input of each anchor, associating each string which follows the group and which is identical in all inputs with the new group.
In a second aspect of the invention, an improved computer program useful for analyzing and formatting data obtained from a plurality of sources and embodying the aforementioned method(s) is disclosed. In one exemplary embodiment, the computer program comprises an object code representation stored on the magnetic storage device of a microcomputer, and adapted to run on the central processing unit thereof. The computer program further comprises an interactive, menu-driven graphical user interface (GUI), thereby facilitating ease of use.
In a third aspect of the invention, an improved apparatus for running the aforementioned computer program used for analyzing data strings associated with the design and/or operation of processors is disclosed. In one exemplary embodiment, the system comprises a stand-alone microcomputer system having a display, central processing unit, data storage device(s), and input device. The system is adapted to take a plurality of data inputs from various external processor devices and format and analyze the inputs in order to confirm similarities and identify differences therein, and display the results of such analysis to the user (programmer).
In a fourth aspect of the invention, an improved method of designing a processing device adapted to run at least one software process thereon is disclosed. The method generally comprises generating a design for the processing device; running at least a portion of the software process a first time; obtaining a first output from the running process; modifying the design; running the software process a second time; obtaining a second output from the running process; and identifying differences within the first and second outputs.
In a fifth aspect of the invention, an improved method of evaluating the operation of a plurality of software processes running on respective ones of a plurality of digital processors is disclosed. The method generally comprises generating a first data string using a first of the plurality of software processes; generating a second data string using a second of the plurality of software processes; inputting the first and second data strings into a debug software process; analyzing the first and second data strings using the debug process; and evaluating the operation of the processes based at least in part on the act of analyzing. In one exemplary embodiment, the debug process is run on a microcomputer, and is adapted to confirm matching portions of the applications running on the digital processors, and identifying differing portions to alter the programmer to possible bugs in the design(s).
Reference is now made to the drawings wherein like numerals refer to like parts throughout.
As used herein, the term “processor” is meant to include any integrated circuit or other electronic device capable of performing an operation on at least one instruction word including, without limitation, reduced instruction set core (RISC) processors such as the ARC™ user-configurable core manufactured by the Assignee hereof, central processing units (CPUs), and digital signal processors (DSPs). The hardware of such devices may be integrated onto a single piece of silicon (“die”), or distributed among two or more dies. Furthermore, various functional aspects of the processor may be implemented solely as software or firmware associated with the processor.
As used herein the term “string” refers to the fundamental unit of input for purposes of comparison; e.g., a sequence of ASCII characters of arbitrary or fixed length.
As used herein the term “group” refers to a contiguous sequence of strings containing at least one anchor and for which the entire sequence has been determined to exist in all inputs currently under consideration.
As used herein the term “chunk” refers to a contiguous sequence of strings.
Description of Method
Referring now to
As illustrated in
Referring now to
In step 306, the excluded set is examined to determine if it is empty. If not empty, the differences are identified using the “included” set as inputs per step 308. As used herein, the term “included” and “excluded” refer to data or elements which meet a predetermined criterion (and are hence “included” in a set of elements also meeting that criteria), or do not meet the predetermined criteria (and are hence “excluded”). In the present example, the criterion is whether the input stream has any members that match with other input streams, although it will be recognized that other criteria may be specified in place of or in addition to the aforementioned criterion. For each element of the excluded set (step 310), the element is printed per step 312. When this process is completed, the program returns per step 313.
If the excluded set is empty per step 306, groups of contiguous strings which are identical in all inputs are identified per step 314. These are referred to as “shared chunks;” shared chunks are described further with respect to
In step 318, it is determined whether any groups exist. If not, a line-by-line comparison of inputs is performed per step 320; non-group comparison is described further with respect to
If groups do exist per step 318, it is next determined if any of the inputs have strings before the first group (step 322); if so, then the differences among that subset of the inputs which consists of the strings which precede the first group in each input is found per step 324. For each group (step 326), the contents of the group are then printed per step 328. In step 330, the differences among that subset of the inputs which consists of the strings between the present group and the next group (or end of input) are determined. After these steps 328, 330 have been performed for each group, the method 300 returns per step 331.
Referring now to
For each string (step 414) in each input (step 412), the symbol count is checked per step 416. If the count is greater than a predetermined number (1 in the present embodiment), the input is added to the excluded set per step 418. Each input is then added to the included set in step 420, until all inputs are added and the method return per step 421.
Referring now to
As illustrated in
Referring again to
Referring now to
Referring now to
Referring now to
It is noted that the use of a symbol table and sequentially allocated symbol numbers in conjunction with the foregoing method is not required, but it does provide a significant performance improvement during the comparison phases. Specifically, such performance improvements may be obtained through the use of a symbol table with sequentially allocated symbol identifiers (IDs), as well as provisions for maintaining information about which inputs contain a given line and frequency of occurrence thereof. In one embodiment, the method of implementing the aforementioned symbol table comprises first scanning through each input to build the table, and then replacing each input line with its associated symbol. The various line comparisons are therefore reduced to simple comparisons of the symbol's ID. Other methods of producing a symbol table may also be substituted however.
Furthermore, it is noted that by counting how often each symbol occurs, and in which inputs, the need to actually scan through the individual inputs looking for matches may be reduced or even eliminated.
It will also be recognized that the methodology previously described herein with respect to
// Exclude some because they are totally unique. Run the
// algorithm on the subset, and at the end, print the unique ones.
// Fashion arguments that represent the subset of items.
for (int i=0; i<input_count; i++)
if (!exclude_set.contains(i)) subset_ranges.add(infos[i]);
if (subset_ranges.count( )) each_output(yield,subset_ranges);
for (int i=0; i<input_count; i++)
. . .
Furthermore, it will be recognized that due to the recursive nature of the invention, the terms “all inputs” and “all strings” generally refer only to those inputs or strings under analysis or consideration during a given recursion.
Appendix I hereto provides exemplary code for the functionality illustrated in
Example of Method
The following example illustrates the foregoing methodology in detail, in the context of the four data inputs of Table 1 above.
TABLE 2 Input 1 Input 2 Input 3 A A A R C C B B B C C D D D B B B
Note that strings A and D were identified as “unique.”
Display: [1–3] A and recur, with the new inputs being:
Accordingly, the scope of the disclosed invention should be determined by the claims appended hereto, without respect to specific embodiments or limitations presented within the foregoing discussion.
There are many applications where it is useful or even necessary to determine the differences among multiple output streams. Quickly locating the areas of difference and readily identifying which streams differ and which agree at each point of difference can greatly speed the development and debugging processes. In some cases, the goal is to modify the process or device which generates the output being analyzed; the analysis verifies that the output remains within the expected and desired parameters. In other cases, the modifications are expected to change the outputs in ways that indicate some improvement in the generating mechanism.
As an example of the foregoing, the present invention may be applied to compare outputs of multiple design simulations having varying parameters in order to assess the relative merits of each design.
Another application of the invention is for debugging multi-processor hardware. Specifically, in one aspect, the same task can be executed on each processor with the outputs compared by this method. Potential hardware and software integration problems may be discovered and located by examining any areas of difference among the outputs. Similarly, when debugging simulated processor functions in a multi-processor environment, the method of the present invention may be used to compare the outputs of each of the simultaneous processes. Any differences readily identify which processes differ and in what areas of the output.
When testing a processor or ASIC design and comparing outputs from multiple simulation types (gate, switch, logic, etc.), the present invention may be used to identify differences among the outputs that are indicative of areas of the design which may require refinement or verification.
As yet another application, the present invention may be used to compare multiple instances of a netlist for different optimizations of a hardware design (e.g., through a synthesizer).
It is also noted that certain high-reliability systems (e.g., early design of the primary on-board computer systems in the space shuttle) rely upon concurrent computation with a comparison of the results and some sort of “voting” scheme to automatically determine when a processor may be producing unreliable results. Such high-reliability systems were used, for example, in the early design of the primary on-board computer systems in the space shuttle. These systems often use different algorithms in some of the concurrent processes so that any flaw in the basic algorithm is likely to be caught during the voting stage. During the development and debugging of such systems, the methodology of the present invention advantageously provides a mechanism for readily highlighting any differences in the outputs among the various of such concurrent processes. Hence, real-time analysis of the outputs of such systems may be accomplished.
As yet another application of the invention, divergent modifications to a single source code base may be compared. Specifically, the methodology of the invention will facilitate identification of the areas where each modified source differs from the original base (and from the other modifications), as well as the areas where the modifications affected the same portions of code. This functionality is useful for either choosing between the various modification sets, or re-integrating them into a single merged source base.
It will also be recognized that the methodology of the present invention may be used when migrating a given program from one processor to another. For example, a programmer or designer desiring to “move” an application from one core to another can use the debugger disclosed herein to debug the same program on both processors at the same time. Furthermore, the debugger may be used to display data at different points in each program which should be identical to that in the other program. This identical relationship (or lack thereof) can be automatically confirmed using the methodology of the present invention.
Apparatus for Implementing Methodology
Referring now to
A computer program for implementing the aforementioned methods of data analysis is now described. In one exemplary embodiment, the computer program comprises an object (“machine”) code representation of a C++source code listing implementing the methodology of
In a second embodiment, the computer program of the invention comprises an assembly language/micro-coded instruction set disposed within the embedded storage device, i.e. program memory, of a digital signal processor (DSP) or microprocessor. While the above detailed description has shown, described, and pointed out novel features of the invention as applied to various embodiments, it will be understood that various omissions, substitutions, and changes in the form and details of the device or process illustrated may be made by those skilled in the art without departing from the invention. The foregoing description is of the best mode presently contemplated of carrying out the invention. This description is in no way meant to be limiting, but rather should be taken as illustrative of the general principles of the invention. The scope of the invention should be determined with reference to the claims.
|Cited Patent||Filing date||Publication date||Applicant||Title|
|US4285035||Jan 2, 1979||Aug 18, 1981||Honeywell Information Systems Inc.||Apparatus and method for rewrite data insertion in a three descriptor instruction|
|US4845610 *||Mar 13, 1987||Jul 4, 1989||Ford Aerospace & Communications Corporation||Target recognition using string-to-string matching|
|US4899128 *||Dec 11, 1985||Feb 6, 1990||Yeda Research And Development Co., Ltd.||Method and apparatus for comparing strings using hash values|
|US5060147||Aug 22, 1989||Oct 22, 1991||General Electric Company||String length determination on a distributed processing system|
|US5307424||Dec 12, 1990||Apr 26, 1994||Eberhard Kuehl||Character recognition system|
|US5369760||Mar 5, 1993||Nov 29, 1994||Kabushiki Kaisha Toshiba||Data processing system|
|US5379036||Apr 1, 1992||Jan 3, 1995||Storer; James A.||Method and apparatus for data compression|
|US5465374||Jan 12, 1993||Nov 7, 1995||International Business Machines Corporation||Processor for processing data string by byte-by-byte|
|US5511159||May 13, 1994||Apr 23, 1996||At&T Corp.||Method of identifying parameterized matches in a string|
|US5584011||Jan 13, 1995||Dec 10, 1996||International Business Machines Corporation||Multiprocessor system with parallel execution of data|
|US5604495||Apr 21, 1995||Feb 18, 1997||Seta Co., Ltd.||Data compression method and system|
|US5604899||Jun 28, 1993||Feb 18, 1997||Financial Systems Technology Pty. Ltd.||Data relationships processor with unlimited expansion capability|
|US5608887||Jun 2, 1995||Mar 4, 1997||International Business Machines Corporation||Method of processing data strings|
|US5627748||May 14, 1993||May 6, 1997||Lucent Technologies Inc.||Method of identifying pattern matches in parameterized strings and square matrices|
|US5640551||Apr 14, 1993||Jun 17, 1997||Apple Computer, Inc.||Efficient high speed trie search process|
|US5673387 *||Aug 12, 1996||Sep 30, 1997||Lucent Technologies Inc.||System and method for selecting test units to be re-run in software regression testing|
|US5675711||May 13, 1994||Oct 7, 1997||International Business Machines Corporation||Adaptive statistical regression and classification of data strings, with application to the generic detection of computer viruses|
|US5787443||Nov 14, 1995||Jul 28, 1998||Cooperative Computing, Inc.||Method for determining database accuracy|
|US5832520||Nov 22, 1996||Nov 3, 1998||Miller, Call, Plauck And Miller||Automatic file differencing and updating system|
|US5848264 *||Oct 25, 1996||Dec 8, 1998||S3 Incorporated||Debug and video queue for multi-processor chip|
|US5864858||Jan 23, 1998||Jan 26, 1999||Shigeru Matsumoto||Method for data retrieval in a data-string set by extracting related link-information from a parent node|
|US6295524 *||Oct 29, 1996||Sep 25, 2001||Nec Research Institute, Inc.||Learning edit distance costs|
|US6496792 *||Jul 6, 1998||Dec 17, 2002||Intel Corporation||Transaction checking for system architecture validation|
|US6606735 *||Oct 14, 1999||Aug 12, 2003||Synopsys, Inc.||Method and system for using error and filter layers in each DRC rule|
|JPH04149747A||Title not available|
|WO1992014202A1||Feb 3, 1992||Aug 20, 1992||Digital Equipment Corporation||Method for testing and debugging computer programs|
|1||*||Aho et al., "Compilers Principles, Techniques, and Tools"; Addison-Wesley; Bell Telephone Labotatories, Inc., 1986; pp. 429-440.|
|2||Douglis, Fred, et al., (Apr. 14, 1997), "The AT&T Internet Difference Engine: Tracking and Viewing Changes on the Web," AT&T Labs, Research Technical Report #97.23.1-XP002135690.|
|3||*||Kernighan et al., "The Practice of Programming"; Addison-Wesley; Lucent Technologies, 1999; pp. 149-151.|
|Citing Patent||Filing date||Publication date||Applicant||Title|
|US7577816||Aug 18, 2003||Aug 18, 2009||Cray Inc.||Remote translation mechanism for a multinode system|
|US7735088 *||Aug 18, 2003||Jun 8, 2010||Cray Inc.||Scheduling synchronization of programs running as streams on multiple processors|
|US7743223||Jun 22, 2010||Cray Inc.||Decoupling of write address from its associated write data in a store to a shared memory in a multiprocessor system|
|US7793073||Sep 7, 2010||Cray Inc.||Method and apparatus for indirectly addressed vector load-add-store across multi-processors|
|US8307194||Nov 6, 2012||Cray Inc.||Relaxed memory consistency model|
|US8645918 *||Mar 15, 2005||Feb 4, 2014||Dspace Digital Signal Processing And Control Engineering Gmbh||Influencing device for control apparatus|
|US20050044128 *||Aug 18, 2003||Feb 24, 2005||Scott Steven L.||Decoupled store address and data in a multiprocessor system|
|US20050044340 *||Aug 18, 2003||Feb 24, 2005||Kitrick Sheets||Remote translation mechanism for a multinode system|
|US20070283127 *||Jun 29, 2007||Dec 6, 2007||Cray Inc.||Method and apparatus for indirectly addressed vector load-add-store across multi-processors|
|US20080065239 *||Mar 15, 2005||Mar 13, 2008||Robert Leinfellner||Influencing Device for Control Apparatus|
|U.S. Classification||717/124, 714/E11.212, 717/135, 717/131|
|International Classification||G06F7/02, G06F9/44, G06F11/36|
|Cooperative Classification||G06F11/3636, G06F7/02|
|European Classification||G06F11/36B5, G06F7/02|
|Jun 22, 2001||AS||Assignment|
Owner name: ARC CORES, INC., CALIFORNIA
Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:PENNELLO, THOMAS J.;LASHLEY, PATRICK MICHAEL;REEL/FRAME:011925/0618
Effective date: 20010607
|May 7, 2008||AS||Assignment|
Owner name: ARC INTERNATIONAL I.P., INC., UNITED KINGDOM
Free format text: CHANGE OF NAME;ASSIGNOR:ARC CORES, INC.;REEL/FRAME:020909/0916
Effective date: 20020208
|Jun 9, 2010||FPAY||Fee payment|
Year of fee payment: 4
|Oct 8, 2010||AS||Assignment|
Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:VIRAGE LOGIC CORPORATION;VL C.V.;ARC CORES LIMITED;AND OTHERS;REEL/FRAME:025105/0907
Effective date: 20100902
Owner name: SYNOPSYS, INC., CALIFORNIA
|Jun 11, 2014||FPAY||Fee payment|
Year of fee payment: 8