Apparatus to implement mesocode
Summary by NHIP
Processor branch stream encoding
The method examines branch instructions reaching a processor write-back stage to define streams of basic blocks. Each stream encodes sequences where only the final block executes a flow-changing branch, while others execute non-branching instructions, all stored in an intermediate code format with at least two alternatives.
Claim Score by NHIP
Abstract
In one embodiment, the invention provides a method for examining information about branch instructions. A method, comprising: examining information about branch instructions that reach a write-back stage of processing within a processor, defining a plurality of streams based on the examining, wherein each stream comprises a sequence of basic blocks in which only a last block in the sequence ends in a branch instruction, the execution of which causes program flow to branch, the remaining basic blocks in the stream each ending in a branch instruction, the execution of which does not cause program flow to branch.

Term
Term ended
Expired 1 January 2025, 1.7 years ago.
- Priority and filed
- Granted
- Expired
- Today
30 claims: 5 independent, 25 dependent
- 1Broadest claimClaim Score 64, broad(NHIP)A method, comprising:examining information about branch instructions that reach a write-back stage of processing within a processor;defining a plurality of streams based on the examining, wherein each stream comprises a sequence of basic blocks in which only a last block in the sequence ends in a branch instruction, the execution of which causes program flow to branch, the remaining basic blocks in the stream each ending in a branch instruction, the execution of which does not cause program flow to branch;and encoding each of the plurality of streams in an intermediate code format comprised of at least two alternative code formats.
- 9A processor, comprising:a mechanism to examine information about branch instructions that reach a write-back stage of processing within the processor;a mechanism to define a plurality of streams based on the examining, wherein each stream comprises a sequence of basic blocks in which only a last block in the sequence ends in a branch instruction, the execution of which causes program flow to branch, the remaining basic blocks in the stream each ending in a branch instruction, the execution of which does not cause program flow to branch;and a mechanism to encode each of the plurality of streams in an intermediate code format comprised of at least two alternative code formats.
- 17A system, comprising:a processor comprising a mechanism to examine information about branch instructions that reach a write-back stage of processing within the processor, a mechanism to define a plurality of streams based on the examining, wherein each stream comprises a sequence of basic blocks in which only a last block in the sequences ends in a branch instruction, the execution of which causes program flow to branch, the remaining basic blocks in a stream each ending in a branch instruction, the execution of which does not cause program flow to branch, and a mechanism to encode each of the plurality of streams in an intermediate code format comprised of at least two alternative code formats;and a memory coupled to the processor.
- 20A processor, comprising:a fetch/prefetch unit;a branch prediction unit to supply a branch target address of a predicted branch based on a current instruction pointer to the fetch/prefetch unit;a stream prediction unit to supply a stream target address of a predicted stream based on a current instruction pointer to the fetch/prefetch unit, wherein the predicted stream comprises a sequence of basic blocks in which only a last block in the sequence ends in a branch instruction, the execution of which causes program flow to branch, the remaining basic blocks in the stream each ending in a branch instruction, the execution of which does not cause program flow to branch;and a mechanism to encode the predicted stream in an intermediate code format comprised of at least two alternative code formats.
- 27A system, comprising:a processor comprising a fetch/prefetch unit, a branch prediction unit to supply a branch target address of a predicted branch based on a current instruction pointer to the fetch/prefetch unit, a stream prediction unit to supply a stream target address of a predicted stream based on a current instruction pointer to the fetch/prefetch unit, wherein the predicted stream comprises a sequence of basic blocks in which only a last block in the sequence ends in a branch instruction, the execution of which causes program flow to branch, the remaining basic blocks in the stream each ending in a branch instruction, the execution of which does not cause program flow to branch and a mechanism to encode the predicted stream in an intermediate code format comprised of at least two alternative code formats;and a memory coupled to the processor.
Independent claims5
81 paragraphs in 3 sections, as filed
0001This invention relates to the processing of instructions. In particular it relates to code optimization when processing instructions in a microprocessor.
BACKGROUND
0002Broadly, the function of a compiler is to compile a source program written in a high level language into a target program for a given instruction set architecture (ISA), which is understood by a machine in which the compiled program is executed.
0003In order to increase computational throughput, a compiler may perform transformations in order to optimize the speed at which the compiled program can be executed.
0004The output of the compiler, i.e., the compiled code will be referred to hereinafter as “macroinstructions.” This is in contrast to microinstructions, which refers to the machine implementation-specific internal representation of instructions for a given ISA. Generally, these microinstructions are not visible to a compiler. A given macroinstruction may have several microinstructions, each of which is machine implementation-specific.
0005Since a particular microinstruction will typically only execute correctly on a machine that understands the microinstruction, a natural limit to how much optimization a compiler does is imposed by the requirement that in general, the macroinstructions produced by a compiler should be able to execute on all machines that support a given ISA, regardless of what microinstructions correspond to the macroinstructions.
0006If the microinstructions corresponding to each macroinstruction in an ISA is known, a compiler may be able to optimize the code even further by producing a machine implementation-specific microinstructions.
0007However, in such a case, because the microinstructions are machine implementation-specific, the microinstructions will no longer operate on other machines that share the same ISA, but have different microinstructions corresponding to the macroinstructions in the ISA.
BRIEF DESCRIPTION OF THE DRAWINGS
0008<figref idref="DRAWINGS">FIG. 1</figref> schematically illustrates the conversion of a source program into an ISA format binary or macrocode comprising microinstructions in accordance with the prior art;
0009<figref idref="DRAWINGS">FIG. 2</figref> schematically illustrates the conversion of a source program into intermediate form code by a compiler, in accordance with one embodiment of the invention;
0010<figref idref="DRAWINGS">FIG. 3</figref> illustrates a program or a section of a program comprising blocks of macroinstructions.
0011<figref idref="DRAWINGS">FIG. 4</figref> illustrates one example of an alternative representation of ISA microinstructions for the macroinstructions of <figref idref="DRAWINGS">FIG. 3</figref> in accordance with one embodiment of the invention;
0012<figref idref="DRAWINGS">FIG. 5</figref> schematically illustrates how the mesocode may be used to decrease cache latency in one embodiment of the invention;
0013<figref idref="DRAWINGS">FIG. 6</figref> shows a schematic drawing of a computer system in accordance with one embodiment of the invention;
0014<figref idref="DRAWINGS">FIGS. 7 to 9</figref> schematically illustrate a pipeline implemented in the computer system of <figref idref="DRAWINGS">FIG. 6</figref>;
0015<figref idref="DRAWINGS">FIGS. 10-15</figref>, and <b>17</b>-<b>18</b>, illustrate a software technique for identifying streams of basic blocks for mesocode encoding;
0016<figref idref="DRAWINGS">FIG. 16</figref> shows one embodiment of a stream dictionary;
0017<figref idref="DRAWINGS">FIG. 19</figref> shows one embodiment of hardware that may be used to identify basic blocks for mesocode encoding;
0018<figref idref="DRAWINGS">FIGS. 20-21</figref> show examples of a stream dictionary generated by the hardware of <figref idref="DRAWINGS">FIG. 19</figref>;
0019<figref idref="DRAWINGS">FIGS. 22</figref>, <b>24</b>-<b>25</b> show flow diagrams of operations performed by the hardware of <figref idref="DRAWINGS">FIG. 19</figref>; and
0020<figref idref="DRAWINGS">FIG. 23</figref> shows an example of a stream predictor table created by the hardware of <figref idref="DRAWINGS">FIG. 19</figref>.
DETAILED DESCRIPTION
0021In the following description, for purposes of explanation, numerous specific details are set forth in order to provide a thorough understanding of the invention. It will be apparent, however, to one skilled in the art that the invention can be practiced without these specific details. In other instances, structures and devices are shown in block diagram form in order to avoid obscuring the invention.
0022Reference in this specification to “one embodiment” or “an embodiment” means that a particular feature, structure, or characteristic described in connection with the embodiment is included in at least one embodiment of the invention. The appearances of the phrase “in one embodiment” in various places in the specification are not necessarily all referring to the same embodiment, nor are separate or alternative embodiments mutually exclusive of other embodiments. Moreover, various features are described which may be exhibited by some embodiments and not by others. Similarly, various requirements are described which may be requirements for some embodiments but not other embodiments.
0023<figref idref="DRAWINGS">FIG. 1</figref> of the drawings illustrates the operation of a compiler <b>10</b> in accordance with the prior art. Referring to <figref idref="DRAWINGS">FIG. 1</figref>, it will be seen that the compiler <b>10</b> converts a source program <b>12</b> written in a high level language into macroinstructions <b>14</b> which are compatible with the ISA definition of a target machine on which the macroinstructions are to be executed. The macroinstructions <b>14</b> can, generally, execute on any machine that supports the ISA definition for which it was compiled.
0024In producing the macroinstructions <b>14</b>, the compiler <b>10</b> usually performs one or more code optimizations which allows the macroinstructions <b>14</b> to execute faster on the target machine.
0025In general, the macroinstructions <b>14</b> comprise complex instructions which are converted into simple instructions which are then executed on the target machine. These simple instructions are known as microinstructions. Microinstructions are highly ISA implementation-specific. Thus, a given instruction written for one ISA translates into different microinstructions on different machine implementations of the ISA.
0026Since macroinstructions <b>14</b> include complex instructions, in contrast to microinstructions which are simple. If the compiler <b>10</b> converts the source program <b>12</b> into microinstructions, then these microinstructions execute more efficiently or rapidly than the macroinstructions <b>14</b>. This is because microinstructions are directly executable, whereas macroinstructions have to be converted to microinstructions prior to execution. However, since microinstructions are highly machine implementation-specific, microinstructions for one machine implementation of an ISA may not be able to execute on a different machine implementation of an ISA. This is undesirable since a general goal of all compiled programs is that they should execute on all machine-implementations that support a given ISA.
0027Thus, compilers, in general, stop short of optimizing code to the level of introducing machine implementation-specific microinstructions into a compiled program.
0028According to aspects of embodiments of the present invention, an intermediate code format is produced between the macroinstructions <b>14</b> and the machine implementation-specific microinstructions. In one embodiment, the intermediate code format includes a hybrid of macroinstructions and microinstructions. During execution of the intermediate code, if a machine implementation understands the microinstructions, then the microinstructions are executed; otherwise, the macroinstructions are executed. Since, the intermediate code format of an embodiment of the present invention includes macroinstructions, the code is able to execute simultaneously on all machine implementations for a given ISA. One advantage of the techniques disclosed below is that they provide a code format that includes microinstructions which may be executed more rapidly or efficiently on a target machine that understands these microinstructions, while at the same time including macroinstructions which may be executed by a machine that does not understand the microinstructions.
0029<figref idref="DRAWINGS">FIG. 2</figref> of the drawings illustrates the operation of a compiler <b>10</b>′ in accordance with one embodiment of the invention. As will be seen, the compiler <b>10</b>′ receives as its input, a source program <b>12</b>′ which it converts to an intermediate code format <b>14</b>′ which includes ISA instructions or macroinstructions, as well as machine implementation-specific code or microinstructions.
0030In another embodiment, the compiler <b>10</b>′ produces binary code which includes ISA instructions (macroinstructions) as well as an alternative representation of the microinstructions.
0031<figref idref="DRAWINGS">FIGS. 3 and 4</figref> of the drawings illustrate one example of how the alternative representation of the ISA macroinstructions may be constructed. Referring to <figref idref="DRAWINGS">FIG. 3</figref>, a program or a section of a program is shown to comprise code blocks <b>22</b> to <b>28</b>. At the end of each code block <b>22</b> to <b>28</b>, there is a conditional or branch instruction which causes program execution to branch along the arrows designated branch not taken, or branch taken, as the case may be.
0032During execution of basic blocks <b>22</b> to <b>28</b>, it may turn out that there is a high probability that the basic blocks <b>22</b> to <b>28</b> actually get executed. In other words the branches between basic blocks <b>22</b>, <b>24</b>, <b>26</b> and <b>28</b> actually get taken.
0033However, the basic blocks <b>22</b> to <b>28</b> may reside on four separate cache lines as indicated in <figref idref="DRAWINGS">FIG. 5</figref> of the drawings.
0034Since basic blocks <b>22</b> to <b>28</b> have a high probability of being executed, an alternative representation of the blocks may include packing these blocks together to define basic blocks <b>22</b>′ to <b>28</b>′, as is illustrated in <figref idref="DRAWINGS">FIG. 4</figref> of the drawings. The blocks <b>22</b>′ to <b>28</b>′ take up only two cache lines viz. i+n, and i+n+1 as can be seen in <figref idref="DRAWINGS">FIG. 5</figref> of the drawings. Since execution of blocks <b>22</b>′ to <b>28</b>′ only requires two cache accesses instead of the four cache accesses required in order to execute blocks <b>22</b> to <b>28</b>, it will be appreciated that execution of the alternative representation <b>22</b>′ to <b>28</b>′ will be faster.
0035For ease of reference, the alternative representation code <b>22</b>′ to <b>28</b>′ will be referred to “mesocode.” In some embodiments, the mesocode is encapsulated by the boundary markers designated by reference numerals <b>30</b> and <b>32</b> as will be seen in <figref idref="DRAWINGS">FIG. 4</figref> of the drawings.
0036Execution of the mesocode is triggered whenever a trigger is encountered in the original code. Thus, aspects of embodiments of the present invention involve embedding a trigger in the original code, e.g., trigger <b>34</b> shown in <figref idref="DRAWINGS">FIG. 5</figref> of the drawings.
0037In other embodiments, an explicit trigger is not encoded in the original code, since the start boundary marker <b>30</b> may be used as a trigger.
0038The boundary markers <b>30</b>, <b>32</b>, and the trigger <b>34</b> may be in the format of the ISA for which the code was compiled.
0039In one embodiment, the boundary markers <b>30</b>, <b>32</b>, and the trigger <b>34</b> are defined using unused templates for a given ISA architecture, e.g., the Itanium ISA. To achieve this, the mesocoded region may be bounded by instruction syllables or micro ops that are not narrowed by any other ISA templates. The microcoded regions may be kept separate as appendices to the original code and are thus unobtrusive to the original code. In another embodiment, the microcode may redundantly express frequently executed portions of the original code, encoded in a different, more efficient format.
0040Explicitly Parallel Instruction Computing (EPIC) ISA's, including the Itanium ISA use template carrying bundles as atomic units that are fetched and executed. Templates make it possible to decipher other types of instructions in a bundle well before the instructions are decoded. Individual instructions inside a bundle act more like micro ops and will be referred to as such to avoid confusion. Stop bits are used to express parallelism (for instructions between stop bits) and data dependency (for instructions across stop bits) behavior. The Itanium ISA also includes predication and static branch hints on the micro op level, which in conjunction with the stop bits and templates, could be used to express program behavior and granularity beyond the traditional basic block level.
0041The problem with forcing micro ops into fixed issue templates is that no ops (NOPs) are introduced into the code when no usable instructions can be found to fill out the rest of a template. These NOPs dilute code density and degrade cache pipeline utilization by taking up valuable space and pipeline resources that could be filled with useful instructions.
0042The effective fetch bandwidth is reduced due to the effects of these wasteful instructions. Predication can have the same effect in that instructions that are predicated false at runtime effectively become NOPs in the dynamic code stream, which occupy these sources and degrade the instructions per cycle (IPC). Another problem with using fixed issue templates is that branch targets are required to be bundle aligned. This can introduce cache line fragmentation when the cache line is bigger than a bundle. When a taken branch or a branch target is not aligned to the cache line, then the rest of the cache line will be wasted, which reduces effective usage of the fetch bandwidth. These problems of code density dilution may be solved by an introduction of a mesocoded region in the compiled code, which in one embodiment may represent compacted code with the wasteful NOPs and predicated false instructions removed.
0043<figref idref="DRAWINGS">FIG. 6</figref> shows a typical general purpose computer system <b>50</b> including a processor <b>52</b> in accordance with one embodiment of the present invention. The computer system <b>50</b> in accordance with one embodiment of the present invention comprises an address/data bus <b>54</b> for communicating information. The processor <b>52</b> is coupled via the bus <b>54</b> to Input/Output (I/O) device <b>56</b> for processing data and executing instructions. A memory system <b>58</b> is coupled with bus <b>54</b> for storing information and instructions for the processor <b>52</b>. The memory system <b>58</b> comprises, for example, cache memory <b>60</b> and main memory <b>62</b>. Cache memory <b>60</b> includes one or more levels of cache memory. In a typical embodiment, the processor <b>52</b>, the I/O device <b>56</b>, and some or all of the cache memory <b>60</b>, may be integrated in a single integrated circuit.
0044User I/O devices <b>62</b> are coupled to the <b>54</b> and are operative to communicate information in appropriately structured form to and from the other parts of the computer <b>50</b>. The user I/O devices <b>62</b> may include a keyboard, mouse, card reader, magnetic or paper tape, magnetic disk, optical disk, or other available input devices, including another computer.
0045A mass storage device <b>64</b> is coupled to bus <b>54</b> and may be implemented using one or more magnetic hard disks, magnetic tapes, CDROMs, large banks of random access memory, or the like. A wide variety of random access, and read only memory technologies are available and are equivalent for purposes of the present invention. The mass storage <b>64</b> may include computer programs and data stored therein. Some or all of the mass storage <b>64</b> may be configured to be incorporated as part of the memory system <b>58</b>.
0046In a typical computer system <b>50</b>, the processor <b>52</b>, the I/O device <b>56</b>, the memory system <b>58</b>, and the mass storage device <b>64</b>, are coupled to the bus <b>54</b> formed on a printed circuit board and integrated into single housing. However, in the particular components chosen to be integrated into a single housing is based upon market and design choices. Accordingly, it is expressly understood that fewer or more devices may be incorporated within the housing suggested by dashed line <b>68</b>.
0047A display device <b>70</b> is used to display messages, data, a graphical or command line user interface, or other communications with a user. The display <b>70</b> may be implemented, for example, by Cathode Ray Tube (CRT) monitor, Liquid Crystal Display (LCD), or any available equivalent. A communication interface <b>72</b> provides communications capability to other devices.
0048Referring now to <figref idref="DRAWINGS">FIG. 7</figref> of the drawings, reference numeral <b>100</b> generally indicates the stages of a processor pipeline implemented within the processor <b>52</b>. The stages of the pipeline <b>100</b> includes a fetch stage <b>102</b>, a decode stage <b>104</b>, an execute stage <b>106</b>, an error detect stage <b>108</b>, and a write back stage <b>110</b>. Each stage executes in a single clock cycle. The above stages are the stages implemented in one embodiment which is described in greater detail. In other embodiments, the number or the name of the stages may vary. Furthermore, in one embodiment the architecture is a superscalar architecture. Thus, each stage may be able to process two or more instructions simultaneously. In the preferred embodiment, two parallel paths are provided for each stage so that there is a dual fetch stage, a dual decode stage, a dual execution stage, a dual error detect stage, and a write back stage. In other embodiments, more than two parallel paths may be provided for each stage.
0049For ease of description, the following description assumes a single pipeline. The pipeline stages <b>102</b> to <b>110</b> in <figref idref="DRAWINGS">FIG. 7</figref> of the drawings are conventional stages performed within a conventional pipeline. Thus, these stages and the hardware necessary to implement them are not described in detail. However, the decode stage <b>104</b> provides the processor <b>52</b> with two modes of operation. In the first mode of operation, a decoder which executes the decode stage <b>104</b> encounters a start template in the instruction stream, which in some embodiments, may be the trigger <b>34</b> or the boundary marker <b>30</b>. Once the start template is encountered, the processor switches to a second mode of operation in which a special mesocode decoder is used to process the microcode ops. When the mesocode decoder encounters the end template it switches back to the standard decode mechanism. The fetch mechanism is changed to recognize the new escape templates and fetches instructions continuously until it reaches the end of the mesocoded region. The instruction issue for the mesocode region does not have to check for templates because it is non-existent in mesocode encoding. Within the mesocoded region, the microcode may be scheduled in such a way that the instruction issue does not have to check for data dependencies and can simply issue the instructions. Since this instruction issue is different from the original ISA, the instruction issue for the mesocoded region and for the signal ISA essentially work in parallel with each other. Thus, the mesocode and the original code can coexist without impacting each other.
0050As noted above, the mesocoded regions may include machine implementation specific microinstructions, alternative non-microcode encodings, e.g., of frequently executed code, and the like. In another embodiment, the mesocoded region may include instructions of a different ISA definition. For example, in one embodiment the mesocoded region may include instructions in the format of the ISA of a co-processor or an accelerator unit. In this embodiment, when the decoder for decode stage <b>104</b> detects the mesocoded region it automatically routes the mesocoded instructions to the co-processor/accelerator unit as is illustrated in <figref idref="DRAWINGS">FIG. 8</figref> of the drawings.
0051In some cases, the mesocoded regions may include other types of coding, e.g., byte code for a Java Virtual Machine. In this case, in the error detection stage <b>108</b> an exception is thrown to a software handler <b>112</b> which then processes the byte code. This is illustrated in <figref idref="DRAWINGS">FIG. 9</figref> of the drawings.
0052According to a further aspect of one embodiment of the present invention, a program is characterized in terms of streams that comprise basic blocks to be encoded as mesocode. Each basic block includes a sequence of instructions that start at a taken branch target and end at a branch taken instruction. In one embodiment, characterizing a program in terms of streams involves three general operations. The first operation involves partitioning a global instruction execution trace into smaller or local instruction execution traces and determining the stream boundaries within each local instruction execution trace. The second operation creates a local dictionary of unique streams seen during program execution in each local instruction trace and correlates the unique streams back to the global execution instruction trace. Finally, the third operation creates a global stream dictionary that is valid for all portions of the global instruction trace, and re-labels the local instruction execution traces to reflect entries in the global stream dictionary.
0053Effectively, this methodology transforms traces of dynamic instructions into streams of basic blocks. In one embodiment, all unique streams have entries in the global dictionary and each unique stream is mapped to a unique symbol. Through frequency and coverage (coverage is defined as the size of a stream times a frequency which take stream is executed) analysis, all entries in the dictionary are ranked in order of priority.
0054In one embodiment, a software tool such as an instruction-accurate simulator is used to execute the program and to provide details of each instruction that was executed. It is possible to classify each instruction according to a type. For example, in one embodiment, the following information about instruction types are collected by the software tool:
0055predicate true—taken branch;
0056predicate true—not taken branch;
0057predicate false—taken branch;
0058predicate false—not taken branch;
0059load instructions; and
0060store instructions.
0061The software tool may be used to concurrently determine the stream boundaries, which as noted above, end on taken branches and begin at a branch target. Each stream has associated with it, a start instruction pointer, an end instruction pointer, unique instruction counts, as well as the length in instructions, and a profile of how many instructions of each type were executed. The ordering of the streams corresponds to the program (global) instruction execution trace.
0062In one embodiment, because the above-described instruction-level analysis is time consuming, the program is divided into a number of smaller chunks or local traces, each comprising a fixed number of instructions. Thereafter, each of the local traces is analyzed in parallel. This approach requires a final merging step as described below. One advantage of dividing the program into local traces for parallel analysis is that computing resources may be used to improve the efficiency of the analysis.
0063Once the analysis for each local trace is completed, the next operation involves grouping identical streams together and sorting them by their exit instruction pointer counts. Duplicate streams are removed and the frequencies of the remaining streams are updated. The resulting list contains only unique streams, and metrics about the streams such as the execution frequency of each stream. A unique identifier/symbol is associated with each stream. This operation is performed at a local trace level as described above and the result is a local stream dictionary that is then used to convert the raw local instruction trace to a stream trace. Thereafter, several merging operations are required to create a single global stream dictionary for the entire program. In one embodiment, each merging step takes two local stream dictionaries and removes duplicate streams, while keeping and updating the frequencies of the stream that occurred earliest in time. Additional sorting operations may be performed to identify streams, for example, with the highest frequency or coverage. <figref idref="DRAWINGS">FIG. 10</figref> of the drawings illustrates the above-described process for identifying streams of basic blocks. Referring to <figref idref="DRAWINGS">FIG. 10</figref>, it will be seen that a global instruction trace <b>114</b> is initially partitioned into a number of local instruction traces <b>116</b>. The number of instructions within each local instruction trace <b>116</b> may vary, however, in the example shown in <figref idref="DRAWINGS">FIG. 10</figref>, each local instruction trace <b>116</b> has <b>200</b> million instructions. Each local instruction trace <b>116</b> is analyzed at <b>118</b> to identify streams of basic blocks therein. At <b>120</b>, a local stream dictionary is constructed for each local stream trace <b>116</b> in a manner described above. At <b>122</b>, a correlation step is performed wherein each stream identified within a local trace is correlated back to the local trace to produce a stream indexed local trace <b>124</b>. At <b>126</b>, pairs of stream indexed local streams are merged in a sequence of (N) merging steps that ultimately produce the global stream dictionary <b>126</b>. The global stream dictionary <b>128</b> may be additionally sorted by frequency, coverage, or some other metric.
0064Once the global stream dictionary <b>128</b> is created, a remapping phase is performed to re-label the stream indexed local trace <b>124</b> with the unique symbols from the global dictionary <b>128</b>. The remapping phase may be performed in parallel once the global dictionary <b>128</b> is created. The remapping process is illustrated in <figref idref="DRAWINGS">FIG. 11</figref> of the drawings. Referring to <figref idref="DRAWINGS">FIG. 11</figref>, using the global stream dictionary <b>128</b>, a remapping operation is performed at <b>130</b>. Essentially, the remapping operation <b>130</b> uses each stream indexed local trace <b>124</b> to perform a look-up of the global stream dictionary <b>128</b> in order to remap each stream indexed local trace <b>124</b> to produce a corresponding stream indexed global trace <b>132</b>.
0065In one embodiment, once the streams have been identified, high confidence or “hot” streams are identified. These hot streams are frequently executed. The process of identifying hot streams is illustrated with reference to <figref idref="DRAWINGS">FIG. 12</figref> of the drawings. Referring to <figref idref="DRAWINGS">FIG. 12</figref>, at a first pass <b>134</b>, the hot streams are selected based on some number of top coverage or frequency streams. This number can be fixed or a percentage of all the unique streams in the program. In a second pass <b>136</b>, the execution trace is scanned to identify high confidence children of these hot streams. A stream is a candidate if it is a child of a hot stream and not already a hot stream. Further, additional filtering criteria may be used. For example, a high confidence stream may be required to have a parent that ends in a predicted taken branch. At <b>138</b>, the high confidence children are merged to produce a list of hot streams <b>140</b>.
0066Once the hot streams and their children have been identified, a second scan of the execution trace is performed in order to construct a control flow graph (CFG) of program execution using only the hot and high confidence streams as nodes. All other streams are lumped together into a common sink. Low confidence edges and their associated nodes are pruned from the CFG based on a pruning criterion. In one embodiment, the pruning criterion is a frequency percentage defined as the execution frequency of an edge divided by the sum over all other out-edges from the same source node. The frequency percentage defines a strict percentage cut-off such that all edges below a percentage threshold and all edges leading to the common sink are removed. In one embodiment, second pruning criterion examines the variance in frequency percentage across all the edges. The variance is the difference between each edge and the edge with the maximum frequency percentage. A given threshold is set for the cases with one and two edges and scaled down linearly if there are more edges. Edges falling above the threshold or leading to or from the common sink are discarded. This process of constructing the control flow graph is illustrated with reference to <figref idref="DRAWINGS">FIG. 13</figref> of the drawings. Referring to <figref idref="DRAWINGS">FIG. 13</figref>, a CFG <b>150</b> of program execution that is constructed such that each node in the CFG is a hot or high confidence stream is scanned at <b>152</b> to identify edges that satisfy the pruning criterion. The scan at <b>152</b> is performed for each local trace and the results are merged at <b>154</b>. Thereafter at <b>156</b> edges that do not satisfy pruning criterion are removed and the result is a pruned CFG <b>158</b>.
0067In one embodiment, the pruned CFG <b>158</b> is scanned in order to extract (see block <b>160</b> in <figref idref="DRAWINGS">FIG. 4</figref>) chains of dynamic streams <b>162</b> that are frequently executed. For example, in one embodiment, starting at the root of the CFG, the highest percentage edges are followed to the leaves, while taking care not to traverse a loop more than once. Naturally, other criteria may be used to extract chains from the pruned CFG <b>158</b>. It is also possible to enumerate all possible chains with no pruning. The pruned CFG <b>158</b> represents a series of dynamic streams that an optimizer can use to perform optimizations such as encoding the dynamic blocks as mesocode.
0068In one embodiment, the techniques for characterizing a program in terms of streams of basic blocks may be implemented in software. <figref idref="DRAWINGS">FIGS. 15-20</figref> of the drawings illustrate one embodiment of how the techniques may be implemented in software. Referring to <figref idref="DRAWINGS">FIG. 15</figref>, at block <b>170</b>, an instruction within a current basic block is processed. At block <b>172</b>, the software determines if the current instruction is a branch instruction. If the current instruction is not a branch instruction then block <b>170</b> executes again, otherwise at block <b>174</b>, the software determines if the branch is taken or not taken. If the branch is not taken then block <b>174</b> executes. At block <b>172</b>, the fall-through block which starts at the instruction pointer of a not taken branch is included as a fall-through block of the current stream. If at block <b>174</b> it is determined that the branch is taken, then at <b>178</b> the software terminates a current stream and performs a look-up in a stream dictionary for a matching entry. In one embodiment, the stream dictionary may be implemented as a table <b>190</b> (see <figref idref="DRAWINGS">FIG. 16</figref>). The table <b>190</b> includes a stream identifier column <b>190</b>A, a start instruction pointer (ip) column <b>190</b>B, and an end instruction pointer (ip) column <b>190</b>C. The table <b>190</b> also includes a number of metrics for each identified stream. For example, metrics may include a count of a defined number of instruction types occurring within a stream, as well as a coverage/frequency count for each stream. The metrics collected for each stream are entered in columns <b>190</b>D, <b>190</b>E, and <b>190</b>F, in table <b>190</b>. Further, when a current stream is terminated at block <b>178</b>, the branch target ip is used as the ip for the next stream, and the ip of the branch taken instruction is used as the end ip for the current stream. At block <b>180</b>, if there is no matching entry in the stream dictionary <b>190</b>, then block <b>182</b> executes wherein the software creates a new stream entry in the dictionary <b>190</b>. If, however at block <b>180</b>, a match is found in the stream dictionary <b>190</b>, then at block <b>184</b> the metrics for the matching stream are updated.
0069The operations shown in <figref idref="DRAWINGS">FIG. 17</figref> of the drawings are performed once the stream dictionary <b>190</b> has been created. Referring to <figref idref="DRAWINGS">FIG. 17</figref>, at block <b>200</b> the software selects hot streams. This may be achieved by ranking the stream dictionary <b>190</b> based on coverage or some other metric. Thereafter, at block <b>202</b>, the software scans the stream trace for each hot stream to find high confidence or hot children. The process of determining the high confidence/hot children is illustrated in <figref idref="DRAWINGS">FIG. 18</figref> of the drawings. Referring to <figref idref="DRAWINGS">FIG. 18</figref>, at block <b>210</b>, the software takes as input, a hot stream A. At <b>212</b>, the software picks the next stream B. At <b>214</b>, the software determines if the stream B follows immediately after the stream A. If stream B does not follow immediately after stream A, then block <b>210</b> executes again, otherwise the software checks at <b>216</b> if stream B occurs in stream A's children's list. If stream B does not occur in stream A's children's list, then an entry for stream B is created in the children's list for stream A, at <b>218</b>. If stream B exists in the children's list for stream A, then block <b>220</b> executes, wherein the confidence for stream B is updated.
0070The characterization of a program in terms of streams as described above may also be performed in hardware. Thus, embodiments of the invention include hardware structures within a processor to identify streams of basic blocks during program execution. <figref idref="DRAWINGS">FIG. 19</figref> of the drawings shows one embodiment of a system <b>250</b> that includes a hardware structure in a form of a stream predictor <b>268</b> which is capable of identifying a stream during program execution. A processor <b>252</b> includes a pipeline <b>254</b> which is illustrated in dotted lines. The stages of the pipeline <b>254</b> include a fetch/prefetch stage <b>256</b>, a decode stage <b>258</b>, an execute stage <b>260</b>, a check/error detect stage <b>262</b>, and a write-back stage <b>264</b>. Each stage executes in a single clock cycle. The processor <b>252</b> includes a branch predictor <b>266</b> which includes dynamic branch prediction logic for predicting whether a branch will be taken or not. In use, the fetch/prefetch stage <b>256</b> submits the address of a branch instruction to the branch predictor <b>266</b> for a look-up and, if a hit results, a prediction is made on whether or not the branch will be taken when the branch instruction is finally executed in the execution stage <b>260</b>. The branch predictor <b>266</b> only makes predictions on branches for which a history has been collected. Based on the prediction, the branch prediction logic takes one of two actions. Firstly, if a branch is predicted taken, the instructions that were fetched from memory locations along the fall through path of execution are flushed from the block of code which is currently in the fetch/prefetch stage <b>256</b>. The branch prediction logic of the branch predictor <b>266</b> provides a branch target address to the fetch/prefetch stage <b>256</b> which then prefetches instructions along the predicted path. Alternatively, if a branch is predicted as not taken, the branch prediction logic of the branch predictor <b>254</b> does not flush instructions that come after the branch in the code block currently in the fetch/prefetch stage <b>256</b>. Thus, the prefetch stage continues fetching code along the fall through path.
0071The processor <b>252</b> further includes a stream predictor <b>268</b> whose function will be explained in greater detail below. As can be seen, the processor <b>252</b> includes a register file <b>270</b> and during execution of an instruction in the execution stage <b>260</b> values are written and read from register file <b>270</b>. As discussed above, the check/error detect stage <b>262</b> detects whether the correct instruction was executed in the execute stage <b>260</b>, and only if the correct instruction was executed is the processor state allowed to change in the write-back stage <b>264</b>.
0072The processor <b>252</b> further includes a cache memory hierarchy comprising a level one instruction cache <b>272</b>, a level one data cache <b>274</b>, a level two cache <b>276</b>, and a level three cache <b>278</b>. The level two cache <b>276</b> is connected to the level three cache <b>278</b> via a cache bus <b>280</b>. The system <b>250</b> also includes a memory <b>282</b> which is connected via a system bus <b>284</b> to the processor <b>252</b>.
0073Based on information received from the error detect stage <b>262</b>, the stream predictor <b>268</b> constructs a stream dictionary, such as the stream dictionary <b>300</b> illustrated in <figref idref="DRAWINGS">FIG. 20</figref> of the drawings. Referring to <figref idref="DRAWINGS">FIG. 20</figref>, it will be seen that the stream dictionary <b>300</b> comprises a start instruction pointer (ip) and an end ip which define the starting and ending point of a stream, respectively. Additionally, the stream dictionary <b>300</b> contains the ip for the next stream that is most likely to be executed based on an analysis of program behavior. Thus, the stream dictionary <b>300</b> not only identifies the stream, but also provides the next stream that is most likely to be executed for a given stream in the stream dictionary <b>300</b>. <figref idref="DRAWINGS">FIG. 21</figref> shows a more sophisticated version <b>302</b> of the stream dictionary <b>300</b>. The only difference is that the stream dictionary <b>302</b> instead of having only a single next stream, has several next streams that are identified as being likely to follow any given stream in the dictionary.
0074In order to create the stream dictionaries <b>300</b>, <b>302</b>, the stream predictor <b>268</b> performs the operations shown in the flow chart of <figref idref="DRAWINGS">FIG. 22</figref>. Referring to <figref idref="DRAWINGS">FIG. 22</figref>, at block <b>350</b>, a variable called stream size is initialized to zero. At block <b>352</b>, a current instruction in the write-back stage <b>264</b> is retired. At block <b>354</b>, the stream size is incremented by one. At block <b>356</b>, a determination is made as to whether or not the retired instruction is a branch instruction that causes program flow to branch between a branch taken path and a branch not taken path. If the retired instruction is not a branch instruction then block <b>352</b> executes again, otherwise, block <b>358</b> executes. At block <b>358</b>, a determination is made as to whether the branch instruction caused program flow to branch to the branch taken path. If, at block <b>358</b>, it is determined that the branch instruction causes the branch not to be taken, then at block <b>360</b> an attempt is made to match the ip of the retired instruction with an entry in the stream predictor table <b>300</b>, <b>302</b>. If there is no match, then program flow branches to block <b>352</b>. If the ip of the branch taken instruction matches an entry in the stream predictor table, then block <b>362</b> executes, wherein a confidence for the matched entry is decreased. Thereafter, block <b>364</b> executes, wherein an entry is created with the same start ip as that of the matched stream. If, at block <b>358</b>, it is determined that the branch was taken, then at block <b>366</b> a further determination is made as to whether the current ip of retired instruction matches an entry in the stream predictor table. If there is a match, then at block <b>370</b>, the confidence for that entry is increased. At block <b>372</b>, the branch target ip of the taken branch is used as a starting ip for a current stream. If at block <b>366</b>, there is no match with an entry in the stream predictor table, then block <b>368</b> executes wherein a new stream starting with the branch target ip is created. Alternatively, an existing stream is simply replaced with a new stream starting at the ip of the branch target. After execution of block <b>372</b>, block <b>374</b> executes wherein the stream size is reset to zero. As noted above, a result of the stream predictor <b>268</b> performing the operations shown in the flow chart of <figref idref="DRAWINGS">FIG. 22</figref> is the creation of a stream dictionary as shown in <figref idref="DRAWINGS">FIGS. 20 and 21</figref>.
0075In order to use the stream dictionary to predict which streams are likely to be taken, there has to be a confidence associated with the ip for each next stream. The higher the confidence, the more likely the next stream is to be taken. This confidence information may be integrated into the stream dictionary. Alternatively, a separate stream predictor table may be created, such as the table <b>400</b> shown in <figref idref="DRAWINGS">FIG. 23</figref> which identifies each stream by starting ip, and ending ip. For each stream in table <b>400</b> there is provided one or more target streams each identified by a start ip and an end ip. Further, a confidence indicating a probability of the predicted or target stream being taken is provided. As will be seen, the stream predictor table <b>400</b> also includes a stream/normal column which provides information on whether the processor is operating in stream mode or normal mode as will be described below.
0076In use, the fetch/prefetch stage <b>256</b>, submits the address of a branch instruction to the stream predictor <b>268</b> as well as to the branch predictor <b>266</b> for a look-up. This stream predictor <b>268</b> uses the input ip to predict the ip of a stream as is shown in the flow chart of <figref idref="DRAWINGS">FIG. 23</figref>. Referring to <figref idref="DRAWINGS">FIG. 24</figref>, at block <b>420</b>, the stream predictor <b>268</b> receives an input ip from the fetch/prefetch stage <b>256</b>. At block <b>422</b>, the stream predictor <b>268</b> determines if the processor is operating in stream mode or in normal mode. If it is determined that the processor is operating in stream mode, then at block <b>424</b>, the stream predictor table <b>400</b> is searched using the input ip as a key. At block <b>426</b>, if the search produces a hit that indicates a stream to branch prediction, then the mode of the processor is changed to normal mode at block <b>428</b>. Thereafter, at block <b>430</b>, the ip is set to the ip of the predicted branch, and block <b>432</b> executes wherein the ip is sent to the fetch/prefetch unit <b>226</b>. If at block <b>434</b>, a hit in the stream predictor table <b>400</b> indicates a stream to stream transition, then block <b>436</b> executes, wherein a future prefetch ip is produced and staged so that fetching at the prefetch ip occurs at the distance of the stream size. At block <b>438</b>, prefetching of instructions is performed starting at the prefetch ip for up to the stream size. If there is no hit in the stream predictor table <b>400</b>, then block <b>440</b> executes, wherein the ip is simply incremented and control is transferred to block <b>432</b>. If at block <b>422</b>, it is determined that the processor is operating in normal mode, then block <b>442</b> executes. At block <b>442</b>, the stream predictor <b>268</b> checks if the input ip corresponds to a branch to branch transition as indicated in the table <b>400</b>. If the input ip corresponds to a branch to branch transition, then at block <b>444</b>, the instruction pointer is set to the ip of the branch target, whereafter control passes to block <b>432</b>. If, however, the stream predictor <b>268</b> determines, at block <b>440</b>, that the input ip does not correspond to a branch to branch transition, then block <b>446</b> executes. At block <b>446</b>, the stream predictor <b>268</b> determines if the input ip corresponds to a branch to stream transition. If it is determined that the input ip does not correspond to a branch to stream transition then block <b>448</b> executes wherein the ip is set to the next sequential ip and control is passed to block <b>432</b>. If, however, it is determined at block <b>446</b>, that the input ip corresponds to a branch to stream transition, then block <b>450</b> executes, wherein the mode of the processor is changed to operate in stream mode. Thereafter, block <b>452</b> executes, wherein the ip is set to the ip of the start of the stream and control is passed to block <b>432</b>.
0077Thus, the operations performed by the stream predictor <b>268</b> as per the flow chart of <figref idref="DRAWINGS">FIG. 24</figref> causes the stream predictor <b>268</b> to supply the ip of the next hot stream and its children to the fetch/prefetch stage <b>256</b>.
0078In order to maintain the accuracy of the prediction, after the write-back stage <b>264</b>, the stream prediction table <b>400</b> needs to be updated based on information about what instructions were actually executed. <figref idref="DRAWINGS">FIG. 25</figref> shows a flow chart of operations performed in order to operate the stream predictor table <b>400</b>.
0079Referring to <figref idref="DRAWINGS">FIG. 25</figref>, at block <b>500</b>, the current instruction at the write-back stage <b>264</b> is retired. At block <b>502</b>, the stream predictor <b>268</b> determines if the retired instruction is a branch instruction. If the retired instruction is not a branch instruction, then block <b>504</b> executes, wherein the stream predictor <b>268</b> determines if the retired instruction is a trigger. If the retired instruction is not a trigger, then control passes to block <b>500</b>. If the retired instruction is a trigger, then at block <b>506</b> the stream predictor table <b>400</b> is searched using the ip of the trigger as a key for a matching entry. If there is no matching entry, then at block <b>508</b>, a new stream entry is created, and block <b>510</b> executes, wherein the processor is set to operate in stream mode. If at block <b>506</b>, there is a matching entry in the stream predictor table <b>400</b>, then control passes directly to block <b>510</b>. After execution of block <b>510</b>, block <b>512</b> executes wherein the confidence of a matched stream is updated.
0080If at block <b>502</b>, it is determined that retired instruction is a branch instruction, then at block <b>514</b>, the stream predictor <b>268</b> determines if the processor is operating in normal mode. If the processor is operating in normal mode, then at block <b>516</b>, the prediction associated with the retired instruction is checked. If the prediction is correct, then at block <b>518</b> the confidence for that prediction is increased, otherwise, at block <b>520</b> the confidence for that prediction is decreased. If at block <b>514</b>, it is determined that the processor is operating in stream mode, then at block <b>512</b>, the stream predictor table <b>400</b> is searched to determine if the ip of the branch matches an end ip of a stream. If there is a match, then at block <b>524</b>, the confidence for the matched stream is updated. Otherwise, at block <b>526</b>, a determination is made as to whether the branch was taken or not. If the branch was taken, then a new stream entry is created at block <b>528</b>. At block <b>530</b>, the mode of the processor is set to stream mode and at block <b>532</b> the confidence for the new stream is updated.
0081Although the present invention has been described with reference to specific exemplary embodiments, it will be evident that the various modification and changes can be made to these embodiments without departing from the broader spirit of the invention as set forth in the claims. Accordingly, the specification and drawings are to be regarded in an illustrative sense rather than in a restrictive sense.
Contents3
24 sheets
Sheet 1 Sheet 2 Sheet 3 Sheet 4 Sheet 5 Sheet 6 Sheet 7 Sheet 8 Sheet 9 Sheet 10 Sheet 11 Sheet 12 Sheet 13 Sheet 14 Sheet 15 Sheet 16 Sheet 17 Sheet 18 Sheet 19 Sheet 20 Sheet 21 Sheet 22 Sheet 23 Sheet 24
Every citation, both waysCites: the store holds 4 of 5
| Document | Relation | Office | Cited during |
|---|---|---|---|
| US9563432B2 | Cited by | United States of America | Applicant |
| US8190652B2 | Cited by | United States of America | Applicant |
| CN103207772A | Cited by | China | Search report |
| US2009150335A1 | Cited by | United States of America | Pre-grant |
| US2011307876A1 | Cited by | United States of America | Pre-grant |
| US8479176B2 | Cited by | United States of America | Search report |
| US5381533A | Cites | United States of America | Search report |
| US6304962B1 | Cites | United States of America | Search report |
| US6988183B1 | Cites | United States of America | Search report |
| US6988190B1 | Cites | United States of America | Search report |
| Ramirez et al., “Fetching Instruction Streams”, Proceedings of the 35th Annual IEEE/ACM International Symposium on Microarchitecture, MICRO-35, Nov. 18-22, 2002, pp. 371-382. | Non-patent | – | Search report |
| Rotenberg et al., “A Trace Cache Microarchitecture and Evaluation”, IEEE Transactions on Computers, vol. 48, iss. 2, Feb. 1999, pp. 111-120. | Non-patent | – | Search report |
| Hank et al., “Superblock Formation Using Static Program Analysis”, Proceedings of the 26th International Symposium on Microarchitecture, Dec. 1-3, 1993, pp. 247-255. | Non-patent | – | Search report |
| Patel et al., “Critical Issues Regarding the Trace Cache Fetch Mechanism”, Technical Report, CSE TR-335-97, University of Michigan, May 1997, pp. 1-33. | Non-patent | – | Search report |
| Lee et al., “On Augmenting Trace Cache for High-Bandwidth Value Prediction”, IEEE Transactions on Computers, vol. 51, iss. 9, Sep. 2002, pp. 1074-1088. | Non-patent | – | Search report |
| Rotenberg et al., “Trace Cache: A Low Latency Approach to High Bandwidth Instruction Fetching”, Proceedings of the 29<sup>th </sup>Annual IEEE/ACM International Symposium on Microarchitecture, MICRO-29, Dec. 2-4, 1996, pp. 24-34. | Non-patent | – | Search report |
| Jacobson et al., “Path-Based Next Trace Prediction”, Proceedings of the 30th Annual IEEE/ACM International Symposium on Microarchitecture, Dec. 1-3, 1997, pp. 14-23. | Non-patent | – | Search report |
| Rakvic et al., “Completion Time Multiple Branch Prediction for Enhancing Trace Cache Performance”, Proceedings of the 27<sup>th </sup>International Symposium on Computer Architecture, 2000, pp. 47-58. | Non-patent | – | Search report |
| Nair et al., “Exploiting Instruction Level Parallelism in Processors by Caching Scheduled Groups”, Proceedings of the 24<sup>th </sup>Annual International Symposium on Computer Architecture, Jun. 2-4, 1997, pp. 13-25. | Non-patent | – | Search report |
| Ramirez et al., "Fetching Instruction Streams", Proceedings of the 35th Annual IEEE/ACM International Symposium on Microarchitecture, MICRO-35, Nov. 18-22, 2002, pp. 371-382. | Non-patent | – | Search report |
| Rotenberg et al., "A Trace Cache Microarchitecture and Evaluation", IEEE Transactions on Computers, vol. 48, iss. 2, Feb. 1999, pp. 111-120. | Non-patent | – | Search report |
| Hank et al., "Superblock Formation Using Static Program Analysis", Proceedings of the 26th International Symposium on Microarchitecture, Dec. 1-3, 1993, pp. 247-255. | Non-patent | – | Search report |
| Patel et al., "Critical Issues Regarding the Trace Cache Fetch Mechanism", Technical Report, CSE TR-335-97, University of Michigan, May 1997, pp. 1-33. | Non-patent | – | Search report |
| Lee et al., "On Augmenting Trace Cache for High-Bandwidth Value Prediction", IEEE Transactions on Computers, vol. 51, iss. 9, Sep. 2002, pp. 1074-1088. | Non-patent | – | Search report |
| Rotenberg et al., "Trace Cache: A Low Latency Approach to High Bandwidth Instruction Fetching", Proceedings of the 29<SUP>th </SUP>Annual IEEE/ACM International Symposium on Microarchitecture, MICRO-29, Dec. 2-4, 1996, pp. 24-34. | Non-patent | – | Search report |
| Jacobson et al., "Path-Based Next Trace Prediction", Proceedings of the 30th Annual IEEE/ACM International Symposium on Microarchitecture, Dec. 1-3, 1997, pp. 14-23. | Non-patent | – | Search report |
| Rakvic et al., "Completion Time Multiple Branch Prediction for Enhancing Trace Cache Performance", Proceedings of the 27<SUP>th </SUP>International Symposium on Computer Architecture, 2000, pp. 47-58. | Non-patent | – | Search report |
| Nair et al., "Exploiting Instruction Level Parallelism in Processors by Caching Scheduled Groups", Proceedings of the 24<SUP>th </SUP>Annual International Symposium on Computer Architecture, Jun. 2-4, 1997, pp. 13-25. | Non-patent | – | Search report |
2 members in 1 office
Priority claims2
| Document | Office | Kind | Date |
|---|---|---|---|
| 60831603 | United States of America | A | |
| US20030608316 | – | – | – |
Members2
| Document | Office | Kind | |
|---|---|---|---|
| US2004268100A1 | United States of America | A1 | |
| US7260705B2This record | United States of America | B2 |
48 transactions on the USPTO file
Allowed after 1 non-final rejection, 2 final rejections and 2 RCEs.
- Non-final rejections
- 1
- Final rejections
- 2
- RCEs
- 2
- Appeals
- 0
Over time
Point at a mark for the transactionTransactions
| Event | Code | |
|---|---|---|
| Recordation of Patent Grant MailedPGM/ | PGM/ | |
| Patent Issue Date Used in PTA CalculationAllowedPTAC | PTAC | |
| Issue Notification MailedAllowedWPIR | WPIR | |
| Dispatch to FDCD1935 | D1935 | |
| Application Is Considered Ready for IssuePILS | PILS | |
| Issue Fee Payment VerifiedN084 | N084 | |
| Issue Fee Payment ReceivedIFEE | IFEE | |
| Mail Notice of AllowanceAllowedMN/=. | MN/=. | |
| Notice of Allowance Data Verification CompletedAllowedN/=. | N/=. | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Disposal for a RCE / CPA / R129AbandonedABN9 | ABN9 | |
| Request for Continued Examination (RCE)RCEX | RCEX | |
| Workflow - Request for RCE - BeginBRCE | BRCE | |
| Mail Examiner Interview Summary (PTOL - 413)MEXIN | MEXIN | |
| Examiner Interview Summary Record (PTOL - 413)EXIN | EXIN | |
| Miscellaneous Incoming LetterLET. | LET. | |
| Mail Final Rejection (PTOL - 326)Final rejectionMCTFR | MCTFR | |
| Final RejectionFinal rejectionCTFR | CTFR | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Disposal for a RCE / CPA / R129AbandonedABN9 | ABN9 | |
| Request for Continued Examination (RCE)RCEX | RCEX | |
| Workflow - Request for RCE - BeginBRCE | BRCE | |
| Mail Advisory Action (PTOL - 303)MCTAV | MCTAV | |
| Advisory Action (PTOL-303)CTAV | CTAV | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| New or Additional Drawing FiledC614 | C614 | |
| Response after Final ActionA.NE | A.NE | |
| Mail Final Rejection (PTOL - 326)Final rejectionMCTFR | MCTFR | |
| Final RejectionFinal rejectionCTFR | CTFR | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Response after Non-Final ActionA... | A... | |
| Mail Non-Final RejectionNon-final rejectionMCTNF | MCTNF | |
| Non-Final RejectionNon-final rejectionCTNF | CTNF | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| IFW TSS Processing by Tech Center CompleteTSSCOMP | TSSCOMP | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Application Is Now CompleteCOMP | COMP | |
| Application Return from OIPEWROIPE | WROIPE | |
| Application Return TO OIPEROIPE | ROIPE | |
| Application Dispatched from OIPEOIPE | OIPE | |
| Application Is Now CompleteCOMP | COMP | |
| A statement by one or more inventors satisfying the requirement under 35 USC 115, Oath of the ApplicOATHDECL | OATHDECL | |
| Notice Mailed--Application Incomplete--Filing Date AssignedINCD | INCD | |
| Cleared by OIPE CSRL194 | L194 | |
| IFW Scan & PACR Auto Security ReviewSCAN | SCAN | |
| Initial Exam Team nnIEXX | IEXX |
8 legal events, as the office reported them to INPADOC
Over the term
Point at a mark for the eventEvents
| Event | Code | |
|---|---|---|
| Lapsed due to failure to pay maintenance feeLapsedFP | FP | |
| Lapse for failure to pay maintenance feesLapsedPATENT EXPIRED FOR FAILURE TO PAY MAINTENANCE FEES (ORIGINAL EVENT CODE: EXP.); ENTITY STATUS OF PATENT OWNER: LARGE ENTITYLAPS | LAPS | |
| Information on status: patent discontinuationPATENT EXPIRED DUE TO NONPAYMENT OF MAINTENANCE FEES UNDER 37 CFR 1.362STCH | STCH | |
| Fee payment procedureMAINTENANCE FEE REMINDER MAILED (ORIGINAL EVENT CODE: REM.); ENTITY STATUS OF PATENT OWNER: LARGE ENTITYFEPP | FEPP | |
| Fee paymentFPAY | FPAY | |
| Fee paymentFPAY | FPAY | |
| Information on status: patent grantGrantedPATENTED CASESTCF | STCF | |
| AssignmentAS | AS |
Numbers
- Publication
- 07260705
- Publication, DOCDB
- 7260705
- Publication, EPODOC
- US7260705
- Application
- 10608316
- Application, DOCDB
- 60831603
- Application, EPODOC
- US20030608316
Titles
- English
- Apparatus to implement mesocode
Patent term adjustment
- A delay
- +560 daysthe office missed an examination deadline
- Applicant delay
- −5 days
- Net adjustment
- 555 days
Classification
- CPC, 10
- G06F9/3853
- G06F8/447
- G06F9/30181
- G06F9/30196
- G06F9/3808
- G06F9/3822
- G06F9/3844
- G06F9/3836
- G06F9/3858
- G06F9/3854
- IPC, 5
- G06F9 30
- G06F9 00
- G06F9 318
- G06F9 38
- G06F9 45
- USPC, 7
- 712209000
- 712233000
- 712239000
- 712E09035
- 712E09051
- 712E09054
- 712E09072