Современные процессоры работают невероятно быстро; они могут значительно превосходить системную оперативную память. Этот дисбаланс скорости между процессором и памятью может привести к тому, что ваш процессор часто будет бездействовать, ожидая отправки данных на него, чтобы он мог продолжить выполнение процесса. Чтобы этого не происходило, позволяя процессорам продолжать работать все быстрее и быстрее, используется кэш процессора.
Как кэш ЦП ускоряет работу ЦП?
Кэш ЦП спроектирован так, чтобы быть максимально быстрым и затем кэшировать данные, которые запрашивает ЦП. Скорость кеш-памяти ЦП оптимизирована по трем параметрам: задержка, пропускная способность и близость. Кэш ЦП работает с очень малыми задержками, сводя к минимуму время, необходимое для возврата результата. Например, Intel i9-9900k имеет задержку кэша 0,8, 2,4 и 11,1 наносекунды для кешей L1, L2 и L3 соответственно. Для сравнения, время ожидания современной высокоскоростной оперативной памяти составляет порядка 14 наносекунд.
Совет: Уровни кеша будут объяснены более подробно позже, но, проще говоря, нижние уровни кеша быстрее, но дороже, поэтому имеют меньшую емкость. Наносекунда составляет миллиардную долю секунды, поэтому задержка 0,8 секунды означает, что для возврата результата требуется менее одной миллиардной секунды.
Что касается пропускной способности, кэш ЦП предлагает значительные улучшения производительности по сравнению с традиционным хранилищем и оперативной памятью. Скорость чтения кеш-памяти L1 и L3 может достигать 2,3 ТБ / с и 370 ГБ / с соответственно, тогда как пропускная способность ОЗУ обычно составляет около 40 ГБ / с. Эта увеличенная полоса пропускания означает, что кэш ЦП может передавать данные в ЦП намного быстрее, чем ОЗУ.
Для достижения максимально возможных скоростей кэш ЦП фактически встроен в кремний самого кристалла ЦП. Это сводит к минимуму расстояние, которое должны пройти любые электрические сигналы, тем самым сохраняя задержку на минимальном уровне. Например, когда кэш L3 был впервые перемещен с материнской платы на кристалл ЦП, процессор того времени (Pentium 4 EE) смог улучшить производительность на 10-20%.
Архитектура кеш-памяти ЦП
Современные процессоры обычно используют три уровня кеш-памяти ЦП с меткой L1-3, при этом кеши с меньшими номерами ближе к ядрам ЦП, быстрее и дороже. Каждое отдельное ядро ЦП в многоядерном ЦП имеет свой собственный кэш L1. Обычно он делится на две части: L1I и L1D. L1I используется для кэширования инструкций для ЦП, в то время как L1D используется для кэширования данных, над которыми эти инструкции должны выполняться.
Каждое ядро ЦП обычно также имеет свой собственный кэш L2 на современном ЦП. Кэш L2 больше и медленнее, чем кеш L1, и используется в основном для хранения данных, которые иначе не поместились бы в кэш L2. Наличие выделенного кэша L2 на каждое ядро позволяет избежать конкуренции за кэш. Конкуренция за кеш - это когда разные ядра борются за место в кэше для своих рабочих нагрузок, что может привести к удалению важных данных из кеша.
Кэш L3 обычно используется всеми ядрами ЦП процессора. Опять же, кэш L3 медленнее, чем кеш L2, но дешевле и больше. Предоставляя общий кеш, можно уменьшить объем данных, которые будут дублироваться на более низких уровнях кеш-памяти для каждого ядра.
Совет: Например, в размерах кэша Intel i9-9900K имеет кэш L1 64 КБ и кэш L2 256 КБ на ядро (всего 512 КБ L1 и 2 МБ L2), а также общий кэш L3 объемом 16 МБ.
Как используется кэш ЦП?
Все уровни кеш-памяти ЦП используются для увеличения производительности процессора за счет кэширования данных из ОЗУ. Когда ЦП запрашивает данные, он обычно сначала просматривает уровни кэша, пытаясь получить данные как можно быстрее. Если данные обнаружены при попадании в кэш, ЦП может продолжить свою обработку. Если данных нет в кеше, что называется промахом в кеше, то ЦП должен проверить оперативную память, а затем жесткий диск, если данных тоже нет. Более быстрые слои всегда проверяются первыми на максимальную производительность.
Чтобы помочь процессору иметь данные, которые ему нужны, в кеше, когда это необходимо, кеш пытается упредить, какие данные могут понадобиться процессору в следующий раз. Например, если ЦП запросил некоторые данные для изображения, который обрабатывает, кеш может попытаться предварительно кэшировать больше данных изображения, чтобы их можно было передать в ЦП как можно быстрее.