Instructions per cycle has been getting somewhat better, and it is that number multiplied by the clock speed that is a better indicator of actual performance <a href="https://en.wikipedia.org/wiki/Instructions_per_cycle" rel="nofollow">https://en.wikipedia.org/wiki/Instructions_per_cycle</a><p>Everything else needs to keep up to - it is pointless having a fast processor if it has to keep waiting on memory, storage and the network. Those are very slowly catching up and also lead to overall improved performance.<p>I've been hoping that asynchronous implementations would take over. In theory parts of the chip can run at whatever speeds are best for them at that time, and not have to be synchronised with other parts. And when not in use they easily power down. There were some async ARM chips made, but no progress since 2000 <a href="https://en.wikipedia.org/wiki/AMULET_microprocessor" rel="nofollow">https://en.wikipedia.org/wiki/AMULET_microprocessor</a>