US20160210213A1 - Measuring execution time of benchmark programs in a simulated environment - Google Patents
Measuring execution time of benchmark programs in a simulated environment Download PDFInfo
- Publication number
- US20160210213A1 US20160210213A1 US14/601,468 US201514601468A US2016210213A1 US 20160210213 A1 US20160210213 A1 US 20160210213A1 US 201514601468 A US201514601468 A US 201514601468A US 2016210213 A1 US2016210213 A1 US 2016210213A1
- Authority
- US
- United States
- Prior art keywords
- processor
- simulation environment
- microarchitecture
- clock cycle
- instruction
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000004088 simulation Methods 0.000 claims abstract description 57
- 230000004044 response Effects 0.000 claims abstract description 10
- 238000000034 method Methods 0.000 claims description 31
- 238000003860 storage Methods 0.000 claims description 25
- 238000004590 computer program Methods 0.000 claims description 12
- 238000010586 diagram Methods 0.000 description 11
- 238000012545 processing Methods 0.000 description 11
- 230000006870 function Effects 0.000 description 7
- 238000013461 design Methods 0.000 description 6
- 238000012360 testing method Methods 0.000 description 5
- 230000005540 biological transmission Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000004519 manufacturing process Methods 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000002360 preparation method Methods 0.000 description 2
- 230000001902 propagating effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- JBRZTFJDHDCESZ-UHFFFAOYSA-N AsGa Chemical compound [As]#[Ga] JBRZTFJDHDCESZ-UHFFFAOYSA-N 0.000 description 1
- RYGMFSIKBFXOCR-UHFFFAOYSA-N Copper Chemical compound [Cu] RYGMFSIKBFXOCR-UHFFFAOYSA-N 0.000 description 1
- 229910001218 Gallium arsenide Inorganic materials 0.000 description 1
- 229910000577 Silicon-germanium Inorganic materials 0.000 description 1
- LEVVHYCKPQWKOP-UHFFFAOYSA-N [Si].[Ge] Chemical compound [Si].[Ge] LEVVHYCKPQWKOP-UHFFFAOYSA-N 0.000 description 1
- 239000000872 buffer Substances 0.000 description 1
- 230000008867 communication pathway Effects 0.000 description 1
- 229910052802 copper Inorganic materials 0.000 description 1
- 239000010949 copper Substances 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 239000002994 raw material Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3457—Performance evaluation by simulation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/3024—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a central processing unit [CPU]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3409—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
- G06F11/3428—Benchmarking
Definitions
- the present disclosure relates to measuring computer processor performance, and more specifically, to instrumenting benchmark programs with microarchitecture instructions.
- Measuring the performance of computer processors typically occur by way of one or more benchmark programs.
- the benchmark programs instruct the processor to perform a series of tasks that stress the capabilities of the processor. Because the benchmark program provides the same instructions to different processors, the performance of the differing processors may be compared.
- the performance of differing processors may be measured by measuring the time it takes to complete the benchmark program.
- the processors may also be measured by counting the number of processing cycles that a processor takes to complete the benchmark program.
- Embodiments of the disclosure may include a method, a system, and a computer program product for measuring performance of a processor in a simulation environment.
- a code segment of a benchmark program is instrumented with a microarchitecture instruction.
- a first clock cycle indicative of the processor before executing the benchmark program is captured.
- the code segment and benchmark program are executed by the processor and a processor return related to the microarchitecture instruction is intercepted.
- a second clock cycle indicative of the processor after executing the code segment is captured.
- the simulation environment determines a performance characteristic of the processor from the first clock cycle and the second clock cycle.
- FIG. 1 depicts an example simulation environment utilized in some embodiments of the invention.
- FIG. 2 depicts an exemplar method for determining the performance of a processor consistent with embodiments of the invention.
- FIG. 3 depicts an example of a simulation environment performing the steps of debugging the processor consistent with embodiments of the invention.
- FIG. 4 depicts an exemplar method for determining a list of unused microarchitecture instructions for use in various embodiments of the invention.
- FIG. 5 depicts a high-level block diagram of an example system for implementing one or more embodiments of the invention.
- aspects of the present disclosure relate to benchmarking processors, more particular aspects relate to measuring performance of microprocessors by instrumenting microarchitecture instructions and counting processing cycles. While the present disclosure is not necessarily limited to such applications, various aspects of the disclosure may be appreciated through a discussion of various examples using this context.
- processor performance is vital for processor designers during design and development of a microprocessor (alternatively, processor).
- Processor performance is usually measured by the amount of time it takes a processor to complete one or more tasks.
- Obtaining accurate information about a processor's performance allows processor designers to alter the basic layout of a processor in ways that yield increasing performance.
- processor design is costly, once a processor is mass produced for use as a central processing unit the design will not normally be altered until a subsequent processor is designed. Thus, processor designers must ensure processor performance is verified across one or more scenarios the processor will encounter during its lifetime. Additionally, other entities rely on understanding the performance of a processor, including operating system architects and compiler designers.
- Measuring the performance of a newly designed processor may be accomplished by manufacturing a sample processor.
- the sample processor will be created using the same techniques that a finalized processor traverses when the finalized processor is mass produced.
- the sample processor may then be benchmarked by running one or more programs.
- First, the lag time to go from a newly designed processor to a sample processor may be months.
- the manufacture of the sample processor may utilize a large and inefficient amount of exotic raw materials (such as silicon germanium and gallium arsenide).
- the processor may be intended for a new die-size that is untested.
- processor designers have come to rely increasingly on testing processors in a virtual (or simulation) environment.
- the processor herein, virtualized processor
- the virtualized processor is simulated by a computer. This allows users to design, implement, and test a virtualized processor (or simulated processor), then alter the design and test again.
- a drawback to the simulation environment is that the virtualized processor runs much slower than a sample processor. Often times any application running on the virtualized processor runs orders of magnitude slower than the sample processor. This is magnified when processor designers are trying to run benchmark programs. This makes benchmarking processors in a virtual environment difficult. Because the benchmarks take such an extended amount of time, processor designers cannot compare the results with existing processors. Additionally, because some benchmarks take several orders of magnitude longer to complete, processor designers must alter the benchmark. The altered benchmark allows processor designers to more quickly measure performance and thus iterate processor designs. However, the altered benchmark may not provide an accurate test of all the capabilities of the newly designed processor.
- One method that produces reliable and comparable results is to measure the clock-cycles of a physical processor.
- the benchmark is instrumented by placing a break-point at the end of the benchmark.
- the current clock-cycle is retried from the physical processor, and the physical processor is instructed to execute the benchmark program.
- execution stops at the inserted break-point and the current clock-cycle is again retrieved.
- a cycle-count may be determined.
- This cycle-count may be used to compare physical processors with each other. But, because of the simulation environment this is normally not applicable to virtualized processors. In the simulation environment the virtualized processor is being instrumented by the simulation environment. The simulation environment can watch the virtualized processor as it executes its instruction set architecture (herein, ISA) including calling any microcode or millicode instruction.
- ISA instruction set architecture
- the operating system and the benchmark program may be binary programs, the simulation environment cannot tell when execution of either the operating system or the benchmark program begins or ends. Additionally, the operating system may vary in the amount of tasks or the order the tasks that are performed before reporting the completion of the benchmark program. Thus, the simulation environment cannot reliably determine the cycle-count because there is no consistent way to obtain the clock-cycles of the virtualized processor after the execution of the benchmark program.
- microarchitecture break-point may enable processor designers to repeatedly and reliably measure the performance of processors.
- the microarchitecture break-point may be used in a simulation environment to measure a virtualized processor, or in a live environment with a real processor.
- the simulation environment may run unaltered benchmarks, such as those conventionally used in a live environment.
- the simulation environment may also run altered benchmarks.
- the simulation environment may allow processor designers to consistently determine the cycle-count of a processor.
- the microarchitecture break-point may be utilized to instrument a benchmark program.
- the microarchitecture break-point may be inserted at the end of the benchmark program.
- the processor executes the microarchitecture break-point, the processor may call a microarchitecture instruction outside of the operating system and the benchmark program running on the processor. The cycle-count at the microarchitecture instruction may be determined.
- the microarchitecture break-point may be placed in the middle of the benchmark program. Multiple microarchitecture break-points may be placed in the middle or at the end of the benchmark program.
- the microarchitecture break-point may be a microcode instruction.
- the microarchitecture break-point may be a millicode instruction.
- the microarchitecture break-point may be microarchitecture instructions other than microcode or millicode instructions.
- the microarchitecture break-point may be a default instruction, such as an error code.
- the error code may be indicative that a microarchitecture instruction is not defined or does not otherwise exist.
- the microarchitecture break-point may utilize a microarchitecture instruction that is part of a processor's functional ISA.
- the microarchitecture break-point may utilize a microarchitecture instruction that is not part of the processor's functional ISA (e.g., a microarchitecture instruction utilized for debugging the processor).
- the microarchitecture break-point may be determined by analyzing which microarchitecture instructions that are part of a processor's functional ISA are not utilized by an operating system or benchmark program.
- the microarchitecture instruction may be located in read-only memory.
- the microarchitecture instruction may be located in read-write memory.
- the microarchitecture instruction may be located outside of the processor (e.g., SRAM, flash memory, etc.).
- the microarchitecture instruction may be located in the processor (e.g., a control store, a jump table, etc.).
- the microarchitecture instruction may be selected from a set of microarchitecture instructions, some of which are located inside the processor while others are located outside of the processor.
- the microarchitecture instruction may be loaded from a low-level operating system (i.e., a BIOS) or a high-level operating system.
- the microarchitecture instruction may be loaded from a simulation environment.
- FIG. 1 depicts an example simulation environment 100 in accordance with embodiments of the invention.
- the simulation environment comprises the following: a computer system 110 , a data source 120 that stores programs and other data, a simulated processor 130 running on the computer system, and an operating system 140 that is executed by the simulated processor.
- the simulation environment 100 may determine the performance of simulated processor 130 by calculating a cycle-count 150 .
- the components of the simulation environment 100 may communicate with each other directly or through a network (not depicted).
- the simulation environment 100 may comprise additional details or features not depicted, and it should be appreciated that the simulation environment is provided for exemplar purposes only.
- the computer system 110 may load data relevant to determining the performance of the simulated processor 130 from the data source 120 .
- the data source 120 may contain simulated processor code 122 , operating system code 124 , and benchmark program code 126 .
- the data source 120 may contain other code or data not depicted, such as other benchmark programs, benchmark program results, or other simulated processors.
- the data source 120 may also contain a list of microarchitecture instructions 132 .
- the computer system 110 may load the simulated processor 130 from the data source 120 .
- the computer system 110 may instruct the simulated processor 130 to load the operating system 140 .
- the computer system 110 may be comprised of one or more hardware components (not depicted)—including the components depicted in FIG. 5 .
- the simulated processor 130 of the simulation environment 100 executes the operating system 140 and also the benchmark program 142 .
- the simulated processor 130 may be a desktop processor and the operating system 140 may be any desktop operating system including Windows, Macintosh, or Linux.
- the simulated processor 130 may be a mobile device processor and the operating system 140 may be any mobile operating system including iOS, Android, or Windows Phone.
- the simulated processor 130 may include a list of microarchitecture instructions 132 used by the simulated processor to provide the operating system 140 with an ISA.
- the list of microarchitecture instructions 132 may be loaded by the computer system 110 to the simulated processor 130 .
- the list of microarchitecture instructions 132 may be loaded from the data source 120 .
- the benchmark program 142 is executed by the simulated processor 130 through the operating system 140 .
- the benchmark program 142 may be instrumented with an inserted microarchitecture instruction 144 from the list of microarchitecture instructions 132 .
- the inserted microarchitecture instruction 144 may be inserted at the end of the benchmark program 142 .
- the inserted microarchitecture instruction 144 may be inserted in the middle of the benchmark program 142 .
- a second inserted microarchitecture instruction (not depicted) may be inserted into the benchmark program 142 .
- the performance of the simulated processor 130 may be determined by calculating the cycle-count 150 .
- the computer system may not be able to examine the benchmark program until after execution of the operating system ceases. But, when the benchmark program 142 calls the inserted microarchitecture instruction 144 , the computer system 110 knows the status of the simulated processor's execution. At this point the computer system 110 may determine the cycle-count 150 .
- the cycle-count 150 may utilize a clock-cycle of the simulated processor 130 before execution of the benchmark program 142 and the clock-cycle of the simulated processor after execution of the inserted microarchitecture instruction 144 .
- the benchmark program 142 begins at a clock-cycle “n” of the simulated processor 130 .
- the simulated processor 130 is executing the benchmark program 142
- the simulated processor is also executing the operating system 140 .
- the clock-cycles are increasing.
- the simulated processor 130 executes the inserted microarchitecture instruction 144 .
- the simulated processor has gone through “y” clock-cycles.
- the simulated processor 130 will leave the benchmark program 144 and the operating system 140 to access the microarchitecture instruction from the list of microarchitecture instructions 132 .
- the computer system 110 will monitor this access and know that the benchmark program has finished execution by the simulated processor 130 .
- the computer system 110 knows that the benchmark program 142 began execution at clock-cycle “n” and the benchmark program ended execution at clock-cycle “n+y.”
- FIG. 2 depicts an exemplar method 200 for determining the performance of a processor.
- Method 200 may be utilized to determine the performance of a physical processor.
- Method 200 may also be utilized to determine the performance of a simulated processor. Because method 200 utilizes cycle-counts, the performance of physical processors and simulated processors may be compared.
- a method different than method 200 may be utilized to determine the performance of a processor.
- the method 200 may be executed by a computer system.
- the benchmark may be retrieved, at 220 , by the computer system.
- the computer system steps through the benchmark, at 222 , line-by-line until reaching a point of interest at 224 for a potential performance metric.
- the point of interest is a certain segment of the benchmark program.
- the point of interest is the entire benchmark program.
- an unused microarchitecture instruction is inserted, at 226 , just after the point of interest. If the benchmark has been stepped through in its entirety, at 228 , then the computer system, proceeds to ready the processor at 230 . If the benchmark has not been stepped through in its entirety, at 222 and 228 , then again line-by-line the program is analyzed for points of interest at 224 .
- the steps 220 - 228 may be performed by a user in conjunction with the computer system. For example, a user determines one or more sections of a benchmark program that are relevant in determining the performance of a processor. The user will place an unused microarchitecture instruction into the benchmark program before each section. The user will also place an unused microarchitecture instruction into the benchmark program after each section.
- the computer system prepares the processor at 230 .
- the preparation of the processor, at 230 may include allocation of resources from the computer system (e.g., memory and processing cycles).
- the preparation of the processor, at 230 includes providing power and loading a low-level operating system (i.e., a BIOS) that initializes the processor.
- the benchmark environment is loaded at 240 .
- the benchmark environment may include an operating system and the benchmark program that has been instrumented with the microarchitecture instructions.
- the benchmark environment may include additional tasks designed to stress the processor and allow performance of cache hierarchies, multi-threading, or other performance characteristics of the processor to be observed.
- the cycle-count of the processor is retrieved, at 250 , and execution of the benchmark program commences at 260 .
- the cycle-count of the processor, at 250 may be just before the benchmark program is executed. In some embodiments, the cycle-count of the processor, at 250 , may be during the initial stages of execution of the benchmark program. In some embodiments, the cycle-count of the processor may be retrieved, at 250 , by forcing the processor to execute another unused microarchitecture instruction (not depicted). When the processor executes the other unused microarchitecture instruction, the computer system may retrieve the cycle-count of the processor before execution of the benchmark program.
- the processor will reach the inserted unused microarchitecture instruction and the computer system will detect this instruction. If an unused microarchitecture instruction is reached, at 262 , the computer system will retrieve the cycle-count at 264 . The computer system may calculate the performance of the processor, at 266 , by subtracting the cycle-count retrieved at 250 from the cycle-count retrieved at 264 . If the processor has reached the end of the benchmark, at 268 , the method 200 ends at 270 . If the processor has not reached the end of the benchmark, at 268 , the processor will continue the benchmark and the computer system will continue to monitor for unused microarchitecture instructions at 262 .
- FIG. 3 depicts an example of a simulation environment 300 performing the steps of debugging the processor consistent with embodiments of the invention.
- the simulation environment 300 comprises a simulator 310 , a set of code 320 , and a simulated processor 330 .
- the simulation environment 300 may allow a user to instrument benchmark programs with microarchitecture instructions. After instrumenting the benchmark programs, a user may determine the cycle-count of the processor 330 from the simulation environment 300 . The cycle-count of the processor 330 may be compared with the cycle-count of other processors that have run the benchmark program.
- the simulator 310 may include a debug facility 312 that provides break-point management.
- the debug facility 312 may include a counter 314 that records cycles of the simulated processor 330 as the simulated processor performs tasks.
- the simulator 310 may store one or more counter values 316 that refer to the cycle-count of the simulated processor 330 .
- the simulator 310 loads the simulated processor 330 from the set of code 320 .
- the set of code may be in a compiled format.
- the set of code 320 may be in the form of a hardware description language (e.g., VHDL).
- the simulated processor 330 may include millicode 332 that contains an opcode branch table.
- the simulated processor 330 may execute a linux kernel 334 .
- the simulated processor 330 may also execute a benchmark program 336 .
- the benchmark program may be in the form of binary code that has been precompiled with a special opcode.
- the simulated processor may run the benchmark program 336 by way of the linux kernel 334 .
- the benchmark program 336 is a process running from the linux kernel 334 .
- the simulation environment 300 performs the benchmark program 336 .
- the steps disclosed are for exemplar purposes and that other or different steps may occur.
- the disclosed steps may occur in another order, may be repeated, may differ in scope, and may differ in number.
- the benchmark program 336 runs the last instruction is completed at 350 .
- the special opcode gets executed and causes a jump into the millicode branch table at 352 .
- the millicode entry sequences gets executed, and the break-point is triggered at 354 .
- the debug facility 312 takes control and outputs the counter value at 356 .
- the debug facility returns control to the millicode 332 of the simulated processor 330 at 358 .
- the millicode 332 returns to the benchmark program at 360 .
- FIG. 4 depicts an exemplar method 400 for determining unused microarchitecture instructions.
- a user may not know which microarchitecture instructions are used for debugging or are otherwise available for instrumentation of a benchmark program.
- Method 400 may allow the user to determine one or microarchitecture instructions not utilized by the operating system or the benchmark program being executed by the newly developed processor.
- a processor is loaded, at 420 , by a computer system and initialized. After loading the processor, all of the microarchitecture instructions associated with the processor and its ISA may be retrieved at 430 .
- the act of initializing the processor may involve retrieval of microarchitecture instructions. For example, when a bug is found in a processor, a processor vendor will release an updated set of microcode. A motherboard manufacturer may incorporate the updated set of microcode into an updated BIOS. After a user downloads and updates a motherboard with the updated BIOS, the motherboard's BIOS will update the processor at boot with the updated microcode. Thus, when the computer system instructs the motherboard to load the processor, the updated microcode can be retrieved. It should be appreciated that both physical and simulated processors can utilize updated microcode as discussed in the example above.
- a list of microarchitecture instructions are recorded by the computer instructions.
- the list may be comprised of all of the microarchitecture instructions loaded at 430 .
- the list may be comprised of additional microarchitecture instructions. For example, if an updated set of microarchitecture instructions no longer includes a certain microarchitecture instruction but the control store of the processor still has a reference to this excluded microarchitecture instruction.
- the referenced excluded microarchitecture instruction may be a potential unused microarchitecture instruction for instrumenting the processor.
- the computer system instructs the processor to load an operating system at 450 .
- the computer system detects if the act of loading uses a microarchitecture instruction at 452 . If the computer system does detect usage of a microarchitecture instruction, at 452 , the computer system may remove that microarchitecture instruction from the list of microarchitecture instructions at 454 . In some embodiments, the computer system may flag the operating system load-related microarchitecture instruction instead of removing it from the list of microarchitecture instructions. If the computer system does not detect usage of an operating system load-related microarchitecture instruction, at 452 , the computer system will determine if the operating system has finished loading at 456 .
- the computer system will instruct the processor to load the benchmark program at 460 .
- the computer system detects if the act of loading uses a microarchitecture instruction at 462 . If the computer does detect usage of a benchmark program load-related microarchitecture instruction, at 462 , the computer system may remove the benchmark program load-related microarchitecture instruction from the list of microarchitecture instructions at 464 . In some embodiments, the computer system may flag the benchmark program load-related microarchitecture instruction instead of removing it from the list of microarchitecture instructions. If the computer system does not detect usage of a benchmark program load-related microarchitecture instruction, at 462 , the computer system will determine if the benchmark program has finished loading at 466 .
- the computer system will instruct the processor to execute the benchmark program at 470 .
- the computer system detects if the act of executing uses a microarchitecture instruction at 472 . If the computer does detect usage of a benchmark program execution-related microarchitecture instruction, at 472 , the computer system may remove the benchmark program execution-related microarchitecture instruction from the list of microarchitecture instructions at 474 . In some embodiments, the computer system may flag the benchmark program execution-related microarchitecture instruction instead of removing it from the list of microarchitecture instructions. If the computer system does not detect usage of a benchmark program execution-related microarchitecture instruction, at 472 , the computer system will determine if the benchmark program has finished executing at 476 . If the benchmark program has finished executing, at 476 , the method 400 will end at 480 . At this point the list of microarchitecture instructions generated by method 400 are unused by the processor, and thus may be usable to instrument the benchmark program.
- a microarchitecture instruction selected from the list of microarchitecture instructions generated by method 400 may be useful for placement at the end of the benchmark program.
- method 400 may not be applicable.
- a user may desire to instrument a benchmark program by placing microarchitecture instruction at the beginning of a benchmark program.
- the microarchitecture instruction may still perform operations that alter or otherwise modify code within the simulated environment, including the simulated processor. Modification of the operation of the simulated processor may alter the execution of the benchmark program before it completes. If a user selects an instruction from the list of microarchitecture instructions generated by method 400 , they may need to ensure this instruction does not otherwise alter execution of the benchmark program before completion and before a cycle-count can be retrieved.
- FIG. 5 depicts the representative major components of an exemplary computer system 001 that may be used, in accordance with embodiments of the invention. It is appreciated that individual components may have greater complexity than represented in FIG. 5 , components other than or in addition to those shown in FIG. 5 may be present, and the number, type, and configuration of such components may vary. Several particular examples of such complexities or additional variations are disclosed herein. The particular examples disclosed are for exemplar purposes only and are not necessarily the only such variations.
- the computer system 001 may comprise a processor 010 , memory 020 , an input/output interface (herein I/O or I/O interface) 030 , and a main bus 040 .
- the main bus 040 may provide communication pathways for the other components of the computer system 001 . In some embodiments, the main bus 040 may connect to other components such as a specialized digital signal processor (not depicted).
- the processor 010 of the computer system 001 may be comprised of one or more CPUs 012 A, 012 B, 012 C, 012 D (herein 012 ).
- the processor 010 may additionally be comprised of one or more memory buffers or caches (not depicted) that provide temporary storage of instructions and data for the CPUs 012 .
- the CPUs 012 may perform instructions on input provided from the caches or from the memory 020 and output the result to caches or the memory.
- the CPUs 012 may be comprised of one or more circuits configured to perform one or methods consistent with embodiments of the invention.
- the computer system 001 may contain multiple processors 010 typical of a relatively large system; however, in other embodiments the computer system may alternatively be a single processor with a singular CPU 012 .
- the memory 020 of the computer system 001 may be comprised of a memory controller 022 and one or more memory modules 024 A, 024 B, 024 C, 024 D (herein 024 ).
- the memory 020 may comprise a random-access semiconductor memory, storage device, or storage medium (either volatile or non-volatile) for storing data and programs.
- the memory controller 022 may communicate with the processor 010 facilitating storage and retrieval of information in the memory modules 024 .
- the memory controller 022 may communicate with the I/O interface 030 facilitating storage and retrieval of input or output in the memory modules 024 .
- the memory modules 024 may be dual in-line memory modules or DIMMs.
- the I/O interface 030 may comprise an I/O bus 050 , a terminal interface 052 , a storage interface 054 , an I/O device interface 056 , and a network interface 058 .
- the I/O interface 030 may connect the main bus 040 to the I/O bus 050 .
- the I/O interface 030 may direct instructions and data from the processor 010 and memory 030 to the various interfaces of the I/O bus 050 .
- the I/O interface 030 may also direct instructions and data from the various interfaces of the I/O bus 050 to the processor 010 and memory 030 .
- the various interfaces may comprise the terminal interface 052 , the storage interface 054 , the I/O device interface 056 , and the network interface 058 .
- the various interfaces may comprise a subset of the aforementioned interfaces (e.g., an embedded computer system in an industrial application may not include the terminal interface 052 and the storage interface 054 ).
- Logic modules throughout the computer system 001 may communicate failures and changes to one or more components to a hypervisor or operating system (not depicted).
- the hypervisor or the operating system may be allocate the various resources available in the computer system 001 and track the location of data in memory 020 and of processes assigned to various CPUs 012 .
- aspects of the logic modules capabilities may be combined or redistributed.
- the present invention may be a system, a method, and/or a computer program product.
- the computer program product may include a computer readable storage medium (or media) having computer readable program instructions thereon for causing a processor to carry out aspects of the present invention.
- the computer readable storage medium can be a tangible device that can retain and store instructions for use by an instruction execution device.
- the computer readable storage medium may be, for example, but is not limited to, an electronic storage device, a magnetic storage device, an optical storage device, an electromagnetic storage device, a semiconductor storage device, or any suitable combination of the foregoing.
- a non-exhaustive list of more specific examples of the computer readable storage medium includes the following: a portable computer diskette, a hard disk, a random access memory (RAM), a read-only memory (ROM), an erasable programmable read-only memory (EPROM or Flash memory), a static random access memory (SRAM), a portable compact disc read-only memory (CD-ROM), a digital versatile disk (DVD), a memory stick, a floppy disk, a mechanically encoded device such as punch-cards or raised structures in a groove having instructions recorded thereon, and any suitable combination of the foregoing.
- RAM random access memory
- ROM read-only memory
- EPROM or Flash memory erasable programmable read-only memory
- SRAM static random access memory
- CD-ROM compact disc read-only memory
- DVD digital versatile disk
- memory stick a floppy disk
- a mechanically encoded device such as punch-cards or raised structures in a groove having instructions recorded thereon
- a computer readable storage medium is not to be construed as being transitory signals per se, such as radio waves or other freely propagating electromagnetic waves, electromagnetic waves propagating through a waveguide or other transmission media (e.g., light pulses passing through a fiber-optic cable), or electrical signals transmitted through a wire.
- Computer readable program instructions described herein can be downloaded to respective computing/processing devices from a computer readable storage medium or to an external computer or external storage device via a network, for example, the Internet, a local area network, a wide area network and/or a wireless network.
- the network may comprise copper transmission cables, optical transmission fibers, wireless transmission, routers, firewalls, switches, gateway computers and/or edge servers.
- a network adapter card or network interface in each computing/processing device receives computer readable program instructions from the network and forwards the computer readable program instructions for storage in a computer readable storage medium within the respective computing/processing device.
- Computer readable program instructions for carrying out operations of the present invention may be assembler instructions, instruction-set-architecture (ISA) instructions, machine instructions, machine dependent instructions, microcode, firmware instructions, state-setting data, or either source code or object code written in any combination of one or more programming languages, including an object oriented programming language such as Smalltalk, C++ or the like, and conventional procedural programming languages, such as the “C” programming language or similar programming languages.
- the computer readable program instructions may execute entirely on the user's computer, partly on the user's computer, as a stand-alone software package, partly on the user's computer and partly on a remote computer or entirely on the remote computer or server.
- the remote computer may be connected to the user's computer through any type of network, including a local area network (LAN) or a wide area network (WAN), or the connection may be made to an external computer (for example, through the Internet using an Internet Service Provider).
- electronic circuitry including, for example, programmable logic circuitry, field-programmable gate arrays (FPGA), or programmable logic arrays (PLA) may execute the computer readable program instructions by utilizing state information of the computer readable program instructions to personalize the electronic circuitry, in order to perform aspects of the present invention.
- These computer readable program instructions may be provided to a processor of a general purpose computer, special purpose computer, or other programmable data processing apparatus to produce a machine, such that the instructions, which execute via the processor of the computer or other programmable data processing apparatus, create means for implementing the functions/acts specified in the flowchart and/or block diagram block or blocks.
- These computer readable program instructions may also be stored in a computer readable storage medium that can direct a computer, a programmable data processing apparatus, and/or other devices to function in a particular manner, such that the computer readable storage medium having instructions stored therein comprises an article of manufacture including instructions which implement aspects of the function/act specified in the flowchart and/or block diagram block or blocks.
- the computer readable program instructions may also be loaded onto a computer, other programmable data processing apparatus, or other device to cause a series of operational steps to be performed on the computer, other programmable apparatus or other device to produce a computer implemented process, such that the instructions which execute on the computer, other programmable apparatus, or other device implement the functions/acts specified in the flowchart and/or block diagram block or blocks.
- each block in the flowchart or block diagrams may represent a module, segment, or portion of instructions, which comprises one or more executable instructions for implementing the specified logical function(s).
- the functions noted in the block may occur out of the order noted in the figures.
- two blocks shown in succession may, in fact, be executed substantially concurrently, or the blocks may sometimes be executed in the reverse order, depending upon the functionality involved.
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Debugging And Monitoring (AREA)
Abstract
Description
- The present disclosure relates to measuring computer processor performance, and more specifically, to instrumenting benchmark programs with microarchitecture instructions.
- Measuring the performance of computer processors typically occur by way of one or more benchmark programs. The benchmark programs instruct the processor to perform a series of tasks that stress the capabilities of the processor. Because the benchmark program provides the same instructions to different processors, the performance of the differing processors may be compared. Typically, the performance of differing processors may be measured by measuring the time it takes to complete the benchmark program. The processors may also be measured by counting the number of processing cycles that a processor takes to complete the benchmark program.
- Embodiments of the disclosure may include a method, a system, and a computer program product for measuring performance of a processor in a simulation environment. A code segment of a benchmark program is instrumented with a microarchitecture instruction. A first clock cycle indicative of the processor before executing the benchmark program is captured. The code segment and benchmark program are executed by the processor and a processor return related to the microarchitecture instruction is intercepted. In response to the processor return, a second clock cycle indicative of the processor after executing the code segment is captured. The simulation environment determines a performance characteristic of the processor from the first clock cycle and the second clock cycle.
- The above summary is not intended to describe each illustrated embodiment or every implementation of the present disclosure.
- The drawings included in the present application are incorporated into, and form part of, the specification. They illustrate embodiments of the present disclosure and, along with the description, serve to explain the principles of the disclosure. The drawings are only illustrative of certain embodiments and do not limit the disclosure.
-
FIG. 1 depicts an example simulation environment utilized in some embodiments of the invention. -
FIG. 2 depicts an exemplar method for determining the performance of a processor consistent with embodiments of the invention. -
FIG. 3 depicts an example of a simulation environment performing the steps of debugging the processor consistent with embodiments of the invention. -
FIG. 4 depicts an exemplar method for determining a list of unused microarchitecture instructions for use in various embodiments of the invention. -
FIG. 5 depicts a high-level block diagram of an example system for implementing one or more embodiments of the invention. - While the invention is amenable to various modifications and alternative forms, specifics thereof have been shown by way of example in the drawings and will be described in detail. It should be understood, however, that the intention is not to limit the invention to the particular embodiments described. On the contrary, the intention is to cover all modifications, equivalents, and alternatives falling within the spirit and scope of the invention.
- Aspects of the present disclosure relate to benchmarking processors, more particular aspects relate to measuring performance of microprocessors by instrumenting microarchitecture instructions and counting processing cycles. While the present disclosure is not necessarily limited to such applications, various aspects of the disclosure may be appreciated through a discussion of various examples using this context.
- In electrical and computer engineering, measuring processor performance is vital for processor designers during design and development of a microprocessor (alternatively, processor). Processor performance is usually measured by the amount of time it takes a processor to complete one or more tasks. Obtaining accurate information about a processor's performance allows processor designers to alter the basic layout of a processor in ways that yield increasing performance. Because processor design is costly, once a processor is mass produced for use as a central processing unit the design will not normally be altered until a subsequent processor is designed. Thus, processor designers must ensure processor performance is verified across one or more scenarios the processor will encounter during its lifetime. Additionally, other entities rely on understanding the performance of a processor, including operating system architects and compiler designers.
- Measuring the performance of a newly designed processor may be accomplished by manufacturing a sample processor. The sample processor will be created using the same techniques that a finalized processor traverses when the finalized processor is mass produced. The sample processor may then be benchmarked by running one or more programs. There are many drawbacks, however, in creating a sample processor. First, the lag time to go from a newly designed processor to a sample processor may be months. Second, the manufacture of the sample processor may utilize a large and inefficient amount of exotic raw materials (such as silicon germanium and gallium arsenide). Third, the processor may be intended for a new die-size that is untested.
- All three of these drawbacks result in sample processors that cost significant amounts of time and money. Processor designers do not have the ability to make a change to a newly designed processor, then wait to test if a sample processor incorporating the change results in better performance characteristics. In addition, operating system architects and compiler designers are unlikely to have access to a sample processor at any point before a newly designed processor is manufactured.
- Processor designers have come to rely increasingly on testing processors in a virtual (or simulation) environment. In the virtual environment the processor (herein, virtualized processor) is simulated by a computer. This allows users to design, implement, and test a virtualized processor (or simulated processor), then alter the design and test again. A drawback to the simulation environment is that the virtualized processor runs much slower than a sample processor. Often times any application running on the virtualized processor runs orders of magnitude slower than the sample processor. This is magnified when processor designers are trying to run benchmark programs. This makes benchmarking processors in a virtual environment difficult. Because the benchmarks take such an extended amount of time, processor designers cannot compare the results with existing processors. Additionally, because some benchmarks take several orders of magnitude longer to complete, processor designers must alter the benchmark. The altered benchmark allows processor designers to more quickly measure performance and thus iterate processor designs. However, the altered benchmark may not provide an accurate test of all the capabilities of the newly designed processor.
- There are alternatives to time-based measurements of physical processors. One method that produces reliable and comparable results is to measure the clock-cycles of a physical processor. In detail, first the benchmark is instrumented by placing a break-point at the end of the benchmark. Next, the current clock-cycle is retried from the physical processor, and the physical processor is instructed to execute the benchmark program. After execution of the benchmark, execution stops at the inserted break-point and the current clock-cycle is again retrieved. Finally, by subtracting the clock-cycles before the physical processor executes the benchmark from the clock-cycles after the physical processor executes the benchmark, a cycle-count may be determined.
- This cycle-count may be used to compare physical processors with each other. But, because of the simulation environment this is normally not applicable to virtualized processors. In the simulation environment the virtualized processor is being instrumented by the simulation environment. The simulation environment can watch the virtualized processor as it executes its instruction set architecture (herein, ISA) including calling any microcode or millicode instruction. Unfortunately, because the operating system and the benchmark program may be binary programs, the simulation environment cannot tell when execution of either the operating system or the benchmark program begins or ends. Additionally, the operating system may vary in the amount of tasks or the order the tasks that are performed before reporting the completion of the benchmark program. Thus, the simulation environment cannot reliably determine the cycle-count because there is no consistent way to obtain the clock-cycles of the virtualized processor after the execution of the benchmark program.
- The use of a microarchitecture break-point may enable processor designers to repeatedly and reliably measure the performance of processors. The microarchitecture break-point may be used in a simulation environment to measure a virtualized processor, or in a live environment with a real processor. The simulation environment may run unaltered benchmarks, such as those conventionally used in a live environment. The simulation environment may also run altered benchmarks. The simulation environment may allow processor designers to consistently determine the cycle-count of a processor.
- The microarchitecture break-point may be utilized to instrument a benchmark program. The microarchitecture break-point may be inserted at the end of the benchmark program. When the processor executes the microarchitecture break-point, the processor may call a microarchitecture instruction outside of the operating system and the benchmark program running on the processor. The cycle-count at the microarchitecture instruction may be determined. The microarchitecture break-point may be placed in the middle of the benchmark program. Multiple microarchitecture break-points may be placed in the middle or at the end of the benchmark program.
- The microarchitecture break-point may be a microcode instruction. The microarchitecture break-point may be a millicode instruction. The microarchitecture break-point may be microarchitecture instructions other than microcode or millicode instructions. The microarchitecture break-point may be a default instruction, such as an error code. The error code may be indicative that a microarchitecture instruction is not defined or does not otherwise exist. The microarchitecture break-point may utilize a microarchitecture instruction that is part of a processor's functional ISA. The microarchitecture break-point may utilize a microarchitecture instruction that is not part of the processor's functional ISA (e.g., a microarchitecture instruction utilized for debugging the processor). The microarchitecture break-point may be determined by analyzing which microarchitecture instructions that are part of a processor's functional ISA are not utilized by an operating system or benchmark program.
- The microarchitecture instruction may be located in read-only memory. The microarchitecture instruction may be located in read-write memory. The microarchitecture instruction may be located outside of the processor (e.g., SRAM, flash memory, etc.). The microarchitecture instruction may be located in the processor (e.g., a control store, a jump table, etc.). The microarchitecture instruction may be selected from a set of microarchitecture instructions, some of which are located inside the processor while others are located outside of the processor. The microarchitecture instruction may be loaded from a low-level operating system (i.e., a BIOS) or a high-level operating system. The microarchitecture instruction may be loaded from a simulation environment.
-
FIG. 1 depicts anexample simulation environment 100 in accordance with embodiments of the invention. The simulation environment comprises the following: acomputer system 110, adata source 120 that stores programs and other data, asimulated processor 130 running on the computer system, and anoperating system 140 that is executed by the simulated processor. Thesimulation environment 100 may determine the performance ofsimulated processor 130 by calculating a cycle-count 150. The components of thesimulation environment 100 may communicate with each other directly or through a network (not depicted). Thesimulation environment 100 may comprise additional details or features not depicted, and it should be appreciated that the simulation environment is provided for exemplar purposes only. - The
computer system 110 may load data relevant to determining the performance of thesimulated processor 130 from thedata source 120. Thedata source 120 may containsimulated processor code 122,operating system code 124, andbenchmark program code 126. Thedata source 120 may contain other code or data not depicted, such as other benchmark programs, benchmark program results, or other simulated processors. Thedata source 120 may also contain a list ofmicroarchitecture instructions 132. Thecomputer system 110 may load thesimulated processor 130 from thedata source 120. Thecomputer system 110 may instruct thesimulated processor 130 to load theoperating system 140. Thecomputer system 110 may be comprised of one or more hardware components (not depicted)—including the components depicted inFIG. 5 . - The
simulated processor 130 of thesimulation environment 100 executes theoperating system 140 and also thebenchmark program 142. Thesimulated processor 130 may be a desktop processor and theoperating system 140 may be any desktop operating system including Windows, Macintosh, or Linux. In some embodiments, thesimulated processor 130 may be a mobile device processor and theoperating system 140 may be any mobile operating system including iOS, Android, or Windows Phone. Thesimulated processor 130 may include a list ofmicroarchitecture instructions 132 used by the simulated processor to provide theoperating system 140 with an ISA. The list ofmicroarchitecture instructions 132 may be loaded by thecomputer system 110 to thesimulated processor 130. In some embodiments, the list ofmicroarchitecture instructions 132 may be loaded from thedata source 120. - The
benchmark program 142 is executed by thesimulated processor 130 through theoperating system 140. To determine performance of thesimulated processor 130 thebenchmark program 142 may be instrumented with an insertedmicroarchitecture instruction 144 from the list ofmicroarchitecture instructions 132. The insertedmicroarchitecture instruction 144 may be inserted at the end of thebenchmark program 142. The insertedmicroarchitecture instruction 144 may be inserted in the middle of thebenchmark program 142. In some embodiments, a second inserted microarchitecture instruction (not depicted) may be inserted into thebenchmark program 142. - The performance of the
simulated processor 130 may be determined by calculating the cycle-count 150. When thesimulated processor 130 executes theoperating system 140 and thebenchmark program 142, the computer system may not be able to examine the benchmark program until after execution of the operating system ceases. But, when thebenchmark program 142 calls the insertedmicroarchitecture instruction 144, thecomputer system 110 knows the status of the simulated processor's execution. At this point thecomputer system 110 may determine the cycle-count 150. - The cycle-
count 150 may utilize a clock-cycle of thesimulated processor 130 before execution of thebenchmark program 142 and the clock-cycle of the simulated processor after execution of the insertedmicroarchitecture instruction 144. For example, thebenchmark program 142 begins at a clock-cycle “n” of thesimulated processor 130. While thesimulated processor 130 is executing thebenchmark program 142, the simulated processor is also executing theoperating system 140. As thesimulated processor 130 is performing the executions the clock-cycles are increasing. When thesimulated processor 130 reaches the end of execution of the benchmark program, the simulated processor executes the insertedmicroarchitecture instruction 144. Upon execution of the insertedmicroarchitecture instruction 144 the simulated processor has gone through “y” clock-cycles. At this point thesimulated processor 130 will leave thebenchmark program 144 and theoperating system 140 to access the microarchitecture instruction from the list ofmicroarchitecture instructions 132. Thecomputer system 110 will monitor this access and know that the benchmark program has finished execution by thesimulated processor 130. At this point thecomputer system 110 knows that thebenchmark program 142 began execution at clock-cycle “n” and the benchmark program ended execution at clock-cycle “n+y.” -
FIG. 2 depicts anexemplar method 200 for determining the performance of a processor.Method 200 may be utilized to determine the performance of a physical processor.Method 200 may also be utilized to determine the performance of a simulated processor. Becausemethod 200 utilizes cycle-counts, the performance of physical processors and simulated processors may be compared. In some embodiments, a method different thanmethod 200 may be utilized to determine the performance of a processor. Themethod 200 may be executed by a computer system. - From
start 210, the benchmark may be retrieved, at 220, by the computer system. Next, the computer system steps through the benchmark, at 222, line-by-line until reaching a point of interest at 224 for a potential performance metric. In some embodiments, the point of interest is a certain segment of the benchmark program. In some embodiments, the point of interest is the entire benchmark program. Once a point of interest is identified, at 224, an unused microarchitecture instruction is inserted, at 226, just after the point of interest. If the benchmark has been stepped through in its entirety, at 228, then the computer system, proceeds to ready the processor at 230. If the benchmark has not been stepped through in its entirety, at 222 and 228, then again line-by-line the program is analyzed for points of interest at 224. - In some embodiments, the steps 220-228 may be performed by a user in conjunction with the computer system. For example, a user determines one or more sections of a benchmark program that are relevant in determining the performance of a processor. The user will place an unused microarchitecture instruction into the benchmark program before each section. The user will also place an unused microarchitecture instruction into the benchmark program after each section.
- After the end of the step through, the computer system prepares the processor at 230. The preparation of the processor, at 230, may include allocation of resources from the computer system (e.g., memory and processing cycles). In some embodiments wherein the processor is a physical processor, the preparation of the processor, at 230, includes providing power and loading a low-level operating system (i.e., a BIOS) that initializes the processor. Next, the benchmark environment is loaded at 240. The benchmark environment may include an operating system and the benchmark program that has been instrumented with the microarchitecture instructions. In some embodiments, the benchmark environment may include additional tasks designed to stress the processor and allow performance of cache hierarchies, multi-threading, or other performance characteristics of the processor to be observed.
- Next, the cycle-count of the processor is retrieved, at 250, and execution of the benchmark program commences at 260. The cycle-count of the processor, at 250, may be just before the benchmark program is executed. In some embodiments, the cycle-count of the processor, at 250, may be during the initial stages of execution of the benchmark program. In some embodiments, the cycle-count of the processor may be retrieved, at 250, by forcing the processor to execute another unused microarchitecture instruction (not depicted). When the processor executes the other unused microarchitecture instruction, the computer system may retrieve the cycle-count of the processor before execution of the benchmark program.
- During execution of the benchmark program, at 260, the processor will reach the inserted unused microarchitecture instruction and the computer system will detect this instruction. If an unused microarchitecture instruction is reached, at 262, the computer system will retrieve the cycle-count at 264. The computer system may calculate the performance of the processor, at 266, by subtracting the cycle-count retrieved at 250 from the cycle-count retrieved at 264. If the processor has reached the end of the benchmark, at 268, the
method 200 ends at 270. If the processor has not reached the end of the benchmark, at 268, the processor will continue the benchmark and the computer system will continue to monitor for unused microarchitecture instructions at 262. -
FIG. 3 depicts an example of asimulation environment 300 performing the steps of debugging the processor consistent with embodiments of the invention. Thesimulation environment 300 comprises asimulator 310, a set ofcode 320, and asimulated processor 330. Thesimulation environment 300 may allow a user to instrument benchmark programs with microarchitecture instructions. After instrumenting the benchmark programs, a user may determine the cycle-count of theprocessor 330 from thesimulation environment 300. The cycle-count of theprocessor 330 may be compared with the cycle-count of other processors that have run the benchmark program. - The
simulator 310 may include adebug facility 312 that provides break-point management. Thedebug facility 312 may include acounter 314 that records cycles of thesimulated processor 330 as the simulated processor performs tasks. Thesimulator 310 may store one ormore counter values 316 that refer to the cycle-count of thesimulated processor 330. Thesimulator 310 loads thesimulated processor 330 from the set ofcode 320. The set of code may be in a compiled format. In some embodiments, the set ofcode 320 may be in the form of a hardware description language (e.g., VHDL). Thesimulated processor 330 may include millicode 332 that contains an opcode branch table. Thesimulated processor 330 may execute alinux kernel 334. Thesimulated processor 330 may also execute abenchmark program 336. The benchmark program may be in the form of binary code that has been precompiled with a special opcode. The simulated processor may run thebenchmark program 336 by way of thelinux kernel 334. For example, thebenchmark program 336 is a process running from thelinux kernel 334. - As the
simulation environment 300 performs thebenchmark program 336, one or more of the following steps may occur. It should be appreciated that the steps disclosed are for exemplar purposes and that other or different steps may occur. The disclosed steps may occur in another order, may be repeated, may differ in scope, and may differ in number. As thebenchmark program 336 runs the last instruction is completed at 350. Next, the special opcode gets executed and causes a jump into the millicode branch table at 352. The millicode entry sequences gets executed, and the break-point is triggered at 354. After the break-point is triggered at 354, thedebug facility 312 takes control and outputs the counter value at 356. Next, the debug facility returns control to themillicode 332 of thesimulated processor 330 at 358. Finally, themillicode 332 returns to the benchmark program at 360. -
FIG. 4 depicts anexemplar method 400 for determining unused microarchitecture instructions. In some embodiments, a user may not know which microarchitecture instructions are used for debugging or are otherwise available for instrumentation of a benchmark program.Method 400 may allow the user to determine one or microarchitecture instructions not utilized by the operating system or the benchmark program being executed by the newly developed processor. - From
start 410, a processor is loaded, at 420, by a computer system and initialized. After loading the processor, all of the microarchitecture instructions associated with the processor and its ISA may be retrieved at 430. In some embodiments, the act of initializing the processor may involve retrieval of microarchitecture instructions. For example, when a bug is found in a processor, a processor vendor will release an updated set of microcode. A motherboard manufacturer may incorporate the updated set of microcode into an updated BIOS. After a user downloads and updates a motherboard with the updated BIOS, the motherboard's BIOS will update the processor at boot with the updated microcode. Thus, when the computer system instructs the motherboard to load the processor, the updated microcode can be retrieved. It should be appreciated that both physical and simulated processors can utilize updated microcode as discussed in the example above. - At 440, a list of microarchitecture instructions are recorded by the computer instructions. The list may be comprised of all of the microarchitecture instructions loaded at 430. In some embodiments, the list may be comprised of additional microarchitecture instructions. For example, if an updated set of microarchitecture instructions no longer includes a certain microarchitecture instruction but the control store of the processor still has a reference to this excluded microarchitecture instruction. The referenced excluded microarchitecture instruction may be a potential unused microarchitecture instruction for instrumenting the processor.
- After recording a list of microarchitecture instructions, the computer system instructs the processor to load an operating system at 450. During loading of the operating system, the computer system detects if the act of loading uses a microarchitecture instruction at 452. If the computer system does detect usage of a microarchitecture instruction, at 452, the computer system may remove that microarchitecture instruction from the list of microarchitecture instructions at 454. In some embodiments, the computer system may flag the operating system load-related microarchitecture instruction instead of removing it from the list of microarchitecture instructions. If the computer system does not detect usage of an operating system load-related microarchitecture instruction, at 452, the computer system will determine if the operating system has finished loading at 456.
- If the processor has finished loading the operating system, at 456, the computer system will instruct the processor to load the benchmark program at 460. During loading of the benchmark program, the computer system detects if the act of loading uses a microarchitecture instruction at 462. If the computer does detect usage of a benchmark program load-related microarchitecture instruction, at 462, the computer system may remove the benchmark program load-related microarchitecture instruction from the list of microarchitecture instructions at 464. In some embodiments, the computer system may flag the benchmark program load-related microarchitecture instruction instead of removing it from the list of microarchitecture instructions. If the computer system does not detect usage of a benchmark program load-related microarchitecture instruction, at 462, the computer system will determine if the benchmark program has finished loading at 466.
- If the processor has finished loading the benchmark program, at 466, the computer system will instruct the processor to execute the benchmark program at 470. During execution of the benchmark program, the computer system detects if the act of executing uses a microarchitecture instruction at 472. If the computer does detect usage of a benchmark program execution-related microarchitecture instruction, at 472, the computer system may remove the benchmark program execution-related microarchitecture instruction from the list of microarchitecture instructions at 474. In some embodiments, the computer system may flag the benchmark program execution-related microarchitecture instruction instead of removing it from the list of microarchitecture instructions. If the computer system does not detect usage of a benchmark program execution-related microarchitecture instruction, at 472, the computer system will determine if the benchmark program has finished executing at 476. If the benchmark program has finished executing, at 476, the
method 400 will end at 480. At this point the list of microarchitecture instructions generated bymethod 400 are unused by the processor, and thus may be usable to instrument the benchmark program. - It should be appreciated that a microarchitecture instruction selected from the list of microarchitecture instructions generated by
method 400 may be useful for placement at the end of the benchmark program. In embodiments where the benchmark program will be instrumented by a microarchitecture instruction placed before the end of the benchmark program,method 400 may not be applicable. For example, a user may desire to instrument a benchmark program by placing microarchitecture instruction at the beginning of a benchmark program. In this instance although any microarchitecture instruction selected from the list is not utilized by any operation, the microarchitecture instruction may still perform operations that alter or otherwise modify code within the simulated environment, including the simulated processor. Modification of the operation of the simulated processor may alter the execution of the benchmark program before it completes. If a user selects an instruction from the list of microarchitecture instructions generated bymethod 400, they may need to ensure this instruction does not otherwise alter execution of the benchmark program before completion and before a cycle-count can be retrieved. -
FIG. 5 depicts the representative major components of an exemplary computer system 001 that may be used, in accordance with embodiments of the invention. It is appreciated that individual components may have greater complexity than represented inFIG. 5 , components other than or in addition to those shown inFIG. 5 may be present, and the number, type, and configuration of such components may vary. Several particular examples of such complexities or additional variations are disclosed herein. The particular examples disclosed are for exemplar purposes only and are not necessarily the only such variations. The computer system 001 may comprise aprocessor 010,memory 020, an input/output interface (herein I/O or I/O interface) 030, and amain bus 040. Themain bus 040 may provide communication pathways for the other components of the computer system 001. In some embodiments, themain bus 040 may connect to other components such as a specialized digital signal processor (not depicted). - The
processor 010 of the computer system 001 may be comprised of one ormore CPUs processor 010 may additionally be comprised of one or more memory buffers or caches (not depicted) that provide temporary storage of instructions and data for the CPUs 012. The CPUs 012 may perform instructions on input provided from the caches or from thememory 020 and output the result to caches or the memory. The CPUs 012 may be comprised of one or more circuits configured to perform one or methods consistent with embodiments of the invention. In some embodiments, the computer system 001 may containmultiple processors 010 typical of a relatively large system; however, in other embodiments the computer system may alternatively be a single processor with a singular CPU 012. - The
memory 020 of the computer system 001 may be comprised of amemory controller 022 and one ormore memory modules memory 020 may comprise a random-access semiconductor memory, storage device, or storage medium (either volatile or non-volatile) for storing data and programs. Thememory controller 022 may communicate with theprocessor 010 facilitating storage and retrieval of information in the memory modules 024. Thememory controller 022 may communicate with the I/O interface 030 facilitating storage and retrieval of input or output in the memory modules 024. In some embodiments, the memory modules 024 may be dual in-line memory modules or DIMMs. - The I/
O interface 030 may comprise an I/O bus 050, aterminal interface 052, astorage interface 054, an I/O device interface 056, and anetwork interface 058. The I/O interface 030 may connect themain bus 040 to the I/O bus 050. The I/O interface 030 may direct instructions and data from theprocessor 010 andmemory 030 to the various interfaces of the I/O bus 050. The I/O interface 030 may also direct instructions and data from the various interfaces of the I/O bus 050 to theprocessor 010 andmemory 030. The various interfaces may comprise theterminal interface 052, thestorage interface 054, the I/O device interface 056, and thenetwork interface 058. In some embodiments, the various interfaces may comprise a subset of the aforementioned interfaces (e.g., an embedded computer system in an industrial application may not include theterminal interface 052 and the storage interface 054). - Logic modules throughout the computer system 001—including but not limited to the
memory 020, theprocessor 010, and the I/O interface 030—may communicate failures and changes to one or more components to a hypervisor or operating system (not depicted). The hypervisor or the operating system may be allocate the various resources available in the computer system 001 and track the location of data inmemory 020 and of processes assigned to various CPUs 012. In embodiments that combine or rearrange elements, aspects of the logic modules capabilities may be combined or redistributed. These variations would be apparent to one skilled in the art. - The present invention may be a system, a method, and/or a computer program product. The computer program product may include a computer readable storage medium (or media) having computer readable program instructions thereon for causing a processor to carry out aspects of the present invention.
- The computer readable storage medium can be a tangible device that can retain and store instructions for use by an instruction execution device. The computer readable storage medium may be, for example, but is not limited to, an electronic storage device, a magnetic storage device, an optical storage device, an electromagnetic storage device, a semiconductor storage device, or any suitable combination of the foregoing. A non-exhaustive list of more specific examples of the computer readable storage medium includes the following: a portable computer diskette, a hard disk, a random access memory (RAM), a read-only memory (ROM), an erasable programmable read-only memory (EPROM or Flash memory), a static random access memory (SRAM), a portable compact disc read-only memory (CD-ROM), a digital versatile disk (DVD), a memory stick, a floppy disk, a mechanically encoded device such as punch-cards or raised structures in a groove having instructions recorded thereon, and any suitable combination of the foregoing. A computer readable storage medium, as used herein, is not to be construed as being transitory signals per se, such as radio waves or other freely propagating electromagnetic waves, electromagnetic waves propagating through a waveguide or other transmission media (e.g., light pulses passing through a fiber-optic cable), or electrical signals transmitted through a wire.
- Computer readable program instructions described herein can be downloaded to respective computing/processing devices from a computer readable storage medium or to an external computer or external storage device via a network, for example, the Internet, a local area network, a wide area network and/or a wireless network. The network may comprise copper transmission cables, optical transmission fibers, wireless transmission, routers, firewalls, switches, gateway computers and/or edge servers. A network adapter card or network interface in each computing/processing device receives computer readable program instructions from the network and forwards the computer readable program instructions for storage in a computer readable storage medium within the respective computing/processing device.
- Computer readable program instructions for carrying out operations of the present invention may be assembler instructions, instruction-set-architecture (ISA) instructions, machine instructions, machine dependent instructions, microcode, firmware instructions, state-setting data, or either source code or object code written in any combination of one or more programming languages, including an object oriented programming language such as Smalltalk, C++ or the like, and conventional procedural programming languages, such as the “C” programming language or similar programming languages. The computer readable program instructions may execute entirely on the user's computer, partly on the user's computer, as a stand-alone software package, partly on the user's computer and partly on a remote computer or entirely on the remote computer or server. In the latter scenario, the remote computer may be connected to the user's computer through any type of network, including a local area network (LAN) or a wide area network (WAN), or the connection may be made to an external computer (for example, through the Internet using an Internet Service Provider). In some embodiments, electronic circuitry including, for example, programmable logic circuitry, field-programmable gate arrays (FPGA), or programmable logic arrays (PLA) may execute the computer readable program instructions by utilizing state information of the computer readable program instructions to personalize the electronic circuitry, in order to perform aspects of the present invention.
- Aspects of the present invention are described herein with reference to flowchart illustrations and/or block diagrams of methods, apparatus (systems), and computer program products according to embodiments of the invention. It will be understood that each block of the flowchart illustrations and/or block diagrams, and combinations of blocks in the flowchart illustrations and/or block diagrams, can be implemented by computer readable program instructions.
- These computer readable program instructions may be provided to a processor of a general purpose computer, special purpose computer, or other programmable data processing apparatus to produce a machine, such that the instructions, which execute via the processor of the computer or other programmable data processing apparatus, create means for implementing the functions/acts specified in the flowchart and/or block diagram block or blocks. These computer readable program instructions may also be stored in a computer readable storage medium that can direct a computer, a programmable data processing apparatus, and/or other devices to function in a particular manner, such that the computer readable storage medium having instructions stored therein comprises an article of manufacture including instructions which implement aspects of the function/act specified in the flowchart and/or block diagram block or blocks.
- The computer readable program instructions may also be loaded onto a computer, other programmable data processing apparatus, or other device to cause a series of operational steps to be performed on the computer, other programmable apparatus or other device to produce a computer implemented process, such that the instructions which execute on the computer, other programmable apparatus, or other device implement the functions/acts specified in the flowchart and/or block diagram block or blocks.
- The flowchart and block diagrams in the Figures illustrate the architecture, functionality, and operation of possible implementations of systems, methods, and computer program products according to various embodiments of the present invention. In this regard, each block in the flowchart or block diagrams may represent a module, segment, or portion of instructions, which comprises one or more executable instructions for implementing the specified logical function(s). In some alternative implementations, the functions noted in the block may occur out of the order noted in the figures. For example, two blocks shown in succession may, in fact, be executed substantially concurrently, or the blocks may sometimes be executed in the reverse order, depending upon the functionality involved. It will also be noted that each block of the block diagrams and/or flowchart illustration, and combinations of blocks in the block diagrams and/or flowchart illustration, can be implemented by special purpose hardware-based systems that perform the specified functions or acts or carry out combinations of special purpose hardware and computer instructions.
- The descriptions of the various embodiments of the present disclosure have been presented for purposes of illustration, but are not intended to be exhaustive or limited to the embodiments disclosed. Many modifications and variations will be apparent to those of ordinary skill in the art without departing from the scope and spirit of the described embodiments. The terminology used herein was chosen to explain the principles of the embodiments, the practical application or technical improvement over technologies found in the marketplace, or to enable others of ordinary skill in the art to understand the embodiments disclosed herein.
Claims (12)
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/601,468 US10437699B2 (en) | 2015-01-21 | 2015-01-21 | Measuring execution time of benchmark programs in a simulated environment |
US14/919,764 US10430311B2 (en) | 2015-01-21 | 2015-10-22 | Measuring execution time of benchmark programs in a simulated environment |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/601,468 US10437699B2 (en) | 2015-01-21 | 2015-01-21 | Measuring execution time of benchmark programs in a simulated environment |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US14/919,764 Continuation US10430311B2 (en) | 2015-01-21 | 2015-10-22 | Measuring execution time of benchmark programs in a simulated environment |
Publications (2)
Publication Number | Publication Date |
---|---|
US20160210213A1 true US20160210213A1 (en) | 2016-07-21 |
US10437699B2 US10437699B2 (en) | 2019-10-08 |
Family
ID=56407983
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US14/601,468 Expired - Fee Related US10437699B2 (en) | 2015-01-21 | 2015-01-21 | Measuring execution time of benchmark programs in a simulated environment |
US14/919,764 Expired - Fee Related US10430311B2 (en) | 2015-01-21 | 2015-10-22 | Measuring execution time of benchmark programs in a simulated environment |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US14/919,764 Expired - Fee Related US10430311B2 (en) | 2015-01-21 | 2015-10-22 | Measuring execution time of benchmark programs in a simulated environment |
Country Status (1)
Country | Link |
---|---|
US (2) | US10437699B2 (en) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040250150A1 (en) * | 1987-06-02 | 2004-12-09 | Swoboda Gary L. | Devices, systems and methods for mode driven stops notice |
US20050010908A1 (en) * | 2003-07-10 | 2005-01-13 | International Business Machines Corporation | Method, apparatus and computer program product for implementing breakpoint based performance measurement |
US20050289485A1 (en) * | 2004-06-24 | 2005-12-29 | Ftl Systems, Inc. | Hardware/software design tool and language specification mechanism enabling efficient technology retargeting and optimization |
US20060074970A1 (en) * | 2004-09-22 | 2006-04-06 | Microsoft Corporation | Predicting database system performance |
US20060248410A1 (en) * | 2005-04-27 | 2006-11-02 | Circello Joseph C | Performance monitor with precise start-stop control |
US8230059B1 (en) * | 2005-11-08 | 2012-07-24 | Hewlett-Packard Development Company, L.P. | Method of monitoring resource usage in computing environment |
US20120260073A1 (en) * | 2011-04-07 | 2012-10-11 | Via Technologies, Inc. | Emulation of execution mode banked registers |
Family Cites Families (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6240376B1 (en) | 1998-07-24 | 2001-05-29 | Mentor Graphics Corporation | Method and apparatus for gate-level simulation of synthesized register transfer level designs with source-level debugging |
US7171338B1 (en) | 2000-08-18 | 2007-01-30 | Emc Corporation | Output performance trends of a mass storage system |
US7346481B1 (en) | 2004-08-31 | 2008-03-18 | Xilinx, Inc. | Hardware co-simulation breakpoints in a high-level modeling system |
JP2006127302A (en) | 2004-10-29 | 2006-05-18 | Internatl Business Mach Corp <Ibm> | Information processor, compiler and compiler program |
US20070005322A1 (en) | 2005-06-30 | 2007-01-04 | Patzer Aaron T | System and method for complex programmable breakpoints using a switching network |
US20070005323A1 (en) | 2005-06-30 | 2007-01-04 | Patzer Aaron T | System and method of automating the addition of programmable breakpoint hardware to design models |
WO2007068524A1 (en) | 2005-12-16 | 2007-06-21 | International Business Machines Corporation | Method, system and computer program for metering usage of software products based on real-time benchmarking of processing power |
US8543367B1 (en) | 2006-02-16 | 2013-09-24 | Synopsys, Inc. | Simulation with dynamic run-time accuracy adjustment |
US8170859B1 (en) | 2006-04-28 | 2012-05-01 | Intel Corporation | Methods, apparatuses and computer program products for simulating arbitrary unmodified code |
CN101246452B (en) | 2007-02-12 | 2010-12-15 | 国际商业机器公司 | Method and apparatus for fast performing MMU analog, and total system simulator |
CN101425020A (en) | 2007-10-31 | 2009-05-06 | 国际商业机器公司 | Method and device for accelerating MMU emulation and total system emulator |
US7844928B2 (en) | 2008-01-11 | 2010-11-30 | International Business Machines Corporation | Method and apparatus for evaluating integrated circuit design performance using enhanced basic block vectors that include data dependent information |
US7770140B2 (en) | 2008-02-05 | 2010-08-03 | International Business Machines Corporation | Method and apparatus for evaluating integrated circuit design model performance using basic block vectors and fly-by vectors including microarchitecture dependent information |
US8140319B2 (en) | 2008-02-05 | 2012-03-20 | International Business Machines Corporation | Method and system for predicting system performance and capacity using software module performance statistics |
US7904870B2 (en) | 2008-04-30 | 2011-03-08 | International Business Machines Corporation | Method and apparatus for integrated circuit design model performance evaluation using basic block vector clustering and fly-by vector clustering |
US8010334B2 (en) | 2008-04-30 | 2011-08-30 | International Business Machines Corporation | Method and apparatus for evaluating integrated circuit design performance using basic block vectors, cycles per instruction (CPI) information and microarchitecture dependent information |
US8448140B2 (en) | 2008-07-02 | 2013-05-21 | Tokyo Institute Of Technology | Execution time estimation method and device |
US8635415B2 (en) | 2009-09-30 | 2014-01-21 | Intel Corporation | Managing and implementing metadata in central processing unit using register extensions |
WO2012117746A1 (en) | 2011-03-02 | 2012-09-07 | 兵庫県 | Computer software system design support device |
JP4905597B1 (en) | 2011-03-15 | 2012-03-28 | オムロン株式会社 | Controller support device, controller support program to be executed in the device, and recording medium storing the program |
JP2013022415A (en) | 2011-07-26 | 2013-02-04 | Shin Etsu Polymer Co Ltd | Valving element for connector and connector |
JP2013222415A (en) | 2012-04-19 | 2013-10-28 | Mitsubishi Electric Corp | Performance calculation test result verification system |
US9606924B2 (en) | 2012-06-22 | 2017-03-28 | Wind River Systems, Inc. | System and method for supporting fast and deterministic execution and simulation in multi-core environments |
JP2014102734A (en) | 2012-11-21 | 2014-06-05 | Renesas Electronics Corp | Performance verification program, performance verification method, and performance verification device |
-
2015
- 2015-01-21 US US14/601,468 patent/US10437699B2/en not_active Expired - Fee Related
- 2015-10-22 US US14/919,764 patent/US10430311B2/en not_active Expired - Fee Related
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040250150A1 (en) * | 1987-06-02 | 2004-12-09 | Swoboda Gary L. | Devices, systems and methods for mode driven stops notice |
US20050010908A1 (en) * | 2003-07-10 | 2005-01-13 | International Business Machines Corporation | Method, apparatus and computer program product for implementing breakpoint based performance measurement |
US20050289485A1 (en) * | 2004-06-24 | 2005-12-29 | Ftl Systems, Inc. | Hardware/software design tool and language specification mechanism enabling efficient technology retargeting and optimization |
US20060074970A1 (en) * | 2004-09-22 | 2006-04-06 | Microsoft Corporation | Predicting database system performance |
US20060248410A1 (en) * | 2005-04-27 | 2006-11-02 | Circello Joseph C | Performance monitor with precise start-stop control |
US8230059B1 (en) * | 2005-11-08 | 2012-07-24 | Hewlett-Packard Development Company, L.P. | Method of monitoring resource usage in computing environment |
US20120260073A1 (en) * | 2011-04-07 | 2012-10-11 | Via Technologies, Inc. | Emulation of execution mode banked registers |
Non-Patent Citations (2)
Title |
---|
Slegel, Timothy J., et al. "IBM's S/390 G5 microprocessor design." IEEE micro 19.2 (1999): 12-23. * |
T. J. Slegel et al., "IBM's S/390 G5 microprocessor design," in IEEE Micro, vol. 19, no. 2, pp. 12-23, Mar/Apr 1999. * |
Also Published As
Publication number | Publication date |
---|---|
US10437699B2 (en) | 2019-10-08 |
US20160210214A1 (en) | 2016-07-21 |
US10430311B2 (en) | 2019-10-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10691419B2 (en) | Reconstructing a high level compilable program from an instruction trace | |
US10482001B2 (en) | Automated dynamic test case generation | |
US8386851B2 (en) | Functional coverage using combinatorial test design | |
US9400732B2 (en) | Performance regression testing in presence of noise | |
US20170154134A1 (en) | Simulation of virtual processors | |
US9544399B2 (en) | Visually depicting cloud resource utilization during execution of an application | |
US10212058B2 (en) | System and method for detecting system's performance regression | |
US10324816B2 (en) | Checking a computer processor design for soft error handling | |
US8667255B2 (en) | Measuring runtime coverage of architectural events of a microprocessor | |
CN108121650B (en) | Method and device for testing page user interface | |
CN112597064B (en) | Method for simulating program, electronic device and storage medium | |
US9692649B2 (en) | Role assignment for servers in a high performance computing system based on measured performance characteristics | |
US20130013283A1 (en) | Distributed multi-pass microarchitecture simulation | |
US10761922B2 (en) | Method and system to decrease measured usage license charges for diagnostic data collection | |
US10783059B2 (en) | Method and system to decrease measured usage license charges for diagnostic data collection | |
US10078572B1 (en) | Abnormal timing breakpoints | |
US10430311B2 (en) | Measuring execution time of benchmark programs in a simulated environment | |
US10248554B2 (en) | Embedding profile tests into profile driven feedback generated binaries | |
US11501046B2 (en) | Pre-silicon chip model of extracted workload inner loop instruction traces | |
US11080172B2 (en) | Instruction count based compiler performance regression testing | |
US20160350200A1 (en) | Performance enhancement mode selection tool | |
US20230214566A1 (en) | Dynamic control of coverage by a verification testbench | |
CN108604205B (en) | Test point creating method, device and system | |
CN115408256A (en) | Benchmark test program generation method and device, computer equipment and storage medium |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
AS | Assignment |
Owner name: INTERNATIONAL BUSINESS MACHINES CORPORATION, NEW Y Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:ECKMANN, SASCHA;GARDELEGEN, THOMAS;GELLERICH, WOLFGANG;AND OTHERS;SIGNING DATES FROM 20141219 TO 20150119;REEL/FRAME:034771/0943 |
|
STPP | Information on status: patent application and granting procedure in general |
Free format text: NON FINAL ACTION MAILED |
|
STPP | Information on status: patent application and granting procedure in general |
Free format text: RESPONSE TO NON-FINAL OFFICE ACTION ENTERED AND FORWARDED TO EXAMINER |
|
STPP | Information on status: patent application and granting procedure in general |
Free format text: NOTICE OF ALLOWANCE MAILED -- APPLICATION RECEIVED IN OFFICE OF PUBLICATIONS |
|
STPP | Information on status: patent application and granting procedure in general |
Free format text: PUBLICATIONS -- ISSUE FEE PAYMENT RECEIVED |
|
STPP | Information on status: patent application and granting procedure in general |
Free format text: PUBLICATIONS -- ISSUE FEE PAYMENT VERIFIED |
|
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: 20231008 |