thumb|400px|Computer processing efficiency, measured as the power needed per million instructions per second (watts per MIPS)

Instructions per second (IPS) is a measure of a computer's processor speed. For complex instruction set computers (CISCs), different instructions take different amounts of time, so the value measured depends on the instruction mix; even for comparing processors in the same family the IPS measurement can be problematic. Many reported IPS values have represented "peak" execution rates on artificial instruction sequences with few branches and no cache contention, whereas realistic workloads typically lead to significantly lower IPS values. Memory hierarchy also greatly affects processor performance, an issue barely considered in IPS calculations. Because of these problems, synthetic benchmarks such as Dhrystone are now generally used to estimate computer performance in commonly used applications, and raw IPS has fallen into disuse.

The term is commonly used in association with a metric prefix (k<!-- k (kilo) in lower case -->, M, G, T, P, or E) to form kilo instructions per second (kIPS), mega instructions per second (MIPS), giga instructions per second (GIPS) and so on. Formerly TIPS was used occasionally for "thousand IPS".

Computing

IPS can be calculated using this equation:

:<math>\text{IPS} = \text{sockets} \times \frac{\text{cores{\text{chip \times \text{clock} \times \frac{\text{Is{\text{cycle</math>

However, the instructions/cycle measurement depends on the instruction sequence, the data and external factors.

Scaling units

For the most early 8-bit and 16-bit microprocessors, performance was measured in thousand instructions per second, or kilo instructions per second (kIPS).

The term "mega instructions per second" became useful in the late 1970s. The IBM System/370 model 158–3 and the VAX-11/780 were considered roughly equivalent at 1&nbsp;MIPS.

Types of instruction

The speed of a given CPU depends on many factors, such as the type of instructions being executed, the execution order and the presence of branch instructions (problematic in CPU pipelines). CPU instruction rates are different from clock frequencies, usually reported in Hz, as each instruction may require several clock cycles to complete or the processor may be capable of executing multiple independent instructions simultaneously. MIPS can be useful when comparing performance between processors made with similar architecture (e.g. PIC microcontrollers), but they are difficult to compare between differing CPU architectures, especially between RISC and CISC architectures. This led to the term "Meaningless Indicator of Processor Speed," or less commonly, "Meaningless Indices of Performance," being popular amongst technical people by the mid-1980s.

The Gibson Mix (1959)

Before standard benchmarks were available, average speed rating of computers was based on calculations for a mix of instructions with the results given in kilo instructions per second (kIPS). Among the first attempts at defining a specific collections of instructions to time was the Gibson Mix, produced by Jack Clark Gibson of IBM for scientific applications in 1959.

Gibson divided computer instructions into 12 classes, based on the IBM 704 architecture, adding a 13th class to account for indexing time. Weights were primarily based on analysis of seven scientific programs run on the 704, with a small contribution from some IBM 650 programs. The overall score was then the weighted sum of the average execution speed for instructions in each class.

{| class="wikitable collapsible collapsed sortable"

! The Gibson Mix !! %

|-

| 1. Loads and Store || 31.2

|-

| 2. Fixed Point Add and Subtract || 6.1

|-

| 3. Compares || 3.8

|-

| 4. Branches || 16.6

|-

| 5. Floating Add and Subtract || 6.9

|-

| 6. Floating Multiply || 3.8

|-

| 7. Floating Divide || 1.5

|-

| 8. Fixed Point Multiply || 0.6

|-

| 9. Fixed Point Divide || 0.2

|-

| 10. Shifting || 4.4

|-

| 11. Logical, And, Or, etc. || 1.6

|-

| 12. Instructions Not Using Registers || 5.3

|-

| 13. Indexing || 18

|-

| ||

|-

| Total || 100

|}

The Gibson Mix is a product of its era, when computer speeds were still measured in kIPS.

Other ratings, such as the ADP mix which does not include floating point operations, were produced for commercial applications.

These early ratings were nowhere as systemic as the later approaches, although the idea of creating a benchmark to resemble real-world applications (later called a "synthetic benchmark") would persist.

Two flavors of VAX MIPS

The VAX-11/780 was released in 1977. It was marketed as being able to execute the equivalent of 1 million System/370 instructions per second, the first minicomputer to achieve such a speed. VAX-11/780 would quickly become a unit of reference for MIPS measurements, in two separate benchmarks:

  • The Whetstone benchmark of 1972 was modified in 1980 to combine three of its integer-operation speed measures into a "VAX MIPS". It originally included a mix of 42 statements written in ALGOL 60 (124 instructions on the KDF9 compiler), though by 1980 it had been rewritten in Fortran.
  • The integer-and-string-heavy Dhrystone benchmark of 1984 inherited the idea of using VAX as a MIPS reference. Its results were reported in "DMIPS", for Dhrystone MIPS. Each Dhrystone MIPS was defined as the ability to run the Dhrystone main loop 1757 times per second, the score VAX-11/780 received on this benchmark.

Other instruction mixes

zMIPS refers to the MIPS measure used internally by IBM to rate its mainframe servers (zSeries, IBM System z9, and IBM System z10).

Weighted million operations per second (WMOPS) is a similar measurement, used for audio codecs.

Other factors that affect instructions per second

Effective MIPS speeds are highly dependent on the programming language used: some compilers generate highly-efficient code, others do not. The Whetstone Report has a table showing MWIPS speeds of PCs via early interpreters and compilers up to modern languages. The first PC compiler was for BASIC (1982) when a 4.8&nbsp;MHz 8088/87 CPU obtained 0.01&nbsp;MWIPS. Results on a 2.4&nbsp;GHz Intel Core 2 Duo (1 CPU 2007) vary from 9.7&nbsp;MWIPS using BASIC Interpreter, 59&nbsp;MWIPS via BASIC Compiler, 347&nbsp;MWIPS using 1987 Fortran, 1,534&nbsp;MWIPS through HTML/Java to 2,403&nbsp;MWIPS using a modern C/C++ compiler.

Timeline of instructions per second

CPU results

<!-- uses sort template padded to 7 digits scaling speed in tenths of MIPs -->

{| class="wikitable sortable"

!Processor / System

! data-sort-type="number" | Dhrystone MIPS or MIPS, and frequency

! data-sort-type="number" | D instructions per clock cycle

! data-sort-type="number" | D instructions per clock cycle per core

! data-sort-type="number" | Year

!

|-

|UNIVAC I||0.002&nbsp;MIPS at 2.25&nbsp;MHz||0.0008||0.0008||1951||

|-

|IBM 7030 ("Stretch")

|1.200 MIPS at 3.30&nbsp;MHz

|0.364

|0.364

|1961

|

|-

|CDC 6600

|10.00 MIPS at 10.00&nbsp;MHz

|1

|1

|1965

|

|-

|Intel 4004||0.092&nbsp;MIPS at 0.740&nbsp;MHz<br />(Not Dhrystone)||0.124||0.124||1971||

|-

|IBM System/370 Model 158||0.640&nbsp;MIPS at 8.696&nbsp;MHz||0.0736||0.0736||1972||

|-

|Intel 8080||0.290&nbsp;MIPS at 2.000&nbsp;MHz<br />(Not Dhrystone)

|0.145||0.145||1974||

|-

|Cray 1

|160.0 MIPS at 80.00&nbsp;MHz

|2

|2

|1975

|

|-

|MOS Technology 6502||0.430&nbsp;MIPS at 1.000&nbsp;MHz||0.43||0.43||1975||

|-

|MCP-1600||2.25&nbsp;MIPS at 3.3&nbsp;MHz, 4 ϕ||0.75||0.75||1975||

|-

|Intel 8085||0.435&nbsp;MIPS at 3.000&nbsp;MHz<br />(Not Dhrystone)

|0.145||0.145||1976||

|-

|Motorola 6802||0.500&nbsp;MIPS at 1.000&nbsp;MHz||0.5||0.5||1977||

|-

|IBM System/370 Model 158-3||0.730&nbsp;MIPS at 8.696&nbsp;MHz||0.0839||0.0839||1977||

|-

|Intel 8088||0.750&nbsp;MIPS at 10.00&nbsp;MHz||0.075||0.075||1979||

|-

|Intel 8035/8039/8048||0.400&nbsp;MIPS at 6&nbsp;MHz<br />(Not Dhrystone)||.066||.066||1980||

|-

|Fujitsu MB8843/MB8844||6&nbsp;MIPS at 6&nbsp;MHz<br />(Not Dhrystone)||1||1||1980||

|-

|Motorola 6802||1.79&nbsp;MIPS at 3.58&nbsp;MHz||0.5||0.5||1981||

|-

|Zilog Z8001/Z8002B||2.5&nbsp;MIPS at 10&nbsp;MHz||0.25||0.25||1981||

|-

|NEC V20||4&nbsp;MIPS at 8&nbsp;MHz<br />(Not Dhrystone)||0.5||0.5||1982||

|-

|Texas Instruments TMS32010||5&nbsp;MIPS at 20&nbsp;MHz||0.25||0.25||1983||

|-

|NEC V30||5&nbsp;MIPS at 10&nbsp;MHz<br />(Not Dhrystone)||0.5||0.5||1983||

|-

|Hitachi HD63705||2&nbsp;MIPS at 2&nbsp;MHz||1||1||1985||

|-

|Intel i386DX||2.15&nbsp;MIPS at 16&nbsp;MHz||0.134||0.134||1985||

|-

|WDC 65C816 / Ricoh 5A22||0.22&nbsp;MIPS at 2.8&nbsp;MHz||0.08||0.08||1985||

|-

|ARM2||4&nbsp;MIPS at 8&nbsp;MHz||0.5||0.5||1986||

|-

|Stanford MIPS R2000 / R2000A||8 / 9.8&nbsp;MIPS at 12.5&nbsp;MHz||0.64 - 0.78||0.64 - 0.78||1986 / 1988||

|-

|Sun SPARC / Fujitsu MB86900||10&nbsp;MIPS at 16.6&nbsp;MHz||0.6||0.6||1986||

|-

|Texas Instruments TMS34010||6&nbsp;MIPS at 50&nbsp;MHz||0.12||0.12||1986||

|-

|NEC V70||6.6&nbsp;MIPS at 20&nbsp;MHz||0.33||0.33||1987||

|-

|Motorola 68030||18&nbsp;MIPS at 50&nbsp;MHz||0.36||0.36||1987||

|-

|Gmicro/200||10&nbsp;MIPS at 20&nbsp;MHz||0.5||0.5||1987||

|-

|Texas Instruments TMS320C20||12.5&nbsp;MIPS at 25&nbsp;MHz||0.5||0.5||1987||

|-

|Analog Devices ADSP-2100||12.5&nbsp;MIPS at 12.5&nbsp;MHz||1||1||1987||

|-

|Texas Instruments TMS320C25||25&nbsp;MIPS at 50&nbsp;MHz||0.5||0.5||1987||

|-

|ARM3||12&nbsp;MIPS at 25&nbsp;MHz||0.5||0.5||1989||

|-

|Motorola 68040||44&nbsp;MIPS at 40&nbsp;MHz||1.1||1.1||1990||

|-

|AMD Am386||9&nbsp;MIPS at 40&nbsp;MHz||0.225||0.225||1991||

|-

|Intel i486DX||11.1&nbsp;MIPS at 33&nbsp;MHz||0.336||0.336||1991||

|-

|MIPS R4400||85&nbsp;MIPS at 150&nbsp;MHz||0.567||0.567||1993||

|-

|IBM-Motorola PowerPC 601||157.7&nbsp;MIPS at 80&nbsp;MHz||1.971||1.971||1993||

|-

|ARM7||40&nbsp;MIPS at 45&nbsp;MHz||0.889||0.889||1994||

|-

|Intel DX4||70&nbsp;MIPS at 100&nbsp;MHz||0.7||0.7||1994||

|-

|Microchip PIC16F||5&nbsp;MIPS at 20&nbsp;MHz||0.25||0.25||1995||

|-

|IBM-Motorola PowerPC 603e||188&nbsp;MIPS at 133&nbsp;MHz||1.414||1.414||1995||

|-

|ARM 7500FE||35.9&nbsp;MIPS at 40&nbsp;MHz||0.9||0.9||1996||

|-

|IBM-Motorola PowerPC 603ev||423&nbsp;MIPS at 300&nbsp;MHz||1.41||1.41||1996||

|-

|Intel Pentium Pro||541&nbsp;MIPS at 200&nbsp;MHz||2.7||2.7||1996||

|-

|Hitachi SH-4||360&nbsp;MIPS at 200&nbsp;MHz||1.8||1.8||1997||

|-

|IBM-Motorola PowerPC 750||525&nbsp;MIPS at 233&nbsp;MHz||2.3||2.3||1997||

|-

|Zilog eZ80||6.6&nbsp;MIPS at 20&nbsp;MHz||0.33||0.33||1999||

|-

|Intel Pentium III||2,054&nbsp;MIPS at 600&nbsp;MHz||3.4||3.4||1999||

|-

|AMD Athlon||3,561&nbsp;MIPS at 1.2&nbsp;GHz||3.0||3.0||2000||

|-

|Silicon Recognition ZISC 78||8,600&nbsp;MIPS at 33&nbsp;MHz||260.6||260.6||2000||

|-

|ARM11||515&nbsp;MIPS at 412&nbsp;MHz||1.25||1.25||2002||

|-

|AMD Athlon XP 2500+||7,527&nbsp;MIPS at 1.83&nbsp;GHz||4.1||4.1||2003||

|-

|ARM Cortex-M3||125&nbsp;MIPS at 100&nbsp;MHz||1.25||1.25||2004||

|-

|Nios II||190&nbsp;MIPS at 165&nbsp;MHz||1.13||1.13||2004||

|-

|MIPS32 4KEc||356&nbsp;MIPS at 233&nbsp;MHz||1.5||1.5||2004||

|-

|VIA C7||1,799&nbsp;MIPS at 1.3&nbsp;GHz||1.4||1.4||2005||

|-

|ARM Cortex-A8||2,000&nbsp;MIPS at 1.0&nbsp;GHz||2.0||2.0||2005||

|-

|AMD Athlon FX-57||12,000&nbsp;MIPS at 2.8&nbsp;GHz||4.3||4.3||2005||

|-

|AMD Athlon 64 3800+ X2 (2-core)||14,564&nbsp;MIPS at 2.0&nbsp;GHz||7.3||3.6||2005||

|-

|PowerPC G4 MPC7448||3,910&nbsp;MIPS at 1.7&nbsp;GHz||2.3||2.3||2005||

|-

|ARM Cortex-R4||450&nbsp;MIPS at 270&nbsp;MHz||1.66||1.66||2006||

|-

|MIPS32 24K||604&nbsp;MIPS at 400&nbsp;MHz||1.51||1.51||2006||

|-

|PS3 Cell BE (PPE only)||10,240&nbsp;MIPS at 3.2&nbsp;GHz||3.2||3.2||2006||

|-

|IBM Xenon CPU (3-core)||19,200&nbsp;MIPS at 3.2&nbsp;GHz||6.0||2.0||2005||

|-

|AMD Athlon FX-60 (2-core)||18,938&nbsp;MIPS at 2.6&nbsp;GHz||7.3||3.6||2006||

|-

|MIPS64 20Kc||1,370&nbsp;MIPS at 600&nbsp;MHz||2.3||2.3||2007||

|-

|P.A. Semi PA6T-1682M||8,800&nbsp;MIPS at 1.8&nbsp;GHz||4.4||4.4||2007||

|-

|Qualcomm Scorpion (Cortex-A8-like)||2,100&nbsp;MIPS at 1&nbsp;GHz||2.1||2.1||2008||

|-

|Intel Core 2 Extreme QX9770 (4-core)||59,455&nbsp;MIPS at 3.2&nbsp;GHz||18.6||4.6||2008||

|-

|ARM Cortex-M0||45&nbsp;MIPS at 50&nbsp;MHz||0.9||0.9||2009||

|-

|ARM Cortex-A9 (2-core)||7,500&nbsp;MIPS at 1.5&nbsp;GHz||5.0||2.5||2009||

|-

|AMD Phenom II X4 940 Black Edition||42,820&nbsp;MIPS at 3.0&nbsp;GHz||14.3||3.5||2009||

|-

<!-- commented-out, as reference doesn't state any MIPS or performance figures.

|ARM Cortex-A15 (Quad core)||35,000 MIPS at 2.5 GHz||14.0||3.5||2010||

|-

-->

|AMD Phenom II X6 1100T||78,440&nbsp;MIPS at 3.3&nbsp;GHz||23.7||3.9||2010||

|-

|ARM Cortex-A5||1,256&nbsp;MIPS at 800&nbsp;MHz||1.57||1.57||2011||

|-

|Nvidia Tegra 3 (Quad core Cortex-A9)||13,800&nbsp;MIPS at 1.5&nbsp;GHz||9.2||2.5||2011||

|-

|Samsung Exynos 5250 (Cortex-A15-like 2-core)||14,000&nbsp;MIPS at 2.0&nbsp;GHz||7.0||3.5||2011||

|-

|Intel Core i5-2500K (4-core)||83,000&nbsp;MIPS at 3.3&nbsp;GHz||25.152||6.288||2011||

|-

|Intel Core i7 875K||92,100&nbsp;MIPS at 2.93&nbsp;GHz||31.4||7.85||2011||

|-

|Intel Core i7 2600K (4-core)||117,160&nbsp;MIPS at 3.4&nbsp;GHz||34.45||8.61||2011||

|-

|Intel Core i7-3960X (6-core)||176,170&nbsp;MIPS at 3.3&nbsp;GHz||53.38||8.89||2011||

|-

||AMD FX-8350 (8-core)||97,125&nbsp;MIPS at 4.2&nbsp;GHz||23.1||2.9||2012||

|-

||AMD FX-9590 (8-core)||115,625&nbsp;MIPS at 5.0&nbsp;GHz||23.1||2.9||2012||

|-

|Intel Core i7 5960X (8-core)||298,190&nbsp;MIPS at 3.5&nbsp;GHz||85.2||10.65||2014||

|-

|Intel Core i7 6950X (10-core)||320,440&nbsp;MIPS at 3.5&nbsp;GHz||91.55||9.16||2016||

|-

|ARM Cortex-A73 (4-core)

|71,120 MIPS at 2.8&nbsp;GHz

|25.4

|6.35

|2016

|

|-

|ARM Cortex-A75

|

|

|8.2-9.5

|2017

|

|-

|ARM Cortex-A76

|

|

|10.7-12.4

|2018

|

|-

|ARM Cortex-A35

|2,100 MIPS at 1&nbsp;GHz

|2.1

|2.1

|2015

|

|-

|AMD Ryzen 7 1800X (8-core)||304,510&nbsp;MIPS at 3.7&nbsp;GHz|| 82.3 || 10.29 ||2017||

|-

|Intel Core i7-8086K (6-core)||221,720&nbsp;MIPS at 5.0&nbsp;GHz|| 44.34 || 7.39 ||2018||

|-

|Intel Core i9-9900K (8-core) ||412,090&nbsp;MIPS at 4.7&nbsp;GHz|| 87.68 || 10.96 ||2018||

|-

|AMD Ryzen Threadripper 3990X (64 core)||2,356,230&nbsp;MIPS at 4.35&nbsp;GHz|| 541.66 || 8.46 ||2020||

|-

|Intel Core i5-11600K (6-core) ||346,350&nbsp;MIPS at 4.92&nbsp;GHz|| 57.72 || 11.73||2021||

|-

!Processor / System

! data-sort-type="number" | Dhrystone MIPS / MIPS

! data-sort-type="number" | D instructions per clock cycle

! data-sort-type="number" | D instructions per clock cycle per core

! data-sort-type="number" | Year

!Source

|}

Multi-CPU cluster results

<!-- uses sort template padded to 7 digits scaling speed in tenths of MIPs -->

{| class="wikitable sortable"

!Processor / System

! data-sort-type="number" | Dhrystone MIPS or MIPS, and frequency

! data-sort-type="number" | D instructions per clock cycle

! data-sort-type="number" | D instructions per clock cycle per core

! data-sort-type="number" | Year

!

|-

|LINKS-1 Computer Graphics System (257-processor)||642.5&nbsp;MIPS at 10&nbsp;MHz||2.5||0.25||1982||

|-

|Sega System 16 (4-processor)||16.33&nbsp;MIPS at 10&nbsp;MHz||4.083||1.020||1985||

|-

|Namco System 21 (10-processor)||73.927&nbsp;MIPS at 25&nbsp;MHz||2.957||0.296||1988||

|-

|Atari Hard Drivin' (7-processor)||33.573&nbsp;MIPS at 50&nbsp;MHz||0.671||0.0959||1989||

|-

|NEC SX-3 (4-processor)||680&nbsp;MIPS at 400&nbsp;MHz||1.7||0.425||1989||

|-

|Namco System 21 (Galaxian³) (96-processor)||1,660.386&nbsp;MIPS at 40&nbsp;MHz||41.51||0.432||1990||

|-

|SGI Onyx RealityEngine<sup>2</sup> (36-processor)||2,640&nbsp;MIPS at 150&nbsp;MHz||17.6||0.489||1993||

|-

|Namco Magic Edge Hornet Simulator (36-processor)||2,880&nbsp;MIPS at 150&nbsp;MHz||19.2||0.533||1993||

|-

|Sega Naomi Multiboard (32-processor)||6,400&nbsp;MIPS at 200&nbsp;MHz||32||1||1999||

|-

|Raspberry Pi 2 (quad-core ARM Cortex-A7)||4,744 MIPS at 1.0&nbsp;GHz|| 4.744 || 1.186 ||2014||

|-

!Processor / System

! data-sort-type="number" | Dhrystone MIPS / MIPS

! data-sort-type="number" | D instructions per clock cycle

! data-sort-type="number" | D instructions per clock cycle per core

! data-sort-type="number" | Year

!Source

|}

See also

  • TOP500
  • Floating point operations per second (FLOPS) <!-- this should go first-ish -->
  • SUPS
  • Benchmark (computing)
  • BogoMips (measurement of CPU speed made by the Linux kernel)
  • Instructions per cycle
  • Cycles per instruction
  • Dhrystone (benchmark) - DMIPS integer benchmark
  • Whetstone (benchmark) - floating-point benchmark
  • Million service units (MSU)
  • Computer performance by orders of magnitude
  • Performance per watt
  • Data-rate units

References