Современные процессоры очень быстро работают. Они умеют:

  • одновременно выполнять несколько операций, это называется конвейерезацией.
  • автоматически распаралеливать выполнение независимых операций, это называется суперскалярностью.
  • переставлять операции местами, чтобы увеличить пропускную способность конвейера
  • делать спекулятивное выполнение и потом отбрасывать результат

Это очень круто и очень мощно. Но есть проблема. Очень часто нужно считать данные из памяти, а потом записать результат в память. Это не распаралеливается. А память медленная отчасти из-за растояния до процессора, от того что конденсаторы не могут мгновенно разрядиться и т.д. В зависимости от устройства доступ к памяти занимает от 20 до 100 тактов процессора. Очень долго!

Стандартное решение такой задачи это кэширование. И мы кэшируем, где можем, сколько можем и когда можем. Со следующими ограничениями на всех уровнях. Чем больше кэш, тем дольше к нему доступ. Это следствие физических ограничений, все быстрое потребляет много энергии, и плотность размещения элементов ограничена.