In computer architecture, speedup is a number that measures the relative performance of two systems processing the same problem. More technically, it is the improvement in speed of execution of a task executed on two similar architectures with different resources. The notion of speedup was established by Amdahl's law, which was particularly focused on parallel processing. However, speedup can be used more generally to show the effect on performance after any resource enhancement. Definitions Speedup can be defined for two different types of quantities: latency and throughput. Latency of an architecture is the reciprocal of the execution speed of a task: where v is the execution speed of the task; T is the execution time of the task; W is the execution workload of the task. Throughput of an architecture is the execution rate of a task: where ρ is the execution density (e.g., the number of stages in an instruction pipeline for a pipelined architecture); A is the execution capacity (e.g., the number of processors for a parallel architecture). Latency is often measured in seconds per unit of execution workload. Throughput is often measured in units of execution workload per second. Another unit of throughput is instructions per cycle (IPC) and its reciprocal, cycles per instruction (CPI), is another unit of latency. Speedup is dimensionless and defined differently for each type of quantity so that it is a consistent metric. Speedup in latency Speedup in latency is defined by the following formula: where Slatency is the speedup in latency of the architecture 2 with respect to the architecture 1; L1 is the latency of the architecture 1; L2 is the latency of the architecture 2. Speedup in latency can be predicted from Amdahl's law or Gustafson's law. Speedup in throughput Speedup in throughput is defined by the formula: where Sthroughput is the speedup in throughput of the architecture 2 with respect to the architecture 1; Q1 is the throughput of the architecture 1; Q2 is the throughput of the architecture 2. Examples Using execution times We are testing the effectiveness of a branch predictor on the execution of a program. First, we execute the program with the standard branch predictor on the processor, which yields an execution time of 2.25 seconds. Next, we execute the program with our modified (and hopefully improved) branch predictor on the same processor, which produces an execution time of 1.50 seconds. In both cases