US20130318401A1 - Register error protection through binary translation - Google Patents
Register error protection through binary translation Download PDFInfo
- Publication number
- US20130318401A1 US20130318401A1 US13/994,697 US201113994697A US2013318401A1 US 20130318401 A1 US20130318401 A1 US 20130318401A1 US 201113994697 A US201113994697 A US 201113994697A US 2013318401 A1 US2013318401 A1 US 2013318401A1
- Authority
- US
- United States
- Prior art keywords
- register
- processor
- code
- recited
- threshold period
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/22—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
- G06F11/26—Functional testing
- G06F11/263—Generation of test inputs, e.g. test vectors, patterns or sequences ; with adaptation of the tested hardware for testability with external testers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/004—Error avoidance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/52—Binary to binary
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/3013—Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
Definitions
- This disclosure relates to the technical field of microprocessors.
- Soft errors are an increasing problem. Also, the trend toward increasing the number of processor cores creates a need to add reliability features to reduce the per core failure rate, such as the failure in time (FIT) rate. Due to constraints such as latency and overhead, register files are currently protected only by parity, which is a problem when multiple strikes or multiple errors occur. Moreover, parity can only detect an odd number of errors. When registers store register values with long lives (i.e. the values are stored for long periods without being read), multiple errors may occur undetected. This problem is known as Silent Data Corruption.
- FIG. 1 illustrates an example system according to some implementations.
- FIG. 2 illustrates an example process flow according to some implementations.
- FIG. 3 illustrates select components of an example logic block diagram according to some implementations.
- FIG. 4 illustrates an example translation according to some implementations.
- FIG. 5 illustrates an example translation according to some implementations.
- FIG. 6 illustrates an example translation according to some implementations.
- FIG. 7 illustrates an example system in which some implementations may operate.
- This disclosure includes techniques and arrangements for detecting long life register values during binary translation and shortening the lives of the detected register values by including instructions to access the register values in the code to be output by the binary translator.
- Some implementations may use a binary translator to detect register values that have a long life and to include instructions in translated code to shorten the lives of the detected register values.
- the detection of long life register values may be based on: 1) an analysis of code prior to translation; 2) an analysis of translated code; 3) run-time information regarding the translated code, or 4) any combination thereof.
- Binary translation is a technique that may be used to create a version of a binary program originally executable on one processor-based platform that is, after translation, usable on a different processor-based platform.
- a binary translator may convert a program intended for an Apple® PowerPC processor based platform into a program executable on an Apple platform based on an Intel® Core Duo® Processor.
- binary translation should not be interpreted as limited to converting a program intended for execution on a first platform to a program executable on a second platform.
- binary translation includes any rewriting of a binary program, such as for dynamic optimization of a program which is already executable on an executing platform.
- translated code refers to code that has been converted for use on a different platform, code that has been optimized, or code that has been both converted and optimized.
- programs, or portions of programs can be optimized when the software is executed (i.e. optimized at “run-time”).
- This “dynamic optimization” can benefit from profiling information that includes much information relating the actual execution of the portions of the program executed.
- Programs can be profiled while operating on test data or while operating on actual end-user data. By profiling software in the end-user environment, the resulting profiling information reflects actual usage patterns, and can aid in the dynamic optimization process.
- the first phase e.g., a cold translation phase
- blocks e.g., a sequence of instructions
- These cold blocks may or may not be optimized and are instrumented with instructions to measure the different aspects of the execution of the cold blocks.
- the instrumentation instructions could count a number of times a respective cold block is executed or may compute a number of cycles occurring in the life of a register value. It should be noted that results obtained by instrumentation instructions are not necessarily precise, but rather may be estimates or approximations.
- the second phase (e.g., a hot translation phase) begins.
- the hot translation phase the cold blocks are optimized using the profile information generated during execution of the cold blocks.
- the cold blocks may not all be optimized, but rather only a subset may be optimized. For example, only cold blocks which are found to have long life register values or cold blocks which are frequently executed may be subjected to hot translation phase optimization.
- FIG. 1 illustrates an example framework of a processor based system 100 according to some implementations.
- System 100 is a processor based system including a processor 102 , a memory 104 to store data and programs executable by the processor, and a storage unit such as a storage 106 all interconnected by a system bus 108 .
- the processor 102 includes one or more registers 110 and a microcode unit 112 .
- a program embodying a binary translator 114 may be stored on the storage 106 , loaded into memory 104 via the system bus 108 and executed by the processor 102 on data which may also be stored on the disk system and optionally in memory 104 .
- the binary translator 114 may be stored as firmware in the microcode unit 112 on the processor 102 rather than being loaded from memory 104 and storage 106 .
- the binary translator 114 includes an analysis block 116 , a detection block 118 , and a code translation block 120 .
- analysis block 116 analyzes an original code, run-time information and a translated code to generate profiling information.
- Detection block 118 receives the generated profiling information and a threshold value and, from these, identifies or detects register values which have lives longer than the threshold value.
- Code translation block 120 uses the profiling information and results generated by detection block 118 to generate translated code. Additional details of the binary translator 114 are described with respect to FIG. 3 .
- FIG. 2 illustrates an example process flow 200 according to an implementation in which long life register values are detected and instructions are included in translated code to shorten the lives thereof.
- code which is to be and/or is being translated by a dynamic binary translator is analyzed and profiled to detect register values with lives longer than a threshold period.
- the analysis and profiling may be performed using the code prior to translation, the translated code, run-time information of the translated code, or any combination thereof.
- examples of a life of a register value are 1) a period between the register value being stored in a register R and the next access of register R and 2) the period between an access and a next access of register R while the register value is stored therein.
- An example of a register value which would be detected as having a life longer than a threshold period of ten instructions is a register value which is stored in a register at instruction number one (1) and not accessed again until, for example, instruction number eighteen (18). Since the number of instructions in the life of the register value is greater than ten, the register value is detected as having a life longer than the threshold period.
- accessing a register is meant in its broadest sense in that the register value is used in some manner, (i.e.
- the lives of register values and the threshold period may be discussed in terms of a number of instructions between two points in the original code. However, this is to simplify discussion herein and should not be interpreted as a limitation. The lives of register values and the threshold period could be measured in terms of any metric which can be used as an indication of a period between two points in the execution of code, such as a number of seconds between the two points, a number of instructions in the translated code between the two points, a number of instructions retired between the two points, or a number of clock cycles that occur between the two points.
- the threshold period may be a programmable threshold. The programmable threshold may be varied based on various conditions such as voltage levels, an altitude of the executing computer, ambient or internal temperatures, and silent data corruption FIT targets based on a market segment.
- At 204 for a register value detected as having a life longer than the threshold, at least one instruction to cause an access to the register storing the register value is included in the translated code at a point during or at the end of the threshold period.
- a register value which is stored at instruction number one (1) and not accessed again until instruction number eighteen (18) a instruction to copy the register value into a temporary location could be inserted before or after instruction number ten (10) to ensure that the life of the register is limited to ten or less instructions.
- FIG. 3 illustrates a block diagram of an example logical arrangement 300 according to one implementation.
- the logical arrangement 300 may be implemented as several components of hardware each configured to perform one or more functions, may be implemented in software or firmware where one or more programs are used to perform the different functions, or may be a combination of hardware, firmware, and/or software.
- the binary translator 114 will be discussed as a set of software routines stored in a computer readable storage medium.
- analysis block 116 analyzes the original code 302 , run-time information 304 and translated code 306 to generate profiling information 308 .
- the profiling information 308 may be generated in the manner discussed above using dynamic profiling.
- the profiling information is not limited to any particular measurement or datum but simply provides information needed by detection block 118 and code translation block 120 .
- Detection block 118 receives the profiling information 308 and a threshold value 310 . From these, detection block 118 identifies or detects register values which have lives longer than the threshold 310 . The detection block 118 then outputs detection result 312 including the identification of the detected register values, an indication of locations to insert instructions to access the registers storing the detected register values and/or any information that may be used by the code translation block 120 to include instructions to access the registers storing the detected register values during the threshold period.
- Code translation block 120 uses profiling information 308 and detection result 312 to generate translated code 306 .
- the code translation block 120 may 1) translate original code 302 from code executable on a first platform to code executable on a second platform; 2) optimize the original code 302 if the original code is already executable by the executing platform; 3) optimize the translated code 306 ; 4) insert instructions in the translated and/or optimized code to access the registers storing the detected long life register values during the threshold period; or 5) a combination thereof.
- the detection block 118 may be integrated into the analysis block 116 or the detection block 118 may receive the original code 302 , run-time information 304 , translated code 306 and threshold 310 and detect long life register values independent of analysis block 116 and the profiling information 308 .
- FIGS. 4 , 5 , and 6 illustrate example inputs and outputs of binary translator 114 according to some implementations.
- the threshold period is a number of instructions between two points in the code.
- FIG. 4 illustrates an example input and output of binary translator 114 in which parameters 400 for the binary translator 114 are a threshold period of two (2) and the access type used to shorten long register value lives is a “read” action (i.e. loading the register value into a temporary location).
- the binary translator receives original code 402 and outputs translated code 404 using parameters 400 .
- binary translator 114 analyzes the original code 402 to determine the lives of register values and to detect register values with lives longer than the threshold period.
- the life 406 of register value V is six. Specifically, six instructions (I1, I2, I3, I4, I5 and I6) occur between the storage of value V in register r and the next instruction to access register r (the copying of value V into register g. As such, register value V is detected as being a long-life register value.
- the binary translator 114 includes instructions 408 in translated code 404 .
- Instructions 408 cause the value V stored in register r to be read into register Tmp between instructions I2 and I3 and again between instructions I4 and I5.
- the life of register value V is reduced to the threshold period of two instructions between storages and/or accesses. In this way, silent data corruption which could not be detected by parity due to multiple errors occurring over the long life of register value V in the original code 402 may be prevented because multiple errors are less likely to occur during the shortened life of register value V in translated code 404 .
- FIG. 5 illustrates an example input and output of binary translator 114 in which parameters 500 for the binary translator 114 are a threshold period of three instructions (3) and the access type used to shorten long register value lives is a “move” action (i.e. moving the register value to a different register).
- the binary translator receives original code 502 and outputs translated code 504 using parameters 500 .
- binary translator 114 analyzes the original code 502 to determine the lives of register values and to detect register values with lives longer than the threshold period.
- the life 506 of register value W is seven. Specifically, seven instructions (I1, I2, I3, I4, I5, I6, and I7) occur between the storage of value W in register r and the next instruction to access register r (the copying of value W into register g). As such, register value W is detected as being a long-life register value.
- the binary translator 114 includes instructions 508 and 510 in the translated code 504 .
- Instruction 508 causes the value W to be moved to register Tmp1 between instructions I3 and I4.
- binary translator 114 inserts another instruction 510 to move the value W from Tmp1 to register Tmp2. Because the four instruction life is not a multiple of the threshold of three, binary translator 114 may vary from inserting the instruction 510 at the end of the threshold period to more evenly split the life of the register value. This is shown in translated code 504 with the placement of instruction 510 between instructions I5 and I6 rather than at the end of the threshold period (between instructions I6 and I7).
- instruction 512 is included in translated code 504 .
- Instruction 512 loads register value W into register g from register Tmp2 rather than register r.
- the life of register value W is prevented from exceeding the threshold period of three instructions between accesses.
- the use of “moves” further prevents any register from even storing a register value for longer than the threshold period. In this way, silent data corruption which could not be detected by parity due to multiple errors occurring over the long life of register value W in the original code 502 may be prevented because multiple errors are less likely to occur during the shortened life of register value W in translated code 504 and because of the reduced period for which any given register stores register value W.
- the life of register value W was greater than the threshold but not a multiple of the threshold.
- binary translator 114 inserted multiple access instructions and subdivided the last period of the life of register value W in original code 502 into periods smaller than the threshold to evenly distribute the inserted accesses.
- implementations are not limited to this approach.
- the manner in which long lives of register values are subdivided can be customized according to the details of the implementation. For example, in an implementations which is less aggressive, the register value lives may be shortened into periods that are substantially longer than the detection threshold value. In short, many variations on the manner in which long register value lives are shortened would be apparent to one of ordinary skill in the art in view of the disclosure provided herein.
- FIG. 6 illustrates an example input and output of binary translator 114 in which parameters 600 for the binary translator 114 are a threshold period of three instructions (3) and the access type used to shorten long register value lives is a “move to memory” action (i.e. moving the register value to cache or system memory).
- the binary translator receives original code 602 and outputs translated code 604 using parameters 600 .
- moving a register value to cache or to system memory may be preferable to keeping the register value in the register file.
- the overhead generated by including many “read” and “move” type accesses over that life may be greater than the overhead generated by moving the value to cache or system memory and then back to the register file.
- cache and system memory use stronger error detection and error correction capabilities than the parity protection typically used for registers, values in cache and system memory can have long lives with less chance of errors such as silent data corruption.
- binary translator 114 analyzes the original code 502 to determine the lives of register values and to detect register values with lives longer than the threshold period.
- the life 606 of register value X is eight. Specifically, eight instructions (I1, I2, I3, I4, I5, I6, I7, and I8) occur between the storage of value X in register r and the next instruction to access register r (the copying of value X into register g). As such, register value X is detected as being a long-life register value.
- the binary translator 114 includes instructions 608 and 610 in translated code 604 .
- Instruction 608 causes the value X to be moved to memory location M[k] before instruction I1.
- Instruction 610 is included at the original end of the life of register value X and causes register value X to be loaded into register g from memory location M[k].
- the life of register value X is prevented from exceeding the threshold period of three instructions between accesses. In this way, silent data corruption which could not be detected by parity due to multiple errors occurring over the long life of register value X in the original code 502 may be prevented.
- the use of the “move to memory” access type removes the need for multiple “read” and “move” type accesses which might have a serious impact on the performance of translated code 604 .
- the processes illustrated herein are shown as a collection of operations in a logical flow graph, which represents a sequence of operations, some or all of which can be implemented in hardware, software or a combination thereof.
- the blocks represent computer-executable instructions stored on one or more computer-readable media that, when executed by one or more processors, perform the recited operations.
- computer-executable instructions include routines, programs, objects, components, data structures and the like that perform particular functions or implement particular abstract data types.
- the order in which the operations are described is not intended to be construed as a limitation. Any number of the described blocks can be combined in any order and/or in parallel to implement the process, and not all of the blocks need be executed.
- FIG. 7 illustrates select components of an example architecture of a system 700 as an example of the environment in which some implementations may operate.
- System 700 may encompass any of a variety of devices, such as a desktop computing device, a laptop computing device, tablet computing device, netbook computing device, wireless computing device, or a server computing device, as several nonlimiting examples.
- the system 700 may include one or more cores 702 in one or more processors, such as a processor 704 , a clock generator 706 , a memory 708 (e.g., random access memory (RAM)), an input/output control hub 710 , and a power source 712 (e.g., a battery or a power supply).
- the processor 704 may include a single core 702 - 1 or multiple cores 702 - 1 , . . . , 702 -N (where N is an integer > 1 ), such as a first core 702 - 1 and one or more additional cores, up to and including an N th core 702 -N.
- the processor 704 may include a memory controller 714 to enable access (e.g., reading from or writing) to the memory 708 .
- at least one of the memory 708 and mass storage 716 may include may store instructions, which when executed by the processor 704 , cause processor 704 to perform the functions of the binary translator 114 .
- the clock generator 706 may generate a clock signal that is the basis for an operating frequency of one or more of the N cores 702 of the processor 704 .
- one or more of the N cores 702 may operate at a multiple of the clock signal generated by the clock generator 706 .
- the input/output control hub 710 may be coupled to a mass storage 716 .
- the mass storage 716 may include one or more non-volatile storage devices, such as disk drives, solid state drives, and the like.
- An operating system 718 may be stored in the mass storage 716 .
- the input/output control hub 710 may be coupled to a network port 720 .
- the network port 720 may enable the system 700 to communicate with other devices via a network 722 .
- the network 722 may include multiple networks, such as wireline networks (e.g., public switched telephone network and the like), wireless networks (e.g., 802.11, code division multiple access (CDMA), global system for mobile (GSM), Long Term Evolution (LTE) and the like), other types of communication networks, or any combination thereof.
- the input/output control hub 710 may be coupled to a display device 724 that is capable of displaying text, graphics, and the like.
- the processor 704 may include multiple computing units or multiple cores.
- the processor 704 can be implemented as one or more microprocessors, microcomputers, microcontrollers, digital signal processors, central processing units, state machines, logic circuitries, and/or any devices that manipulate signals based on operational instructions.
- the processor 704 can be configured to fetch and execute computer-readable instructions stored in the memory 708 or other computer-readable media.
- the memory 708 is an example of computer storage media for storing instructions which are executed by the processor 704 to perform the various functions described above.
- the memory 708 may generally include both volatile memory and non-volatile memory (e.g., RAM, ROM, or the like).
- the memory 708 may be referred to as memory or computer storage media herein, and may be a non-transitory media capable of storing computer-readable, processor-executable program instructions as computer program code that can be executed by the processor 704 as a particular machine configured for carrying out the operations and functions described in the implementations herein.
- this disclosure provides various example implementations, as described and as illustrated in the drawings. However, this disclosure is not limited to the implementations described and illustrated herein, but can extend to other implementations, as would be known or as would become known to those skilled in the art. Reference in the specification to “one implementation,” “this implementation,” “these implementations” or “some implementations” means that a particular feature, structure, or characteristic described is included in at least one implementation, and the appearances of these phrases in various places in the specification are not necessarily all referring to the same implementation.
Abstract
Description
- This disclosure relates to the technical field of microprocessors.
- Soft errors are an increasing problem. Also, the trend toward increasing the number of processor cores creates a need to add reliability features to reduce the per core failure rate, such as the failure in time (FIT) rate. Due to constraints such as latency and overhead, register files are currently protected only by parity, which is a problem when multiple strikes or multiple errors occur. Moreover, parity can only detect an odd number of errors. When registers store register values with long lives (i.e. the values are stored for long periods without being read), multiple errors may occur undetected. This problem is known as Silent Data Corruption.
- One option to avoid Silent Data Corruption is scrubbing the register file. However, scrubbing the register file may have a significant impact on performance. Another option is using stronger error detection and correction codes in register files. However, stronger codes can create significant latency issues and may require greater area on a chip.
- The detailed description is set forth with reference to the accompanying drawing figures. In the figures, the left-most digit(s) of a reference number identifies the figure in which the reference number first appears. The use of the same reference numbers in different figures indicates similar or identical items or features.
-
FIG. 1 illustrates an example system according to some implementations. -
FIG. 2 illustrates an example process flow according to some implementations. -
FIG. 3 illustrates select components of an example logic block diagram according to some implementations. -
FIG. 4 illustrates an example translation according to some implementations. -
FIG. 5 illustrates an example translation according to some implementations. -
FIG. 6 illustrates an example translation according to some implementations. -
FIG. 7 illustrates an example system in which some implementations may operate. - This disclosure includes techniques and arrangements for detecting long life register values during binary translation and shortening the lives of the detected register values by including instructions to access the register values in the code to be output by the binary translator. Some implementations may use a binary translator to detect register values that have a long life and to include instructions in translated code to shorten the lives of the detected register values. The detection of long life register values may be based on: 1) an analysis of code prior to translation; 2) an analysis of translated code; 3) run-time information regarding the translated code, or 4) any combination thereof.
- Binary translation is a technique that may be used to create a version of a binary program originally executable on one processor-based platform that is, after translation, usable on a different processor-based platform. For example, a binary translator may convert a program intended for an Apple® PowerPC processor based platform into a program executable on an Apple platform based on an Intel® Core Duo® Processor. However, as used herein, binary translation should not be interpreted as limited to converting a program intended for execution on a first platform to a program executable on a second platform. Rather, as used herein, binary translation includes any rewriting of a binary program, such as for dynamic optimization of a program which is already executable on an executing platform. As such, herein, translated code refers to code that has been converted for use on a different platform, code that has been optimized, or code that has been both converted and optimized.
- As alluded to above, programs, or portions of programs, can be optimized when the software is executed (i.e. optimized at “run-time”). This “dynamic optimization” can benefit from profiling information that includes much information relating the actual execution of the portions of the program executed. Programs can be profiled while operating on test data or while operating on actual end-user data. By profiling software in the end-user environment, the resulting profiling information reflects actual usage patterns, and can aid in the dynamic optimization process.
- In a non-limiting example implementation, dynamic translation and optimization using dynamic profiling can be performed in two phases. The first phase (e.g., a cold translation phase) translates blocks (e.g., a sequence of instructions) of instructions for a first platform to blocks of instructions for a second platform. These cold blocks may or may not be optimized and are instrumented with instructions to measure the different aspects of the execution of the cold blocks. For example, the instrumentation instructions could count a number of times a respective cold block is executed or may compute a number of cycles occurring in the life of a register value. It should be noted that results obtained by instrumentation instructions are not necessarily precise, but rather may be estimates or approximations. After the cold block has been executed (or executed a sufficient number of times to give a reasonably reliable profile), the second phase (e.g., a hot translation phase) begins. In the hot translation phase, the cold blocks are optimized using the profile information generated during execution of the cold blocks. In some implementations, the cold blocks may not all be optimized, but rather only a subset may be optimized. For example, only cold blocks which are found to have long life register values or cold blocks which are frequently executed may be subjected to hot translation phase optimization.
-
FIG. 1 illustrates an example framework of a processor basedsystem 100 according to some implementations.System 100 is a processor based system including aprocessor 102, amemory 104 to store data and programs executable by the processor, and a storage unit such as astorage 106 all interconnected by asystem bus 108. Theprocessor 102 includes one ormore registers 110 and amicrocode unit 112. - In some implementations, a program embodying a
binary translator 114 may be stored on thestorage 106, loaded intomemory 104 via thesystem bus 108 and executed by theprocessor 102 on data which may also be stored on the disk system and optionally inmemory 104. In some other implementations, thebinary translator 114 may be stored as firmware in themicrocode unit 112 on theprocessor 102 rather than being loaded frommemory 104 andstorage 106. - The
binary translator 114 includes ananalysis block 116, adetection block 118, and acode translation block 120. In general,analysis block 116 analyzes an original code, run-time information and a translated code to generate profiling information.Detection block 118 receives the generated profiling information and a threshold value and, from these, identifies or detects register values which have lives longer than the threshold value.Code translation block 120 uses the profiling information and results generated bydetection block 118 to generate translated code. Additional details of thebinary translator 114 are described with respect toFIG. 3 . -
FIG. 2 illustrates anexample process flow 200 according to an implementation in which long life register values are detected and instructions are included in translated code to shorten the lives thereof. - At 202, code which is to be and/or is being translated by a dynamic binary translator is analyzed and profiled to detect register values with lives longer than a threshold period. As stated above, the analysis and profiling may be performed using the code prior to translation, the translated code, run-time information of the translated code, or any combination thereof.
- As used herein, examples of a life of a register value are 1) a period between the register value being stored in a register R and the next access of register R and 2) the period between an access and a next access of register R while the register value is stored therein. An example of a register value which would be detected as having a life longer than a threshold period of ten instructions is a register value which is stored in a register at instruction number one (1) and not accessed again until, for example, instruction number eighteen (18). Since the number of instructions in the life of the register value is greater than ten, the register value is detected as having a life longer than the threshold period. As used herein, accessing a register is meant in its broadest sense in that the register value is used in some manner, (i.e. read, moved, copied, used in an operation, etc.) Also, herein, the lives of register values and the threshold period may be discussed in terms of a number of instructions between two points in the original code. However, this is to simplify discussion herein and should not be interpreted as a limitation. The lives of register values and the threshold period could be measured in terms of any metric which can be used as an indication of a period between two points in the execution of code, such as a number of seconds between the two points, a number of instructions in the translated code between the two points, a number of instructions retired between the two points, or a number of clock cycles that occur between the two points. Further, in some implementations, the threshold period may be a programmable threshold. The programmable threshold may be varied based on various conditions such as voltage levels, an altitude of the executing computer, ambient or internal temperatures, and silent data corruption FIT targets based on a market segment.
- At 204, for a register value detected as having a life longer than the threshold, at least one instruction to cause an access to the register storing the register value is included in the translated code at a point during or at the end of the threshold period. Continuing the above example of a register value which is stored at instruction number one (1) and not accessed again until instruction number eighteen (18), a instruction to copy the register value into a temporary location could be inserted before or after instruction number ten (10) to ensure that the life of the register is limited to ten or less instructions.
-
FIG. 3 illustrates a block diagram of an examplelogical arrangement 300 according to one implementation. Thelogical arrangement 300 may be implemented as several components of hardware each configured to perform one or more functions, may be implemented in software or firmware where one or more programs are used to perform the different functions, or may be a combination of hardware, firmware, and/or software. For purposes of discussion, thebinary translator 114 will be discussed as a set of software routines stored in a computer readable storage medium. - In operation,
analysis block 116 analyzes the original code 302, run-time information 304 and translatedcode 306 to generateprofiling information 308. Theprofiling information 308 may be generated in the manner discussed above using dynamic profiling. The profiling information is not limited to any particular measurement or datum but simply provides information needed bydetection block 118 andcode translation block 120. -
Detection block 118 receives theprofiling information 308 and athreshold value 310. From these,detection block 118 identifies or detects register values which have lives longer than thethreshold 310. Thedetection block 118 then outputsdetection result 312 including the identification of the detected register values, an indication of locations to insert instructions to access the registers storing the detected register values and/or any information that may be used by thecode translation block 120 to include instructions to access the registers storing the detected register values during the threshold period. -
Code translation block 120 usesprofiling information 308 anddetection result 312 to generate translatedcode 306. In generating the translatedcode 306, thecode translation block 120 may 1) translate original code 302 from code executable on a first platform to code executable on a second platform; 2) optimize the original code 302 if the original code is already executable by the executing platform; 3) optimize the translatedcode 306; 4) insert instructions in the translated and/or optimized code to access the registers storing the detected long life register values during the threshold period; or 5) a combination thereof. - In alternative implementations, the
detection block 118 may be integrated into theanalysis block 116 or thedetection block 118 may receive the original code 302, run-time information 304, translatedcode 306 andthreshold 310 and detect long life register values independent ofanalysis block 116 and theprofiling information 308. -
FIGS. 4 , 5, and 6 illustrate example inputs and outputs ofbinary translator 114 according to some implementations. For simplicity of explanation, in the examples ofFIGS. 4 , 5, and 6 it is assumed that the original codes have already been, do not need, or will not be translated from one platform to another or optimized. As such, only the detection of long life register values and the inclusion of instructions to shorten the register value lives will be discussed. Further, in the discussion related toFIGS. 4 , 5, and 6, the threshold period is a number of instructions between two points in the code. -
FIG. 4 illustrates an example input and output ofbinary translator 114 in whichparameters 400 for thebinary translator 114 are a threshold period of two (2) and the access type used to shorten long register value lives is a “read” action (i.e. loading the register value into a temporary location). Specifically, the binary translator receivesoriginal code 402 and outputs translatedcode 404 usingparameters 400. - In operation,
binary translator 114 analyzes theoriginal code 402 to determine the lives of register values and to detect register values with lives longer than the threshold period. As illustrated inFIG. 4 , thelife 406 of register value V is six. Specifically, six instructions (I1, I2, I3, I4, I5 and I6) occur between the storage of value V in register r and the next instruction to access register r (the copying of value V into register g. As such, register value V is detected as being a long-life register value. - Based on this detection, the
binary translator 114 includesinstructions 408 in translatedcode 404.Instructions 408 cause the value V stored in register r to be read into register Tmp between instructions I2 and I3 and again between instructions I4 and I5. Thus, the life of register value V is reduced to the threshold period of two instructions between storages and/or accesses. In this way, silent data corruption which could not be detected by parity due to multiple errors occurring over the long life of register value V in theoriginal code 402 may be prevented because multiple errors are less likely to occur during the shortened life of register value V in translatedcode 404. -
FIG. 5 illustrates an example input and output ofbinary translator 114 in whichparameters 500 for thebinary translator 114 are a threshold period of three instructions (3) and the access type used to shorten long register value lives is a “move” action (i.e. moving the register value to a different register). Specifically, the binary translator receivesoriginal code 502 and outputs translatedcode 504 usingparameters 500. - In operation,
binary translator 114 analyzes theoriginal code 502 to determine the lives of register values and to detect register values with lives longer than the threshold period. As illustrated inFIG. 5 , thelife 506 of register value W is seven. Specifically, seven instructions (I1, I2, I3, I4, I5, I6, and I7) occur between the storage of value W in register r and the next instruction to access register r (the copying of value W into register g). As such, register value W is detected as being a long-life register value. - Based on this detection, the
binary translator 114 includesinstructions code 504.Instruction 508 causes the value W to be moved to register Tmp1 between instructions I3 and I4. Next, because the number of instructions betweeninstruction 508 and the original end of the life of register value W is four, which is greater than the threshold of three,binary translator 114 inserts anotherinstruction 510 to move the value W from Tmp1 to register Tmp2. Because the four instruction life is not a multiple of the threshold of three,binary translator 114 may vary from inserting theinstruction 510 at the end of the threshold period to more evenly split the life of the register value. This is shown in translatedcode 504 with the placement ofinstruction 510 between instructions I5 and I6 rather than at the end of the threshold period (between instructions I6 and I7). - At the original end of the life of register value W,
instruction 512 is included in translatedcode 504.Instruction 512 loads register value W into register g from register Tmp2 rather than register r. Thus, the life of register value W is prevented from exceeding the threshold period of three instructions between accesses. Further, the use of “moves” further prevents any register from even storing a register value for longer than the threshold period. In this way, silent data corruption which could not be detected by parity due to multiple errors occurring over the long life of register value W in theoriginal code 502 may be prevented because multiple errors are less likely to occur during the shortened life of register value W in translatedcode 504 and because of the reduced period for which any given register stores register value W. - As discussed above, in the
original code 502, the life of register value W was greater than the threshold but not a multiple of the threshold. To handle this,binary translator 114 inserted multiple access instructions and subdivided the last period of the life of register value W inoriginal code 502 into periods smaller than the threshold to evenly distribute the inserted accesses. However, implementations are not limited to this approach. The manner in which long lives of register values are subdivided can be customized according to the details of the implementation. For example, in an implementations which is less aggressive, the register value lives may be shortened into periods that are substantially longer than the detection threshold value. In short, many variations on the manner in which long register value lives are shortened would be apparent to one of ordinary skill in the art in view of the disclosure provided herein. -
FIG. 6 illustrates an example input and output ofbinary translator 114 in whichparameters 600 for thebinary translator 114 are a threshold period of three instructions (3) and the access type used to shorten long register value lives is a “move to memory” action (i.e. moving the register value to cache or system memory). Specifically, the binary translator receivesoriginal code 602 and outputs translatedcode 604 usingparameters 600. - In some situations, moving a register value to cache or to system memory may be preferable to keeping the register value in the register file. For example, in the case of very long life register values, the overhead generated by including many “read” and “move” type accesses over that life may be greater than the overhead generated by moving the value to cache or system memory and then back to the register file. Because cache and system memory use stronger error detection and error correction capabilities than the parity protection typically used for registers, values in cache and system memory can have long lives with less chance of errors such as silent data corruption.
- In operation,
binary translator 114 analyzes theoriginal code 502 to determine the lives of register values and to detect register values with lives longer than the threshold period. As illustrated inFIG. 6 , thelife 606 of register value X is eight. Specifically, eight instructions (I1, I2, I3, I4, I5, I6, I7, and I8) occur between the storage of value X in register r and the next instruction to access register r (the copying of value X into register g). As such, register value X is detected as being a long-life register value. - Based on this detection, the
binary translator 114 includesinstructions code 604.Instruction 608 causes the value X to be moved to memory location M[k] before instruction I1.Instruction 610 is included at the original end of the life of register value X and causes register value X to be loaded into register g from memory location M[k]. Thus, the life of register value X is prevented from exceeding the threshold period of three instructions between accesses. In this way, silent data corruption which could not be detected by parity due to multiple errors occurring over the long life of register value X in theoriginal code 502 may be prevented. Further, the use of the “move to memory” access type removes the need for multiple “read” and “move” type accesses which might have a serious impact on the performance of translatedcode 604. - In the preceding description, for purposes of explanation, numerous specific details are set forth in order to provide a thorough understanding of the described implementations, however, one skilled in the art will appreciate that many other implementations may be practiced without these specific details.
- While several examples have been illustrated herein for discussion purposes, numerous other configurations may be used and thus implementations herein are not limited to any particular configuration or arrangement. For example, the discussion herein refers to signals being output and received by particular components of the binary translator. This should not be taken as a limitation as such communication need not be direct and the particular components need not necessarily be separate functional units. These and other variations would be apparent to one of ordinary skill in the art in view of the disclosure provided herein.
- The processes described herein are only examples provided for discussion purposes. Numerous other variations will be apparent to those of skill in the art in light of the disclosure herein. Further, while the disclosure herein sets forth several examples of suitable frameworks, architectures and environments for executing the techniques and processes herein, implementations herein are not limited to the particular examples shown and discussed.
- The processes illustrated herein are shown as a collection of operations in a logical flow graph, which represents a sequence of operations, some or all of which can be implemented in hardware, software or a combination thereof. In the context of software, the blocks represent computer-executable instructions stored on one or more computer-readable media that, when executed by one or more processors, perform the recited operations. Generally, computer-executable instructions include routines, programs, objects, components, data structures and the like that perform particular functions or implement particular abstract data types. The order in which the operations are described is not intended to be construed as a limitation. Any number of the described blocks can be combined in any order and/or in parallel to implement the process, and not all of the blocks need be executed.
-
FIG. 7 illustrates select components of an example architecture of asystem 700 as an example of the environment in which some implementations may operate.System 700 may encompass any of a variety of devices, such as a desktop computing device, a laptop computing device, tablet computing device, netbook computing device, wireless computing device, or a server computing device, as several nonlimiting examples. - The
system 700 may include one ormore cores 702 in one or more processors, such as aprocessor 704, aclock generator 706, a memory 708 (e.g., random access memory (RAM)), an input/output control hub 710, and a power source 712 (e.g., a battery or a power supply). Theprocessor 704 may include a single core 702-1 or multiple cores 702-1, . . . , 702-N (where N is an integer >1), such as a first core 702-1 and one or more additional cores, up to and including an Nth core 702-N. Theprocessor 704 may include amemory controller 714 to enable access (e.g., reading from or writing) to thememory 708. In some implementations, at least one of thememory 708 andmass storage 716 may include may store instructions, which when executed by theprocessor 704,cause processor 704 to perform the functions of thebinary translator 114. - The
clock generator 706 may generate a clock signal that is the basis for an operating frequency of one or more of theN cores 702 of theprocessor 704. For example, one or more of theN cores 702 may operate at a multiple of the clock signal generated by theclock generator 706. - The input/
output control hub 710 may be coupled to amass storage 716. Themass storage 716 may include one or more non-volatile storage devices, such as disk drives, solid state drives, and the like. Anoperating system 718 may be stored in themass storage 716. - The input/
output control hub 710 may be coupled to anetwork port 720. Thenetwork port 720 may enable thesystem 700 to communicate with other devices via anetwork 722. Thenetwork 722 may include multiple networks, such as wireline networks (e.g., public switched telephone network and the like), wireless networks (e.g., 802.11, code division multiple access (CDMA), global system for mobile (GSM), Long Term Evolution (LTE) and the like), other types of communication networks, or any combination thereof. The input/output control hub 710 may be coupled to adisplay device 724 that is capable of displaying text, graphics, and the like. - As described herein, the
processor 704 may include multiple computing units or multiple cores. Theprocessor 704 can be implemented as one or more microprocessors, microcomputers, microcontrollers, digital signal processors, central processing units, state machines, logic circuitries, and/or any devices that manipulate signals based on operational instructions. Among other capabilities, theprocessor 704 can be configured to fetch and execute computer-readable instructions stored in thememory 708 or other computer-readable media. - The
memory 708 is an example of computer storage media for storing instructions which are executed by theprocessor 704 to perform the various functions described above. Thememory 708 may generally include both volatile memory and non-volatile memory (e.g., RAM, ROM, or the like). Thememory 708 may be referred to as memory or computer storage media herein, and may be a non-transitory media capable of storing computer-readable, processor-executable program instructions as computer program code that can be executed by theprocessor 704 as a particular machine configured for carrying out the operations and functions described in the implementations herein. - Furthermore, this disclosure provides various example implementations, as described and as illustrated in the drawings. However, this disclosure is not limited to the implementations described and illustrated herein, but can extend to other implementations, as would be known or as would become known to those skilled in the art. Reference in the specification to “one implementation,” “this implementation,” “these implementations” or “some implementations” means that a particular feature, structure, or characteristic described is included in at least one implementation, and the appearances of these phrases in various places in the specification are not necessarily all referring to the same implementation.
- Although the subject matter has been described in language specific to structural features and/or methodological acts, the subject matter defined in the appended claims is not limited to the specific features or acts described above. Rather, the specific features and acts described above are disclosed as example forms of implementing the claims. This disclosure is intended to cover any and all adaptations or variations of the disclosed implementations, and the following claims should not be construed to be limited to the specific implementations disclosed in the specification. Instead, the scope of this document is to be determined entirely by the following claims, along with the full range of equivalents to which such claims are entitled.
Claims (22)
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/US2011/068051 WO2013101165A1 (en) | 2011-12-30 | 2011-12-30 | Register error protection through binary translation |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
PCT/US2011/068051 A-371-Of-International WO2013101165A1 (en) | 2011-12-30 | 2011-12-30 | Register error protection through binary translation |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US15/226,854 Continuation US20160342495A1 (en) | 2011-12-30 | 2016-08-02 | Register error protection through binary translation |
Publications (2)
Publication Number | Publication Date |
---|---|
US20130318401A1 true US20130318401A1 (en) | 2013-11-28 |
US9405647B2 US9405647B2 (en) | 2016-08-02 |
Family
ID=48698399
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US13/994,697 Expired - Fee Related US9405647B2 (en) | 2011-12-30 | 2011-12-30 | Register error protection through binary translation |
US15/226,854 Abandoned US20160342495A1 (en) | 2011-12-30 | 2016-08-02 | Register error protection through binary translation |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US15/226,854 Abandoned US20160342495A1 (en) | 2011-12-30 | 2016-08-02 | Register error protection through binary translation |
Country Status (3)
Country | Link |
---|---|
US (2) | US9405647B2 (en) |
TW (3) | TWI603192B (en) |
WO (1) | WO2013101165A1 (en) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9448788B1 (en) * | 2014-01-22 | 2016-09-20 | SecondWrite LLC | Binary rewriting system |
US10528495B2 (en) * | 2015-06-16 | 2020-01-07 | Nordic Semiconductor Asa | Memory watch unit |
US10558437B1 (en) * | 2013-01-22 | 2020-02-11 | Altera Corporation | Method and apparatus for performing profile guided optimization for high-level synthesis |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10296464B2 (en) | 2016-12-09 | 2019-05-21 | Intel Corporation | System, apparatus and method for dynamic profiling in a processor |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6185667B1 (en) * | 1998-04-09 | 2001-02-06 | Teranex, Inc. | Input/output support for processing in a mesh connected computer |
US20050086463A1 (en) * | 2003-09-25 | 2005-04-21 | Quach Tuan M. | Accessing configuration registers by automatically changing an index |
US20060168473A1 (en) * | 2005-01-25 | 2006-07-27 | International Business Machines Corporation | Method and system for deciding when to checkpoint an application based on risk analysis |
US20090037783A1 (en) * | 2007-08-03 | 2009-02-05 | Xavier Vera | Protecting data storage structures from intermittent errors |
US7757040B2 (en) * | 2007-01-30 | 2010-07-13 | International Business Machines Corporation | Memory command and address conversion between an XDR interface and a double data rate interface |
US20110167296A1 (en) * | 2010-01-05 | 2011-07-07 | International Business Machines Corporation | Register file soft error recovery |
US8826257B2 (en) * | 2012-03-30 | 2014-09-02 | Intel Corporation | Memory disambiguation hardware to support software binary translation |
US8966027B1 (en) * | 2010-05-24 | 2015-02-24 | Amazon Technologies, Inc. | Managing replication of computing nodes for provided computer networks |
US8966315B2 (en) * | 2008-08-06 | 2015-02-24 | O'shantel Software L.L.C. | System-directed checkpointing implementation using a hypervisor layer |
USRE45632E1 (en) * | 2005-01-03 | 2015-07-28 | O'shantel Software L.L.C. | Memory-controller-embedded apparatus and procedure for achieving system-directed checkpointing without operating-system kernel support |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7689804B2 (en) * | 2006-12-20 | 2010-03-30 | Intel Corporation | Selectively protecting a register file |
US8397133B2 (en) * | 2008-11-26 | 2013-03-12 | Arizona Board Of Regents For And On Behalf Of Arizona State University | Circuits and methods for dual redundant register files with error detection and correction mechanisms |
US8464035B2 (en) * | 2009-12-18 | 2013-06-11 | Intel Corporation | Instruction for enabling a processor wait state |
US9043580B2 (en) * | 2011-04-07 | 2015-05-26 | Via Technologies, Inc. | Accessing model specific registers (MSR) with different sets of distinct microinstructions for instructions of different instruction set architecture (ISA) |
-
2011
- 2011-12-30 US US13/994,697 patent/US9405647B2/en not_active Expired - Fee Related
- 2011-12-30 WO PCT/US2011/068051 patent/WO2013101165A1/en active Application Filing
-
2012
- 2012-12-22 TW TW105121003A patent/TWI603192B/en not_active IP Right Cessation
- 2012-12-22 TW TW106127133A patent/TW201820138A/en unknown
- 2012-12-22 TW TW101149321A patent/TWI551982B/en not_active IP Right Cessation
-
2016
- 2016-08-02 US US15/226,854 patent/US20160342495A1/en not_active Abandoned
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6185667B1 (en) * | 1998-04-09 | 2001-02-06 | Teranex, Inc. | Input/output support for processing in a mesh connected computer |
US20050086463A1 (en) * | 2003-09-25 | 2005-04-21 | Quach Tuan M. | Accessing configuration registers by automatically changing an index |
USRE45632E1 (en) * | 2005-01-03 | 2015-07-28 | O'shantel Software L.L.C. | Memory-controller-embedded apparatus and procedure for achieving system-directed checkpointing without operating-system kernel support |
US20060168473A1 (en) * | 2005-01-25 | 2006-07-27 | International Business Machines Corporation | Method and system for deciding when to checkpoint an application based on risk analysis |
US7757040B2 (en) * | 2007-01-30 | 2010-07-13 | International Business Machines Corporation | Memory command and address conversion between an XDR interface and a double data rate interface |
US20090037783A1 (en) * | 2007-08-03 | 2009-02-05 | Xavier Vera | Protecting data storage structures from intermittent errors |
US8966315B2 (en) * | 2008-08-06 | 2015-02-24 | O'shantel Software L.L.C. | System-directed checkpointing implementation using a hypervisor layer |
US20110167296A1 (en) * | 2010-01-05 | 2011-07-07 | International Business Machines Corporation | Register file soft error recovery |
US8966027B1 (en) * | 2010-05-24 | 2015-02-24 | Amazon Technologies, Inc. | Managing replication of computing nodes for provided computer networks |
US8826257B2 (en) * | 2012-03-30 | 2014-09-02 | Intel Corporation | Memory disambiguation hardware to support software binary translation |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10558437B1 (en) * | 2013-01-22 | 2020-02-11 | Altera Corporation | Method and apparatus for performing profile guided optimization for high-level synthesis |
US9448788B1 (en) * | 2014-01-22 | 2016-09-20 | SecondWrite LLC | Binary rewriting system |
US10528495B2 (en) * | 2015-06-16 | 2020-01-07 | Nordic Semiconductor Asa | Memory watch unit |
Also Published As
Publication number | Publication date |
---|---|
US20160342495A1 (en) | 2016-11-24 |
WO2013101165A1 (en) | 2013-07-04 |
TWI603192B (en) | 2017-10-21 |
TW201346533A (en) | 2013-11-16 |
TWI551982B (en) | 2016-10-01 |
TW201820138A (en) | 2018-06-01 |
TW201714084A (en) | 2017-04-16 |
US9405647B2 (en) | 2016-08-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Hari et al. | SASSIFI: An architecture-level fault injection tool for GPU application resilience evaluation | |
Dixit et al. | Silent data corruptions at scale | |
US9400732B2 (en) | Performance regression testing in presence of noise | |
US9563547B2 (en) | Testing optimized binary modules | |
US8001432B2 (en) | Uninitialized memory detection using error correction codes and built-in self test | |
US20160342495A1 (en) | Register error protection through binary translation | |
US9003375B2 (en) | Optional logging of debug activities in a real time instruction tracing log | |
KR102028663B1 (en) | Apparatus and method for error detection | |
EP2972878B1 (en) | Mechanism for facilitating dynamic and efficient management of instruction atomicity violations in software programs at computing systems | |
US10304556B2 (en) | Read and write memory scrubber | |
EP3839742A1 (en) | A method for diagnosing power supply failure in a wireless communication device | |
JP2017117442A (en) | Method and device for data flow analysis in processor trace log using compiler-type information | |
Sayadi et al. | A data recomputation approach for reliability improvement of scratchpad memory in embedded systems | |
CN111338864B (en) | Memory problem detection method, device, computer equipment and storage medium | |
US10671512B2 (en) | Processor memory reordering hints in a bit-accurate trace | |
US9619361B2 (en) | Performance profiling apparatus and performance profiling method | |
US9411363B2 (en) | Synchronization in a computing device | |
Tabkhi et al. | Application-specific power-efficient approach for reducing register file vulnerability | |
Bouziane et al. | How could compile-time program analysis help leveraging emerging NVM features? | |
Tabkhi et al. | ARRA: Application-guided reliability-enhanced registerfile architecture for embedded processors | |
KR20170065845A (en) | Processor and controlling method thereof | |
Heinig et al. | Who’s using that memory? A subscriber model for mapping errors to tasks | |
Eker et al. | Error recovery through partial value similarity | |
JP2010211391A (en) | Method and device for monitoring operation of cpu | |
Sorin | The Future |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
AS | Assignment |
Owner name: INTEL CORPORATION, CALIFORNIA Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:VERA, XAVIER;CASADO, JAVIER CARRETERO;MONCHIERO, MATTEO;AND OTHERS;SIGNING DATES FROM 20120314 TO 20120611;REEL/FRAME:028402/0023 |
|
FEPP | Fee payment procedure |
Free format text: PAYOR NUMBER ASSIGNED (ORIGINAL EVENT CODE: ASPN); ENTITY STATUS OF PATENT OWNER: LARGE ENTITY |
|
STCF | Information on status: patent grant |
Free format text: PATENTED CASE |
|
FEPP | Fee payment procedure |
Free format text: MAINTENANCE FEE REMINDER MAILED (ORIGINAL EVENT CODE: REM.); ENTITY STATUS OF PATENT OWNER: LARGE ENTITY |
|
LAPS | Lapse for failure to pay maintenance fees |
Free format text: PATENT EXPIRED FOR FAILURE TO PAY MAINTENANCE FEES (ORIGINAL EVENT CODE: EXP.); ENTITY STATUS OF PATENT OWNER: LARGE ENTITY |
|
STCH | Information on status: patent discontinuation |
Free format text: PATENT EXPIRED DUE TO NONPAYMENT OF MAINTENANCE FEES UNDER 37 CFR 1.362 |
|
FP | Lapsed due to failure to pay maintenance fee |
Effective date: 20200802 |