Measuring CPU Superscalar factor with noploop.c

While reading The noploop CPU Benchmark I decided to do a small experiment to calculate the CPU Superscalar factor, this consists in measuring the number of instructions that the CPU completes by cycle. That can be accomplished measuring the number of CPU cycles it takes to perform a fixed amount of NOPs (NO Operation) instructions, as shown below:

```start = cpucycles()
perform 4096 * 100000000 NOPs
end   = cpucycles()

Superscalar CPU factor = (4096 * 10000000) / (end - start)
```

To measure the superscalar factor, we can write a small self-contained program (sources here: noploop.c) based on the above pseudo-code, that calculates the CPU frequency and the CPU superscalar factor:

```box \$ ./noploop
noploop: freq 14321678 KHz (time 2860 ms) 3325978 KHz (9512297394 cycles)
noploop: CPU Superscalar factor: 4 instr/cycle

box \$ grep name /proc/cpuinfo
model name : Intel(R) Core(TM) i5-2500K CPU @ 3.30GHz
```

The above results shows that the CPU took `2860` milliseconds and `9512297394` CPU cycles to perform the `4096 10^7` NOP instructions. This gives the following figures:

• a rate of `14321678` KHz instructions completed per second, obtained with `rate = NOPs / time`
• a frequency of `3325978` KHz CPU cycles per second, obtained with `freq = cycles / time`

The difference between the rate of `14.32` GHz instructions completed per second and the `3.30` GHz CPU cycles/second means that the CPU is completing `4` NOP instructions/cycle, that is the CPU Superscalar factor.