- Learn
- Computer Science & IT
- Computer Science
- Computer Organization and Architecture
- Computer Performance
Computer Abstractions and Performance
IntermediateLesson 1 of 6 in Computer Organization and Architecture Course
What you will learn
- Explain how layers of abstraction connect an application to the transistors that run it, follow a statement from high-level code to machine instructions, and identify the instruction set architecture as the contract between software and hardware.
- Trace the layers of abstraction from applications to transistorsName the layers of a computer system, say what each one provides and hides, and explain why abstraction makes complex systems possible to design.
- Follow a program from high-level code to machine instructionsDescribe how compilers, assemblers, linkers and loaders turn a high-level program into binary machine instructions, and work through one statement down to its bit pattern.
- Explain the instruction set architecture as the hardware/software interfaceDistinguish the ISA, the application binary interface and the implementation, and explain why one ISA can have many implementations with different performance.
- Trace the layers of abstraction from applications to transistors
- Use execution time and throughput to define performance, compare two computers correctly, and measure the times that matter for a program.
- Compare computers using response time and throughputDefine response time and throughput, express performance as the inverse of execution time, and state correctly how many times faster one computer is than another.
- Measure elapsed time, CPU time and clock cyclesSeparate elapsed time from CPU time, interpret timing measurements, and convert between clock period and clock rate with the right units.
- Compare computers using response time and throughput
- Relate CPU time to instruction count, cycles per instruction and clock rate, calculate any one of them from the others, and judge which design choices and performance claims really change execution time.
- Relate CPU time to clock cycles and clock rateCalculate CPU time from clock cycles and clock rate, and solve design problems where a faster clock costs extra cycles.
- Calculate CPI from an instruction mixDefine cycles per instruction, compute the average CPI as a weighted mean over instruction classes, and use it to compare code sequences.
- Apply the classic performance equationUse CPU time = instruction count × CPI × clock cycle time to calculate and compare execution times, and identify which factors the algorithm, language, compiler, ISA, organization and technology change.
- Judge performance claims and benchmark summariesExplain why MIPS and clock rate mislead, how benchmark suites such as SPEC CPU report results as ratios, and why the geometric mean is used to summarize them.
- Relate CPU time to clock cycles and clock rate
- Calculate the overall speedup when only part of a program gets faster, find the limit of that speedup, and apply the same reasoning to programs running on many processor cores.
- Calculate the overall speedup from an enhancementApply Amdahl's law to a partial improvement, find the improvement needed for a target speedup, and recognize when a target is impossible.
- Use Amdahl's law to reason about multicore speedupCalculate the speedup and efficiency of a partly parallel program on many cores, explain why real speedups are lower, and contrast fixed-size with growing-size problems.
- Calculate the overall speedup from an enhancement
- Calculate how voltage, frequency and capacitance set a chip's power and energy, explain why rising power ended the era of ever-faster single cores, and explain why processors became multicore and what that asks of software.
- Calculate dynamic power and energy in CMOS chipsUse the relationships between capacitance, voltage, frequency, power and energy to estimate the effect of design changes, and distinguish dynamic from static power.
- Explain the power wall and the end of Dennard scalingDescribe how shrinking transistors once delivered faster clocks at constant power density, and why leakage and the voltage limit stopped clock rates from rising after the mid-2000s.
- Explain why processors became multicore and what that asks of softwareShow with the power equation why several slower cores can beat one fast core, and explain why gaining speed from multicore processors depends on parallel software.
- Calculate dynamic power and energy in CMOS chips
Computer Performance study guide
1Connect software to hardware
A line of source code crosses several interfaces before a processor can carry it out. Applications rely on systems software, machine instructions rely on an ISA, and hardware designers implement those instructions with logic and transistors. Following that path makes it possible to separate a program’s required behavior from the design choices that determine its speed, and to see why compatible processors can perform very differently.
1.1 From applications to physical switches
An abstraction shows what a component does while hiding the details of how it works. A browser can ask the operating system to read a file without controlling the storage device’s circuits. Defined interfaces let people design, test, and replace parts of a system without rebuilding every layer at once.
The layers and their jobs
A common ordering, from the user’s task down to physical devices, is:
- Application software performs tasks such as editing a spreadsheet or browsing the web.
- Systems software supplies shared services and translates programs. It includes operating systems, compilers, assemblers, linkers, and libraries.
- The instruction set architecture (ISA) defines the machine instructions and other behavior visible to low-level software.
- The microarchitecture, or organization, implements that ISA with a datapath, control, pipelines, and caches.
- Digital logic builds operations and storage from gates, adders, multiplexers, and registers.
- Circuits connect electronic components to realize that logic.
- Devices, chiefly transistors, provide the physical switching behavior.
These boundaries are useful views of one machine. Different diagrams may group neighboring layers together. An operating system is software: the CPU executes its instructions, including privileged instructions that help it manage resources safely.
Follow one addition
Consider the C statement total = price + tax;. A compiler chooses where values live and which instructions perform the addition. It can choose an add instruction without designing an adder. A microarchitect maps that instruction onto execution hardware. A logic designer builds the adder from gates; a circuit designer deals with the electrical details behind those gates. Each person uses a simpler interface to the level below.
The physical computer has five classic components: input, output, memory, datapath, and control. The datapath operates on data. Control directs operations and coordinates memory and I/O. Together, datapath and control form the processor, or CPU.
| Storage | Main role | Keeps data without power? |
|---|---|---|
| DRAM | Main working memory | No |
| SRAM | Small, fast caches near the processor | No |
| Flash or magnetic disk | Secondary storage | Yes |
A transistor acts as an electrically controlled switch. An integrated circuit, or chip, joins many transistors on one piece of silicon. Those switches support logic; the logic supports instructions; instructions support software.
More transistors and different speeds
Moore’s law began with Gordon Moore’s 1965 observation and was revised in 1975 to a trend of roughly doubling transistor counts every two years. Ten such doublings multiply a count by , over about 20 years. This is a manufacturing trend, not a physical guarantee; its pace has slowed.
Meeting an interface preserves the behavior promised by that interface. It does not fix performance, energy use, or cost. Two processors can implement the same addition instruction correctly while using different circuits, caches, and clock rates. The application gets the same computed result, yet waits a different amount of time.
Key Takeaways
- An abstraction exposes useful behavior and hides implementation details.
- The layers connect applications, systems software, the ISA, microarchitecture, logic, circuits, and devices.
- The CPU combines datapath and control; memory and I/O complete the classic five-component view.
- DRAM and SRAM are volatile; flash and magnetic disks retain data without power.
- Moore’s law describes a transistor-count trend, not guaranteed performance growth.
- Compatible interfaces preserve specified behavior, while speed and energy still depend on lower layers.
1.2 How source code becomes instructions
A processor executes machine language, instructions encoded as bits. High-level code describes a computation in variables, expressions, loops, and functions. Translation bridges those two views, often expanding a short statement into several instructions.
The compiled-program path
For a C program, the main stages are:
| Stage | Input and result |
|---|---|
| Compiler | Translates source code into assembly or directly into object code |
| Assembler | Turns symbolic assembly into machine code in an object file |
| Linker | Combines object files and library code, resolving references between them |
| Loader | Maps the executable into memory and starts the program |
An object file can contain machine code without yet being a complete runnable program. For example, a call to a function defined in another file needs the linker to resolve that reference. The loader is part of the operating system’s execution support, not another source-code translator.
Trace one C statement
Suppose price is in register x6, tax is in x7, and the compiler places total in x5. Then:
total = price + tax;
can become this RISC-V instruction:
add x5, x6, x7
The destination comes first in the assembly text. The instruction adds the values in x6 and x7 and writes the result to x5. Its 32-bit R-type encoding places the fields in a different order:
| Field | Meaning here | Bits |
|---|---|---|
| funct7 | Selects the add operation with the other operation fields | 0000000 |
| rs2 | Source register 7 | 00111 |
| rs1 | Source register 6 | 00110 |
| funct3 | Operation selector | 000 |
| rd | Destination register 5 | 00101 |
| opcode | Instruction family | 0110011 |
Joining the fields gives 0000000 00111 00110 000 00101 0110011, or 0x007302B3. The spaces make the fields readable; they are not stored as part of the instruction.
One source statement need not mean one instruction. Even with all operands in registers, f = (g + h) - (i + j); needs two additions and a subtraction. Loading operands from memory adds instructions. Executed instruction count therefore depends on translation and the ISA, not just the number of source lines.
Other routes to machine code
A high-level program can often be recompiled for another ISA. Its existing executable is tied to its ISA and operating-system conventions. An x86-64 executable needs recompilation, emulation, or binary translation to run on an Arm or RISC-V machine that cannot execute it natively.
Bytecode is an intermediate instruction format for a language runtime. CPython compiles Python source to bytecode and interprets it with an interpreter program. Java virtual machines commonly use just-in-time (JIT) compilation to turn frequently used bytecode into machine code while the program runs. In both cases, the physical CPU ultimately executes machine instructions.
Assembly remains text, even when a line resembles a real instruction closely. A pseudo-instruction is a convenience accepted by the assembler: RISC-V mv x5, x6 becomes addi x5, x6, 0. Exact instruction control can be useful in operating-system code and critical loops, but it gives up some of the portability and compiler freedom of high-level code.
Key Takeaways
- Compilation, assembly, linking, and loading perform different jobs.
- Assembly is symbolic text; machine code is the binary encoding the processor executes.
- One high-level statement can execute several instructions, including memory operations.
- Interpreters and JIT compilers still rely on machine instructions at the hardware level.
- A source program can be recompiled for another ISA; its existing executable is not generally portable.
1.3 The ISA, the ABI, and the processor design
The instruction set architecture (ISA) is the contract between hardware and the lowest-level software. It tells a machine-language programmer what operations exist and what those operations mean. A processor’s internal design can change while that contract remains stable.
What the contract specifies
An ISA defines instructions and their binary encodings, programmer-visible registers, addressing behavior, supported data types, and the architectural mechanisms used to reach I/O. A compiler targets these features when it turns a computation into instructions.
An implementation is a physical design that obeys the ISA. Its microarchitecture describes internal choices such as execution units, pipeline stages, cache sizes, and branch prediction. Those choices strongly affect execution time.
| Question | Kind of choice |
|---|---|
| Does a multiply instruction exist, and what result does it produce? | ISA |
| Does that multiply take one cycle or four? | Microarchitecture |
| Which registers carry function arguments? | ABI convention |
| How large is the first-level cache? | Microarchitecture |
The distinction is about the promised behavior. A program must receive the specified multiplication result. It usually does not need to know how the multiplier was built to obtain that result.
Why an ISA alone is not enough for binary compatibility
The application binary interface (ABI) adds the operating-system interface and binary conventions to the user-level ISA. It specifies calling conventions, such as argument registers, along with data layout and system-call conventions. Two machines can execute the same instruction encodings yet disagree about how a function receives an argument.
Binary compatibility requires the program’s ISA features and ABI to be supported. Even within the x86 family, which began with Intel’s 8086 in 1978, operating-system support and execution modes matter. Backward compatibility has preserved many older programs while processor implementations have changed, but sharing a family name is not a guarantee that every historical executable runs in every environment.
One architecture, many implementations
Intel and AMD implement x86-64 with different internal designs. Arm and RISC-V likewise support implementations with very different power budgets and performance. RISC-V began at the University of California, Berkeley, in 2010 and is an open, royalty-free ISA. Its base integer sets include RV32I and RV64I; standard extensions include M for integer multiplication and division, and F and D for floating-point operations.
A program using an optional extension needs an implementation that supports it. The existence of a shared base does not make every extension universal. The RISC-V addition example illustrates the same hardware/software boundary found in Arm and x86, although their instructions and encodings differ.
Instruction richness and execution time
An ISA can express more work in one instruction, reducing instruction count. That instruction may also take more cycles or demand a longer cycle. The relevant calculation is the whole product:
A richer instruction set is not enough to establish which machine is faster. Nor does a shared ISA establish equal speed: compatible processors can use different clocks, caches, and execution units to produce the same required results.
Key Takeaways
- The ISA specifies programmer-visible machine behavior; microarchitecture implements it.
- The ABI adds binary conventions and the operating-system interface needed by executables.
- Binary compatibility requires the relevant ISA features, execution environment, and ABI.
- RISC-V combines a base integer ISA with optional standard extensions.
- Instruction richness changes tradeoffs among instruction count, CPI, and cycle time.
2Measure the performance that matters
Performance starts with the work someone needs completed: one task, a stream of requests, or a mix of both. The right timing measure depends on that need. Separate the time a user waits from the time a processor computes, then translate between clock frequency and cycle length. These distinctions keep a fast processor, a high-capacity server, and a responsive application from becoming three different claims hidden behind the same word.
2.1 Time for one task and work per second
A person waiting for a file conversion wants a short response time. A service processing many conversions also needs high throughput. These measures answer different questions, even when both describe the same computer.
Choose the quantity that matches the task
Response time, also called execution time or latency, runs from the task’s start to its completion. It includes computing, memory and storage accesses, I/O, and relevant operating-system activity. If the task waits in a queue after submission, that wait contributes to the user’s response time.
Throughput is completed work per unit of time. Its units might be requests per second or jobs per hour. A machine can complete many jobs per hour while each individual job still takes a long time.
| Need | Useful measure | Improvement |
|---|---|---|
| Finish one interactive request | Response time | Fewer seconds per request |
| Process a large independent workload | Throughput | More requests per second |
| Serve many people acceptably | Both | More completed work with acceptable waits |
Adding processors can raise throughput by running independent tasks at once. It need not shorten a task’s own computation, although it can reduce time spent waiting for a free processor. A faster processor often helps both measures.
Compare performance in the right direction
For the same task, define:
If A takes 10 s and B takes 15 s, A’s performance relative to B is:
A is 1.5 times as fast. B’s performance is two thirds of A’s. Put the larger execution time over the smaller one when reporting how many times as fast the faster machine is.
For an improvement, speedup is old time divided by new time. A build falling from 60 s to 48 s has speedup:
Its time reduction is:
The performance rose by 25%, while time fell by 20%. These percentages use different denominators. Saying “20% faster” can obscure which quantity changed; the ratio and the measured times make the claim clear.
Equal throughput can hide unequal waits
A service completing 1,200 requests per minute delivers 20 requests per second. That rate could come from processing one request every 50 ms, with each request taking 50 ms. It could also come from processing ten requests in parallel, each taking 500 ms: ten completions every half second again gives 20 per second.
The second arrangement has the same throughput but ten times the per-request processing time. A throughput result alone cannot establish the latency a user experiences. Compare the same completed work, state the time interval, and retain the units when moving between minutes and seconds.
Key Takeaways
- Response time measures how long one task takes; throughput measures completed work per unit of time.
- For the same task, performance is the inverse of execution time.
- Speedup is old time divided by new time; percentage time reduction uses the old time as its denominator.
- Extra processors can raise throughput without shortening a sequential task’s computation.
- Equal throughput can coexist with very different request latencies.
2.2 Read timing results and convert clock units
A stopwatch measures everything between start and finish. The CPU performance equation measures processor work. Keeping those views separate prevents a processor upgrade from receiving credit for waiting time it cannot remove.
Elapsed time and processor time
Elapsed time, or wall-clock time, includes computing, waiting for files or the network, and intervals when other processes run. CPU time records processor time charged to the task. User CPU time runs the program’s code; system CPU time runs operating-system code on its behalf.
Suppose the Unix time command reports “real 2.50 s, user 1.80 s, sys 0.20 s.” The program used:
of CPU time. For this single-threaded timing example, the remaining 0.50 s represents time not charged as CPU execution, such as waiting or being scheduled out. If a processor improvement halves the CPU part while that waiting stays fixed, elapsed time becomes:
Halving the full 2.50 s would incorrectly speed up the waiting too. CPU performance often focuses on user time; system performance is judged using elapsed time under controlled system load.
For a parallel program, CPU time is summed across its threads and cores. Four cores working for most of one second can produce 3.6 s of user time during 1.0 s of elapsed time. In that case, subtracting summed CPU time from elapsed time does not measure waiting.
Clock rate is the reciprocal of period
A clock gives synchronous hardware a timing rhythm. The clock period is seconds per cycle; the clock rate is cycles per second:
At 4 GHz, the rate is four billion cycles per second. One cycle lasts:
At 2.5 GHz the period is 400 ps. In the opposite direction, 312.5 ps per cycle gives:
| Prefix or unit | Value |
|---|---|
| GHz | cycles/s |
| ns | s |
| ps | s |
| KiB | bytes |
| GiB | bytes |
Time and frequency prefixes use decimal powers. Binary memory prefixes use powers of two. Labels such as “GB” are sometimes used loosely for binary quantities, so inspect the meaning before converting a size.
Interpret a measurement as a run
A processor’s advertised frequency is not a record of every moment of execution. Boosting, power management, and thermal throttling change frequency. Cache contents and background activity also change measured time. Repeating a measurement and reporting a typical value, such as the median, helps distinguish a stable result from an unusually favorable run. Use timing and frequency measurements from the same execution interval when connecting them to cycle counts.
Key Takeaways
- Elapsed time includes waiting; CPU time includes user time plus system time charged to the task.
- CPU time summed across several cores can exceed elapsed time.
- Clock period and clock rate are reciprocals; keep seconds, nanoseconds, and picoseconds consistent.
- GHz uses decimal powers of ten; KiB and GiB use binary powers of two.
- Boost, throttling, caches, and background work can change the result from run to run.
- A CPU speedup reduces the CPU portion of elapsed time, leaving unaffected waits in place.
3Calculate and compare CPU time
A program’s CPU time comes from how many instructions it executes, how many cycles those instructions require, and how long each cycle lasts. These factors can move in opposite directions when a compiler or processor changes. Work through cycle budgets and instruction mixes before comparing complete execution times, then use those same relationships to judge clock-rate claims, instruction-rate claims, and benchmark summaries.
3.1 Turn a cycle budget into CPU time
A clock cycle is a unit of processor time, not an instruction. Some instructions need many cycles, and overlapping execution can complete several instructions per cycle. Begin with the total cycles needed by the whole program.
Divide cycles by cycles per second
If a program needs a known number of cycles, its CPU time is:
For six billion cycles at 3 GHz:
The units explain the division: cycles divided by cycles per second leaves seconds. Multiplying cycles by frequency would produce cycles squared per second, not a duration. Multiplying by the period works because its unit is seconds per cycle.
The same equation can find another unknown. Multiply time by frequency to recover cycles; divide cycles by the target time to find the needed frequency. Keep the frequency in Hz when the time is in seconds, or cancel matching billion-scale factors explicitly.
When a faster clock requires more cycles
Processor A runs a program in 10 s at 3 GHz. Its cycle budget is:
A proposed design B increases that cycle count by 20%. B must therefore execute:
To finish in 9 s, B needs:
The clock-rate ratio is four thirds, about 1.33. The actual speedup is only ten ninths, about 1.11, because B needs more ticks to finish the work. Treating the old cycle count as unchanged would predict a clock rate too low to reach the target.
Compare a tradeoff without choosing a program size
Let a design multiply the old cycle count by a factor and the old clock rate by a factor . Then:
The design is faster when the cycle-count growth factor is smaller than the frequency growth factor. If both grow by the same factor, CPU time is unchanged. This ratio is useful when a design proposal reports percentage changes but gives no absolute cycle count.
Why the period has a physical limit
Between registers, signals travel through combinational logic and must settle before their results are captured. The slowest required path is the critical path. Circuit technology and the amount of work assigned to a stage limit how short a safe clock period can be.
A designer can divide work into shorter pipeline stages to allow a faster clock, but the reorganization can also change cycle count. More GHz is therefore a statement about tick frequency. To establish a performance improvement, pair it with the cycles the program actually needs under that design.
Key Takeaways
- CPU time equals cycles times cycle period, or cycles divided by clock rate.
- Time times clock rate recovers cycles; cycles divided by target time gives the required clock rate.
- Compare the cycle-count factor with the frequency factor when both change.
- The critical path limits the clock period, and reorganizing the work can change the cycle count.
3.2 Weight CPI by the instructions that run
Cycles per instruction (CPI) is the program’s total CPU cycles divided by its executed instruction count. It is an average over a run, so it can be fractional and depends on which instructions execute and how they interact with the machine.
Add the cycles before taking the average
For instruction classes with counts and class CPIs :
Equivalently, multiply each class CPI by its fraction of the instruction count and add the contributions. The fractions must describe executed instructions, not source lines or the number of instruction types.
Suppose ALU instructions take 1 cycle, loads/stores take 4, and branches take 2. A mix of 50%, 30%, and 20% gives:
For five billion instructions at 3 GHz, total cycles are 10.5 billion and CPU time is 3.5 s. The unweighted mean of the three class costs, about 2.33, is wrong: the classes do not appear equally often.
More instructions can still mean fewer cycles
Two compiler versions use the same class costs:
| Class | Cycles each | Version 1, millions | Version 2, millions |
|---|---|---|---|
| ALU | 1 | 400 | 600 |
| Load/store | 4 | 300 | 150 |
| Branch | 2 | 100 | 100 |
Version 1 executes 800 million instructions. Its cycle contributions are 400, 1,200, and 200 million, totaling 1,800 million. Its CPI is:
Version 2 executes 850 million instructions. Its contributions are 600, 600, and 200 million, totaling 1,400 million. Its CPI is:
At 3 GHz, the times are 0.60 s and about 0.467 s. Version 2 is about 1.29 times as fast despite executing 50 million more instructions. Replacing many expensive memory instructions with more cheap ALU instructions can make that trade worthwhile.
CPI belongs to a workload on a machine
Memory stalls, cache misses, branch behavior, and compiler choices change effective CPI. A single “processor CPI” cannot describe every program. Hardware performance counters or a simulator can measure instruction and cycle totals for the workload being analyzed.
Instructions per cycle (IPC) uses the same totals in the opposite order:
An IPC of 2.5 gives CPI 0.4. Multiple instructions can overlap in a processor that issues and completes several instructions per cycle. An average below one does not mean an individual instruction’s full journey finishes in a fraction of a clock tick.
Key Takeaways
- Compute total cycles by summing each class count times its CPI.
- Average CPI weights class costs by executed instruction fractions.
- A longer instruction sequence can run faster if its total cycle count is smaller.
- CPI depends on the program, compiler, and machine behavior during the run.
- IPC is the reciprocal of CPI; overlapping execution can produce CPI below one.
3.3 Combine instruction count, CPI, and clock rate
The CPU performance equation brings the three timing factors together:
Here counts executed instructions and is the clock rate in effect during execution. Instructions times cycles per instruction gives cycles. Dividing by cycles per second then gives seconds.
Calculate a time and recover an unknown
A program executes two billion instructions at CPI 1.5 on a 2.5 GHz processor. First find the cycle total, then convert it to time:
To infer CPI from measured time, rearrange the same equation:
For 1.6 billion instructions in 0.8 s at 3.2 GHz, there are 2.56 billion cycles. Dividing by 1.6 billion instructions gives CPI 1.6.
Compare complete products
Two processors run the same compiled program with the same instruction count. A has 4 GHz and CPI 1.8; B has 2.5 GHz and CPI 1.0. Their time per instruction is:
B is 1.125 times as fast. Its lower CPI more than offsets its slower clock. Instruction count cancels here because it is equal; it would not cancel if the two programs followed different instruction sequences.
Likewise, a compiler option that cuts instruction count by 10% but raises CPI by 15%, at the same frequency, changes time by:
Time rises by 3.5%. The instruction reduction alone points in the wrong direction.
Connect design choices to the factors
| Choice | Factors it can change |
|---|---|
| Algorithm | Instruction count and possibly CPI |
| Programming language or compiler | Instruction count and CPI |
| ISA | Instruction count, CPI, and clock rate |
| Organization | CPI and clock rate |
| Circuit technology | Clock rate |
The links are useful for analysis, not independent controls that can always be adjusted without consequences. A cache reduces memory-wait cycles, lowering effective CPI. Pipelining overlaps successive instructions and can lower effective CPI or allow a shorter clock period. Such changes may introduce other costs that appear in the measured totals.
Keep the measurement interval consistent
Measure CPU time, instruction count, cycles, and frequency for the same work. Counters or simulation provide instruction and cycle counts. A product’s rated GHz is not the frequency record for a run that boosts or throttles. When frequency varies, the matching average is total counted cycles divided by the CPU time for that interval.
The equation predicts CPU execution time. Waiting for storage or the network belongs in elapsed time and must be included separately when that is the result the user needs.
Key Takeaways
- CPU time is instruction count times CPI divided by clock rate.
- Rearrange the equation to infer CPI, instruction count, or required frequency from measured quantities.
- Cancel instruction count only when the compared executions have the same count.
- Compiler and hardware changes can improve one factor while worsening another.
- Use the frequency and counts from the same run, not an advertised clock rate.
- Add unaffected waits separately when predicting elapsed time.
3.4 Judge benchmark scores and instruction-rate claims
A useful performance claim concerns work that matters to the user. A benchmark runs a chosen workload to measure performance. A benchmark suite samples several workloads when one application cannot represent the whole need.
Read the kind of SPEC result
SPEC CPU 2026, released in May 2026, follows SPEC CPU 2017. Its suites exercise processors, memory systems, and compilers. SPECspeed measures completion time for one copy of a program; that copy can itself use multiple threads. SPECrate measures throughput using multiple copies. Integer and floating-point suites serve different workload types, and the product also supports energy metrics.
A single-program speed ratio compares reference time with measured time:
A reference time of 3,000 s and measured time of 250 s gives 12. Higher is better. A rate ratio includes the number of copies completed in the measured interval. Compare like metrics and the same suite version; a speed score and a rate score answer different questions.
Summarize ratios with a geometric mean
For positive ratios, the suite uses:
Ratios 2, 8, and 4 give a product of 64 and a cube root of 4. Their arithmetic mean is about 4.67, a different result.
The geometric-mean comparison does not depend on which reference machine sets the ratios. Suppose X takes 10 s and 40 s on two programs, while Y takes 20 s and 25 s. Reference times of 100 s for both give ratios 10 and 2.5 for X, and 5 and 4 for Y. The geometric means are 5 and about 4.47, so X leads by about 1.12.
Change the reference times to 50 s and 200 s: X gets ratios 5 and 5, Y gets 2.5 and 8. Their geometric means stay 5 and about 4.47. The arithmetic means instead change from 6.25 versus 4.5 to 5 versus 5.25, reversing the ranking. Reference normalization must not decide which machine appears faster.
Why MIPS can reward slower code
MIPS, million instructions per second, is:
Instructions do different amounts of useful work across ISAs. Even on one machine, MIPS changes with the program, and a higher instruction rate can accompany a longer execution time.
At 3 GHz, let ALU, load/store, and branch instructions cost 1, 4, and 2 cycles. Code Q executes 400, 300, and 100 million of them: 800 million instructions, 1,800 million cycles, 0.60 s, about 1,333 MIPS. Code P executes 1,500, 100, and 100 million: 1,700 million instructions, 2,100 million cycles, 0.70 s, about 2,429 MIPS. P retires instructions faster but finishes the task later.
Peak rates describe ideal hardware capacity. Real workloads may reach much less because of dependencies, memory waits, and other limits. Use actual task time to judge task performance; frequency, MIPS, and peak rates explain only selected pieces of it.
Key Takeaways
- Choose benchmarks that represent the intended workload.
- SPECspeed measures one copy’s completion time; SPECrate measures throughput across copies.
- A larger reference-time/measured-time ratio indicates better performance.
- Use the geometric mean to summarize positive normalized ratios without reference-dependent rankings.
- MIPS can rise while a task slows down, and instructions across ISAs do different amounts of work.
- Peak rates describe ideal capacity, not a task’s measured execution time.
4Find the limits of an improvement
An improvement matters only during the part of a task that can use it. A faster arithmetic unit leaves file waits alone, and extra cores leave serial work on one core. Amdahl’s law turns that split into a time budget, making both likely gains and hard limits visible. The same reasoning helps choose an optimization, work backward from a target, and explain why fixed-size and growing-size parallel workloads tell different stories.
4.1 Calculate the gain from improving part of a task
Amdahl’s law starts by dividing the original execution time into an affected part and an unaffected part. Speed up only the affected time, then add the pieces back together. This avoids applying a local improvement to work it cannot change.
Build the new time from old times
If the affected part becomes times as fast:
Let be the affected fraction of the original execution time. Dividing by the original time gives the speedup form:
A 120 s program spends 90 s on floating-point work and 30 s elsewhere. Thus the affected fraction is 0.75. Making floating point three times as fast reduces its time to 30 s:
The floating-point work gains a factor of three; the complete program gains a factor of two. The unchanged 30 s explains the gap.
Work backward from a target
To finish the same task in 40 s, the unchanged work still needs 30 s. Only 10 s remain for the original 90 s floating-point part. Therefore:
A target of 30 s would leave zero time for that work. No finite acceleration makes a positive amount of affected work take exactly zero time. As the local speedup grows without bound, the overall speedup approaches:
Here the limit is 4, approached from below. With an unaffected fraction of one half, the limit is 2. When all the work is affected, there is no unchanged positive time to impose such a finite ceiling.
Optimize where the time goes
The principle make the common case fast means identifying where execution time is actually spent. Profiling measures that distribution. Doubling a part responsible for 60% of time gives:
A tenfold improvement to a 10% part gives only:
A large local factor can lose to a modest improvement applied to more of the task.
The affected fraction must be a time fraction. If loads/stores are 30% of instructions but take 60% of the cycles, their time fraction at a fixed clock rate is 0.60. Counting instructions equally would miss their larger cost.
Apply the same split to waiting
For a task with 2.00 s of CPU work and 0.50 s of fixed file waiting, doubling CPU speed gives 1.50 s overall. Its speedup is about 1.67. The same time budget works for hardware, software, and I/O improvements: identify exactly which original time changes before applying the factor.
Key Takeaways
- Amdahl’s law accelerates the affected time and leaves the unaffected time in the total.
- The affected fraction is a fraction of original time, not instructions or source lines.
- Use the target time minus unaffected time to find the required local improvement.
- A positive unaffected fraction sets a speedup limit of one divided by that fraction.
- Profiling helps identify improvements that affect a large share of execution time.
4.2 Estimate speedup and efficiency across cores
More cores shorten a task only when work can run at the same time. Divide a fixed task’s original single-core time into a serial part and a parallel part, then consider what additional cores can change.
Amdahl’s law for a fixed-size task
Let be the parallel fraction of the original single-core time. With perfect division across cores and no overhead:
For a parallel fraction of 0.95, the serial fraction is 0.05. Eight cores give:
At 100 cores the speedup is about 16.8; at 1,000 cores it is about 19.6. The serial 5% keeps the fixed-size speedup below 20 regardless of how many cores are added.
Parallel efficiency is speedup divided by core count. The eight-core efficiency is about 0.74, or 74%. At 100 cores it is about 17%. A larger speedup can come with lower efficiency because each additional core contributes less to the fixed task.
Why measured gains can be smaller
The ideal model gives the parallel work equal shares and no coordination cost. Real programs communicate and synchronize, and some cores receive more work than others.
For 100 equal units of independent work on four identical cores, a balanced assignment gives 25 units to each. If one receives 40 units while the rest finish earlier, completion waits for that busiest core. The speedup is 100 divided by 40, or 2.5, even before adding communication costs. Adding the other cores’ early finishing times together would not give the completion time: the last required result determines it.
A single-threaded program has no parallel fraction to distribute. More cores can still run other programs and improve system throughput, but they do not divide that program’s instruction stream automatically.
Fixed work and growing work ask different questions
Strong scaling holds total problem size fixed and asks how much faster more processors can finish it. Weak scaling grows total work in proportion to processor count so that work per processor stays about constant. A larger simulation can use a finer grid while retaining roughly the same workload per processor.
Gustafson’s law describes scaled work when serial time stays fixed while parallel work grows. Its serial fraction is measured on the parallel run, unlike Amdahl’s original single-core fraction:
For a measured serial fraction of 0.05 on 100 cores, scaled speedup is 95.05. This does not contradict Amdahl’s limit of 20 for a fixed task whose original serial fraction was 5%. The task size and the fraction’s measurement basis differ.
Parallel software must expose independent work, balance it, and coordinate the results. More hardware provides capacity; the program’s structure determines how much of that capacity shortens its completion time.
Key Takeaways
- For ideal fixed-size scaling, divide only the original parallel time by the core count.
- The original serial fraction sets Amdahl’s multicore speedup limit.
- Parallel efficiency is speedup divided by the number of cores.
- Communication, synchronization, and uneven work distribution reduce gains.
- Strong scaling fixes total work; weak scaling keeps work per processor approximately fixed.
- Gustafson’s law uses a serial fraction measured on the parallel run for a growing workload.
5Connect power limits to multicore design
A processor must finish work within both a time budget and a power budget. Switching transistors consumes energy, voltage strongly affects that cost, and heat limits how aggressively a chip can run. Connect those relationships to the end of ideal transistor scaling and the move toward multiple cores. The result explains why more transistors can still be useful even when faster clocks alone cannot deliver the next performance gain.
5.1 Calculate switching power and task energy
CMOS processors consume energy when signals switch and also through leakage while powered. Dynamic energy is associated with switching; static power is drawn even without useful switching. Their relative shares depend on the chip and its workload.
Voltage has a squared effect
The energy associated with a transition scales with capacitance and the square of supply voltage. A common expression uses one half of capacitance times voltage squared; a full charge-and-discharge pulse scales with capacitance times voltage squared. For average dynamic power, use:
Here is capacitive load, is supply voltage, is clock frequency, and describes switching activity under the chosen counting convention. Some conventions absorb a factor of one half into the activity factor. Ratio calculations work cleanly when the activity convention is kept consistent.
For unchanged capacitance and activity, lowering both voltage and frequency by 20% gives:
The new dynamic power is 51.2% of the original. Lowering voltage alone by 10% gives a factor of 0.81, a 19% reduction in dynamic power and energy per transition.
Lower voltage also slows transistor switching. Dynamic voltage and frequency scaling (DVFS) adjusts voltage and frequency together so the circuitry can still operate at its chosen speed.
Power and energy answer different questions
Power is a rate, measured in watts; one watt is one joule per second. Energy for a task is average power multiplied by duration:
| Execution | Average power | Time | Energy |
|---|---|---|---|
| A | 20 W | 3 s | 60 J |
| B | 30 W | 1.5 s | 45 J |
B draws more power while running but uses less energy to complete the task. Cooling must handle the rate of heat production; battery use and electricity consumption accumulate energy over time.
For fixed work with the same transition count, voltage, and activity, lowering frequency alone spreads those transitions over more time. Dynamic power falls, but dynamic task energy is unchanged. Lowering voltage reduces the energy of each transition as well. If static power persists throughout the longer run, slowing down can even increase that part of task energy.
Leakage and idle hardware
Nominally off transistors still pass leakage current. Smaller devices and lower threshold voltages make leakage an important design issue. Power gating disconnects the supply to an idle region to reduce its static draw.
A lightly loaded server can still use a substantial fraction of its peak power. Making consumption follow useful work, called energy proportionality, is a design goal. Finishing a task quickly and entering a low-power state can save energy by shortening the interval over which leakage and other background power are paid. Performance and energy efficiency can therefore improve together.
Key Takeaways
- Dynamic power scales with switching activity, capacitance, voltage squared, and frequency.
- Voltage reduction lowers energy per transition and usually requires a frequency adjustment.
- Task energy is average power times duration; a higher-power run can use less energy.
- Lowering frequency alone leaves fixed-transition dynamic task energy unchanged.
- Leakage causes static power, and power gating reduces draw in idle regions.
- Low utilization does not guarantee low power; energy proportionality is a design goal.
5.2 Why faster clocks met a power limit
For decades, smaller transistors brought both more devices and faster switching within a manageable heat budget. The power wall appeared when voltage could no longer keep falling enough to support that pattern. It changed the way designers turned new transistors into useful performance.
The ideal Dennard scaling relationship
In the ideal scaling model developed by Robert Dennard and colleagues in 1974, let a factor describe the shrink. Dimensions, capacitance, voltage, and delay are divided by that factor. Frequency can multiply by the factor. Dynamic power per transistor therefore changes by:
Area per transistor also falls by the square of the shrink factor. The same area can hold that many more transistors, offsetting the lower power per device. Power density, watts per unit area, remains approximately constant in this ideal model.
For a factor of 1.4, capacitance and voltage fall to about 0.71 of their original values and frequency rises by 1.4. Power per transistor falls to about 0.51. About 1.96 times as many transistors fit, so total power in the same area stays roughly unchanged.
Why voltage stopped tracking size
Transistors need a usable switching threshold. Reducing threshold voltage too far sharply increases leakage. By the mid-2000s, supply voltage could no longer shrink in step with transistor dimensions. At nearly fixed voltage, a higher frequency raises dynamic power, and packing more active transistors into an area raises the heat that must be removed.
The historical figures show the scale of the earlier change: desktop clocks rose from around 10 MHz in the early 1980s to 3.8 GHz in 2004, while supply voltages fell from roughly 5 V toward 1 V. Those are broad historical values, not universal specifications. Around 100 W was already a difficult cooling budget for many mainstream designs of that period.
Intel’s 2004 cancellation of the planned 4 GHz Pentium 4 and Tejas design marked that turn toward power-conscious designs and dual cores. Clock rates subsequently remained on the scale of a few gigahertz instead of following the earlier rapid climb. Microarchitecture continued to improve single-core performance, but frequency increases supplied much less of the gain.
Manage the thermal budget
Thermal design power (TDP) is a thermal-design target used to size a cooling solution under specified operating conditions. It is not an instantaneous power measurement or a universal maximum. When thermal limits are reached, throttling lowers operating speed to reduce heat.
If a chip contains more hardware than its power budget can run together at full speed, some regions must be slowed or switched off. Dark silicon names this gap between available transistors and simultaneously usable active hardware.
Moore’s law and Dennard scaling describe different trends: transistor counts versus power-aware scaling behavior. The breakdown of the latter did not mean transistor counts stopped growing. The obstacle to indefinitely raising frequency is chiefly power and heat, not a sudden inability of transistors to switch any faster.
Key Takeaways
- Ideal Dennard scaling reduced voltage with device size and kept power density roughly constant.
- Leakage and switching-threshold constraints prevented voltage from continuing to scale ideally.
- Without matching voltage reductions, faster clocks and more active devices raise power density.
- TDP guides cooling design under specified conditions; throttling reduces speed at thermal limits.
- Dark silicon describes hardware that cannot all be active at full speed within the power budget.
- Moore’s transistor-count trend is distinct from Dennard’s scaling relationship.
5.3 Use more cores within a power budget
A multicore processor places several cores on one chip. Each core runs an instruction stream, while cores share main memory and often some caches. Mainstream desktop and laptop designs moved toward dual cores around 2005–2006 as raising a single core’s clock became increasingly costly in power.
Compare two slower cores with one faster core
Consider one core at 4 GHz and 1.2 V versus two cores at 3 GHz and 1.0 V. Keep capacitance per core and switching activity the same for this comparison. Relative dynamic power is:
With equal work per cycle and enough independent work for both cores, ideal throughput changes by:
The pair offers about 50% more throughput for about 4% more dynamic power. The squared voltage reduction makes the extra core affordable in this model. Static power, shared memory limits, and coordination costs still matter when assessing a complete chip.
For a sequential program using only one new core, performance falls to three quarters of the original at equal work per cycle. It takes four thirds as long. Combining the two 3 GHz rates into “6 GHz” would conceal that outcome: neither core ticks at 6 GHz.
Software must expose the work
Before the power wall, higher frequency and hardware overlap often accelerated existing code without major changes. Extra cores need independent instruction streams. A program gains from them by dividing its work into concurrent tasks, balancing the assignments, and coordinating results. Parallel libraries can provide that structure, but the work still must have a useful parallel form.
Instruction-level parallelism overlaps instructions within a stream, using hardware and compiler techniques such as pipelining and multiple issue. Thread-level parallelism runs different threads across cores. These are different sources of concurrency: the first does not ensure that a program can occupy every core.
Independent server requests naturally provide many streams, so multicore can improve throughput even when each request remains sequential. Shortening one request’s computation needs parallelism inside that request. Its serial fraction then imposes the Amdahl limit.
Spend transistors on efficient kinds of work
More transistors can support larger caches, several general-purpose cores, or specialized hardware. GPUs and domain-specific accelerators target workloads such as graphics, machine learning, and video encoding. Chips can also mix fast, high-power cores with smaller, more efficient cores, as in Arm big.LITTLE designs.
Under a fixed power budget, performance per watt compares useful performance with power draw. SPEC CPU 2026 also supports energy measurements alongside performance metrics. A good design decision considers the workload’s completion time, its energy cost, and the power the system can sustain.
Key Takeaways
- Multicore chips run multiple instruction streams on separate cores.
- Lower voltage and frequency per core can improve total throughput within a similar dynamic-power budget.
- A sequential task gains no extra execution capacity from unused cores.
- Instruction-level overlap and thread-level parallelism are different mechanisms.
- Independent requests can improve system throughput without reducing each request’s computation time.
- Specialized and mixed-core hardware offer other ways to use transistors efficiently.
Computer Performance examples
1Follow a computation from code to hardware
16 steps
- 1IntroductionOne addition, several views
The C statement
total = price + tax;describes a result, but leaves registers, instruction encodings, and switching circuits unstated. Those details live at different layers, each an abstraction that hides its work behind an interface.Follow the addition downward, then ask what must match for a binary to run on a different machine: the ISA and its conventions. This separates the behavior software relies on from the hardware choices that determine its performance.
- 2ExplanationAn interface hides internal work
An abstraction exposes a useful service while hiding its internal implementation. An application can request a file read without controlling storage electronics.
A common downward path is applications → systems software → ISA → microarchitecture → digital logic → circuits → transistors. Each view makes the system manageable by providing a boundary at which another designer can work.
- 3ExampleWho chooses what for the addition?
For
total = price + tax;, the compiler can choose registers and an add instruction. It does not need to design the adder’s gates.The microarchitect chooses execution hardware; the logic designer builds an adder from gates; circuit designers deal with electrical behavior. Meeting the interfaces lets each choice fit into the complete computation without exposing every lower detail to the programmer.
- 4ConnectionPlace the physical components
The classic five components are input, output, memory, datapath, and control. The CPU combines datapath and control: one operates on data, the other directs the work.
DRAM holds working memory, SRAM supplies small fast caches, and both are volatile. Flash and magnetic disks retain data without power. An operating system manages these resources as software executing on the CPU.
- 5ChallengeIdentify the changed layer
An engineer replaces the gates inside an adder. Its machine instructions still produce all the same required results. Has the engineer necessarily changed the ISA? Explain.
---reveal---
No. The engineer changed the digital-logic implementation. The ISA specifies the visible addition behavior; different gate arrangements can meet that same specification. They can nevertheless differ in delay, power, or area.
- 6Key InsightMore devices do not specify a task time
A transistor acts as an electrically controlled switch, and a chip integrates many such devices. Moore’s law describes the historical trend of roughly doubling transistor counts about every two years.
Ten doublings give a factor of 1,024 over about 20 years. That manufacturing trend, whose pace has slowed, does not specify how quickly one program runs. The added devices still need a useful organization and a workable power budget.
- 7ExplanationBuild an executable
A compiler translates high-level source into assembly or object code. An assembler encodes assembly into an object file. A linker combines object files and library code, resolving references between them.
The loader then maps the executable into memory and starts it. These jobs are distinct: translated code can still need a library reference resolved before it forms the executable used for the run.
- 8ExampleSelect registers and an instruction
Suppose
priceis held inx6,taxinx7, and the result belongs inx5. The C addition can become:add x5, x6, x7The destination appears first in this assembly syntax. The instruction reads the two source registers, adds their values, and writes the result to the destination. The text is a symbolic instruction; the processor needs its binary encoding.
- 9ExampleEncode the same addition
The R-type encoding fields, in stored bit order, are:
- funct7:
0000000 - rs2:
00111 - rs1:
00110 - funct3:
000 - rd:
00101 - opcode:
0110011
Joined together, they encode
0x007302B3. The source-register fields precede the destination field in the bit layout even though the destination comes first in assembly text. Field positions let hardware interpret the same bits consistently. - funct7:
- 10TipCount operations, not source lines
Even with operands already in registers,
f = (g + h) - (i + j);needs two additions and one subtraction. Loads add instructions when data begins in memory.Assembly shorthand can also hide a translation step:
mv x5, x6becomesaddi x5, x6, 0. CPython interprets intermediate bytecode and Java commonly uses JIT compilation, but in every route the physical CPU eventually carries out machine instructions. - 11ChallengeLocate an unresolved function
Assembly has been converted into object code, but a call still refers to a function in another object file. What stage handles that reference, and what later stage starts the program?
---reveal---
The linker resolves the reference while combining the object files. The loader later maps the resulting executable into memory and starts it. Loading does not replace the translation and reference-resolution work of the earlier build stages.
- 12ExplanationSeparate the contract from its implementation
The ISA specifies instructions, encodings, registers, addressing, and other visible machine behavior. The microarchitecture chooses internal pipelines, execution units, caches, and related structures.
Whether multiplication exists and what result it returns are ISA questions. Whether that multiplication takes one cycle or four is an implementation question. Two compatible processors can therefore compute the same result at different speeds.
- 13ConnectionAdd the binary conventions
The ABI adds operating-system interfaces and conventions such as argument registers and data layout to the user-level ISA. A binary needs both the instruction features it uses and a compatible execution environment.
RISC-V offers RV32I and RV64I bases plus optional extensions, including M for integer multiply/divide and F and D for floating point. Sharing a base ISA alone does not guarantee every extension or ABI a program expects.
- 14ChallengeChoose what compatibility really requires
A binary runs on a new machine with a different cache size, but fails on another machine that lacks an instruction extension it uses. What explains the different outcomes?
---reveal---
Cache size is an implementation choice that can affect speed while preserving the required ISA behavior. The missing extension removes instruction support the binary needs. Binary reuse requires the relevant ISA features and ABI; identical caches are not part of that requirement.
- 15ChallengeJudge the richer-instruction claim
A proposed ISA instruction replaces several older instructions. Its designer claims this alone proves a faster program on the new machine. What else must be compared?
---reveal---
Compare instruction count, average cycles per instruction, and clock period for the complete task. The new instruction may reduce count while increasing cycle cost or requiring a longer period. The translation benefit becomes a performance gain only through the complete timing product.
- 16RecapRead the whole path
A source expression becomes instructions through translation and linking, then runs on hardware that implements an ISA. The ABI adds the conventions needed by the executable’s environment.
Use that path to locate a change: code choices alter the instruction stream; implementation choices alter how it runs. Compatibility concerns required behavior, while performance depends on the work and timing throughout the lower layers.
2Choose and interpret a performance measure
12 steps
Save this lesson to follow every Walkthrough step by step.
- 1IntroductionDecide what completion means
- 2ExplanationMeasure one task or a stream
- 3ExampleReverse the time ratio
- 4ChallengeCan the same rate mean the same wait?
- 5ExplanationRead real, user, and system time
- 6Key InsightParallel CPU seconds add up
- 7ExampleTake the reciprocal in seconds
- 8TipKeep decimal and binary prefixes separate
- 9ChallengeInfer a clock period
- 10TipDescribe an actual run
- 11ChallengePredict elapsed time after a CPU upgrade
- 12RecapAttach the right unit to the claim
3Build and test a CPU-time prediction
21 steps
Save this lesson to follow every Walkthrough step by step.
- 1IntroductionThree factors make one execution time
- 2ExplanationStart with the cycle budget
- 3ExampleRecover cycles before changing the design
- 4ConnectionThe clock cannot outrun required logic
- 5ChallengeIs the clock increase enough?
- 6ExplanationCPI is an execution-weighted average
- 7ExampleWork an instruction mix
- 8ExampleA longer stream can have a smaller cycle total
- 9Key InsightAn average below one is possible
- 10ChallengeCalculate cycles and the reciprocal rate
- 11ExplanationConvert instructions all the way to time
- 12ExampleCompare two equal instruction counts
- 13ConnectionLocate the design lever
- 14ChallengeRecover a measured CPI
- 15ExplanationChoose the benchmark metric
- 16ExampleMultiply ratios, then take the root
- 17ChallengeRead a throughput ratio
- 18ExampleCheck what a high MIPS result rewards
- 19TipRead peak figures as capacity
- 20ChallengePut the compiler and hardware changes together
- 21RecapTest the complete claim
4Find which part limits a speedup
15 steps
Save this lesson to follow every Walkthrough step by step.
- 1IntroductionKeep the unchanged work in the budget
- 2ExplanationSplit original time before accelerating it
- 3ExampleAccelerate the floating-point part
- 4ExampleWork back from the target time
- 5Key InsightProfile the costly part
- 6ChallengeChoose the better improvement
- 7ExplanationUse cores only for parallel time
- 8ExampleAdd many cores to a 95% parallel task
- 9ExplanationDivide speedup by cores to find efficiency
- 10ExampleCompletion waits for the busiest core
- 11ChallengeRecover the serial constraint
- 12ConnectionChange the question when the work grows
- 13ChallengeCheck whether two claims conflict
- 14ChallengeInclude CPU work and file waiting
- 15RecapFind the residual time first
5Explain the power wall and the multicore response
19 steps
Save this lesson to follow every Walkthrough step by step.
- 1IntroductionPerformance has a heat budget
- 2ExplanationCount switching and leakage separately
- 3ExampleApply the voltage square
- 4ExampleCompare energy over a complete task
- 5Key InsightSlower frequency does not remove transitions
- 6ChallengeKeep the static component unchanged
- 7ExplanationThe ideal shrink kept power density stable
- 8ExampleCheck one ideal technology generation
- 9ExplanationVoltage could not keep following size
- 10ConnectionRead thermal limits as operating constraints
- 11ChallengeDiagnose the scaling failure
- 12ExplanationMore cores provide separate streams
- 13ExamplePrice two slower cores in dynamic power
- 14ExampleAsk whether the workload can use the pair
- 15ConnectionDistinguish instruction and thread overlap
- 16ConnectionUse specialized hardware for suitable work
- 17ChallengeChoose a design for independent work
- 18ChallengeCombine slowing, energy, and completion time
- 19RecapMatch the design to its useful work
Computer Performance practice questions
Set 1: Connect the layers and basic performance measures10 Practice Questions
Question 1 of 10
Show answerHide answer
Question 2 of 10
Show answerHide answer
Question 3 of 10
Show answerHide answer
Question 4 of 10
Show answerHide answer
Question 5 of 10
Show answerHide answer
Question 6 of 10
Show answerHide answer
Question 7 of 10
Show answerHide answer
Question 8 of 10
Show answerHide answer
Question 9 of 10
Show answerHide answer
Question 10 of 10
Show answerHide answer
Set 2: Read workloads, mixes, and design changes10 Practice Questions
Save this lesson to see every answer and practice every set.
Question 1 of 10
Show answerHide answer
Save this lesson to see this answer.
Question 2 of 10
Show answerHide answer
Save this lesson to see this answer.
Question 3 of 10
Show answerHide answer
Save this lesson to see this answer.
Question 4 of 10
Show answerHide answer
Save this lesson to see this answer.
Question 5 of 10
Show answerHide answer
Save this lesson to see this answer.
Question 6 of 10
Show answerHide answer
Save this lesson to see this answer.
Question 7 of 10
Show answerHide answer
Save this lesson to see this answer.
Question 8 of 10
Show answerHide answer
Save this lesson to see this answer.
Question 9 of 10
Show answerHide answer
Save this lesson to see this answer.
Question 10 of 10
Show answerHide answer
Save this lesson to see this answer.
Set 3: Find bottlenecks and compare complete designs10 Practice Questions
Save this lesson to see every answer and practice every set.
Question 1 of 10
Show answerHide answer
Save this lesson to see this answer.
Question 2 of 10
Show answerHide answer
Save this lesson to see this answer.
Question 3 of 10
Show answerHide answer
Save this lesson to see this answer.
Question 4 of 10
Show answerHide answer
Save this lesson to see this answer.
Question 5 of 10
Show answerHide answer
Save this lesson to see this answer.
Question 6 of 10
Show answerHide answer
Save this lesson to see this answer.
Question 7 of 10
Show answerHide answer
Save this lesson to see this answer.
Question 8 of 10
Show answerHide answer
Save this lesson to see this answer.
Question 9 of 10
Show answerHide answer
Save this lesson to see this answer.
Question 10 of 10
Show answerHide answer
Save this lesson to see this answer.
Set 4: Diagnose claims and reconstruct missing quantities10 Practice Questions
Save this lesson to see every answer and practice every set.
Question 1 of 10
Show answerHide answer
Save this lesson to see this answer.
Question 2 of 10
mv x9, x10 can assemble as addi x9, x10, 0. What kind of assembly construct is mv here?Show answerHide answer
Save this lesson to see this answer.
Question 3 of 10
Show answerHide answer
Save this lesson to see this answer.
Question 4 of 10
Show answerHide answer
Save this lesson to see this answer.
Question 5 of 10
Show answerHide answer
Save this lesson to see this answer.
Question 6 of 10
Show answerHide answer
Save this lesson to see this answer.
Question 7 of 10
Show answerHide answer
Save this lesson to see this answer.
Question 8 of 10
Show answerHide answer
Save this lesson to see this answer.
Question 9 of 10
Show answerHide answer
Save this lesson to see this answer.
Question 10 of 10
Show answerHide answer
Save this lesson to see this answer.
Set 5: Integrate time, parallelism, and power budgets10 Practice Questions
Save this lesson to see every answer and practice every set.
Question 1 of 10
Show answerHide answer
Save this lesson to see this answer.
Question 2 of 10
Show answerHide answer
Save this lesson to see this answer.
Question 3 of 10
Show answerHide answer
Save this lesson to see this answer.
Question 4 of 10
Show answerHide answer
Save this lesson to see this answer.
Question 5 of 10
Show answerHide answer
Save this lesson to see this answer.
Question 6 of 10
Show answerHide answer
Save this lesson to see this answer.
Question 7 of 10
Show answerHide answer
Save this lesson to see this answer.
Question 8 of 10
Show answerHide answer
Save this lesson to see this answer.
Question 9 of 10
Show answerHide answer
Save this lesson to see this answer.
Question 10 of 10
Show answerHide answer
Save this lesson to see this answer.
Stuck on your own question? Homework Help
Key Terms
A
Abstraction
Accelerator
Activity factor
Affected fraction
Amdahl’s law
Application binary interface
Assembler
add x5, x6, x7 into its binary encoding and expands supported pseudo-instructions.Assembly language
add x5, x6, x7 names a destination and two source registers.B
Backward compatibility
Benchmark
Benchmark suite
Binary prefix
Bytecode
C
Calling convention
Capacitive load
Clock period
Clock rate
CMOS
Compiler
Control
CPU clock cycles
CPU performance equation
CPU time
Critical path
Cycle budget
Cycles per instruction
D
Dark silicon
Datapath
Dennard scaling
DRAM
DVFS
Dynamic energy
Dynamic power
E
Effective average frequency
Elapsed time
Energy
Energy proportionality
Executable
G
Geometric mean
Gustafson’s law
H
Heterogeneous cores
I
Instruction count
Instruction mix
Instruction set architecture
Instruction-level parallelism
Instructions per cycle
Integrated circuit
Interpreter
J
Just-in-time compilation
L
Leakage current
Linker
Load imbalance
Loader
Local speedup
M
Machine language
0x007302B3 represents a machine language encoding for a RISC-V addition.Microarchitecture
MIPS
Moore’s law
Multicore processor
O
Object file
Operating system
P
Parallel efficiency
Parallel fraction
Peak rate
Performance
Performance counter
Performance per watt
Pipelining
Power
Power density
Power gating
Power wall
Profiling
Pseudo-instruction
mv x5, x6 is a pseudo-instruction that can be implemented as addi x5, x6, 0.R
Response time
RISC-V
S
Serial fraction
SPECrate
SPECspeed
Speedup
SRAM
Static power
Strong scaling
System CPU time
Systems software
T
Thermal design power
Thermal throttling
Thread-level parallelism
Throughput
Transistor
U
User CPU time
W
Weak scaling
Weighted mean
About this lesson
Make your own Study Materials
Turn your notes, slides and documents into Study Guides, Practice Questions, Flashcards and 6 more tools.