Какая кэш память считается самой быстрой. Новый подход к кэшированию процессора

Приветствуем вас на сайте GECID.com! Хорошо известно, что тактовая частота и количество ядер процессора напрямую влияют на уровень производительности, особенно в оптимизированных под многопоточность проектах. Мы же решили проверить, какую роль в этом играет кэш-память уровня L3?

Для исследования этого вопроса нам был любезно предоставлен интернет-магазином pcshop.ua 2-ядерный процессор с номинальной рабочей частотой 3,7 ГГц и 3 МБ кэш-памяти L3 с 12-ю каналами ассоциативности. В роли оппонента выступил 4-ядерный , у которого были отключены два ядра и снижена тактовая частота до 3,7 ГГц. Объем же кэша L3 у него составляет 8 МБ, и он имеет 16 каналов ассоциативности. То есть ключевая разница между ними заключается именно в кэш-памяти последнего уровня: у Core i7 ее на 5 МБ больше.

Код ядра - другая история; он иногда требует кеш-флешей. Это означает, что если строка кэша была изменена, результат для системы после этого момента времени будет таким же, как если бы не было кеша вообще, а сама основная ячейка памяти была изменена. Реализация кэша для записи, реализация кэша обратной записи. . Кэш записи - это самый простой способ реализации когерентности кэширования. Если кэш-строка записывается, процессор немедленно также записывает строку кэша в основную память. Это гарантирует, что во все времена основная память и кеш синхронизируются.



Если это ощутимо повлияет на производительность, тогда можно будет провести еще один тест с представителем серии Core i5, у которых на борту 6 МБ кэша L3.


Содержимое кеша можно было бы просто отбросить всякий раз, когда будет заменена строка кэша. Здесь процессор не сразу записывает измененную строку кэша обратно в основную память. Вместо этого строка кэша отмечена только как грязная. Когда в какой-то момент в будущем кеш-строка будет удалена из кэша, грязный бит даст указание процессору записать данные в это время, а не просто отбрасывать содержимое. У кэшей обратной записи есть возможность значительно улучшить производительность, поэтому большая часть памяти в системе с приличным процессором кэшируется таким образом.

Но пока вернемся к текущему тесту. Помогать участникам будет видеокарта и 16 ГБ оперативной памяти DDR4-2400 МГц. Сравнивать эти системы будем в разрешении Full HD.


Для начала начнем с рассинхронизированных живых геймплев, в которых невозможно однозначно определить победителя. В Dying Light на максимальных настройках качества обе системы показывают комфортный уровень FPS, хотя загрузка процессора и видеокарты в среднем была выше именно в случае Intel Core i7.

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

Вместо этого необходимо содержимое строки кэша первого процессора. В следующем разделе мы увидим, как это выполняется в настоящее время. Перенос всей строки кэша только потому, что слово в строке написано, является расточительным, если следующая операция изменяет следующее слово. Легко представить, что это обычное явление, память для горизонтальных соседних пикселей на экране в большинстве случаев также является соседями. В идеальных случаях вся строка кэша изменяется слово за словом, и только после того, как записано последнее слово, строка кэша записывается на устройство.


Arma 3 имеет хорошо выраженную процессорозависимость, а значит больший объем кэш-памяти должен сыграть свою позитивную роль даже при ультравысоких настройках графики. Тем более что нагрузка на видеокарту в обоих случаях достигала максимум 60%.


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

В предыдущем разделе мы уже указывали на проблему, возникающую при запуске нескольких процессоров. Даже для многоядерных процессоров существует проблема для тех уровней кэша, которые не используются совместно. Нецелесообразно обеспечить прямой доступ от одного процессора к кешу другого процессора. Соединение просто не достаточно быстро, для начала. Практической альтернативой является передача содержимого кеша на другой процессор в случае необходимости. Обратите внимание, что это также относится к кэшам, которые не используются на одном процессоре.

Игра DOOM на ультравысоких настройках графики позволила синхронизировать лишь первые несколько кадров, где перевес Core i7 составляет около 10 FPS. Рассинхронизация дельнейшего геймплея не позволяет определить степень влияния кэша на скорость видеоряда. В любом случае частота держалась выше 120 кадров/с, поэтому особого влияния даже 10 FPS на комфортность прохождения не оказывают.

Вопрос теперь в том, когда должна произойти передача этого кэша? На этот вопрос довольно легко ответить: когда одному процессору нужна строка кэша, которая загрязнена в кэше другого процессора для чтения или записи. Но как процессор может определить, загрязнена ли линия кэша в кеше другого процессора? Предполагая, что это просто потому, что строка кэша загружена другим процессором, будет субоптимальной. Обычно большинство обращений к памяти обращаются к чтению, а результирующие строки кэша не являются грязными.

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

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


Завершает мини-серию живых геймплеев Evolve Stage 2 . Здесь мы наверняка увидели бы разницу между системами, поскольку в обоих случаях видеокарта загружена ориентировочно на половину. Поэтому субъективно кажется, что уровень FPS в случае Core i7 выше, но однозначно сказать нельзя, поскольку сцены не идентичные.

Благодаря этим четырем состояниям можно эффективно реализовать кэширование с обратной записью, одновременно поддерживая одновременное использование данных только для чтения на разных процессорах.

Изменения состояния выполняются без особых усилий со стороны процессоров, которые прослушивают или отслеживают работу других процессоров. Некоторые операции, которые выполняет процессор, объявляются на внешних выводах и, таким образом, делают обработку кэша процессора видимой наружу. Адрес рассматриваемой строки кэша отображается на адресной шине.


Более информативную картину дают бенчмарки. Например, в GTA V можно увидеть, что за городом преимущество 8 МБ кэша достигает 5-6 кадров/с, а в городе - до 10 FPS благодаря более высокой загрузке видеокарты. При этом сам видеоускоритель в обоих случаях загружен далеко не на максимум, и все зависит именно от CPU.

В следующем описании состояний и их переходов укажем, когда задействована шина. Первоначально все строки кэша пусты и, следовательно, также являются недопустимыми. Если данные загружаются для чтения, новое состояние зависит от того, загружен ли другой процессор в линию кэша. Если строка модифицированного кэша считывается или записывается на локальный процессор, инструкция может использовать текущий кеш-контент, и состояние не изменяется. Если второй процессор хочет читать из строки кэша, первый процессор должен отправить содержимое своего кеша второму процессору, а затем он может изменить состояние на общий.


Третий ведьмак мы запустили с запредельными настройками графики и высоким профилем постобработки. В одной из заскриптованных сцен преимущество Core i7 местами достигает 6-8 FPS при резкой смене ракурса и необходимости подгрузки новых данных. Когда же нагрузка на процессор и видеокарту опять достигают 100%, то разница уменьшается до 2-3 кадров.

Данные, отправленные на второй процессор, также принимаются и обрабатываются контроллером памяти, который хранит содержимое в памяти. Это пресловутый «запрос на владение»? операция. Для кэшей сквозной записи мы также должны добавить время, необходимое для записи нового содержимого строки кэша в следующий кеш верхнего уровня или в основную память, что еще больше увеличивает стоимость. Если кэш-строка также локально записывается в строку кэша, можно использовать также, но состояние изменяется на Модифицировано.

Если строка кэша запрашивается для чтения вторым процессором, ничего не должно произойти. Основная память содержит текущие данные, а локальное состояние уже разделено. В случае, если второй процессор хочет записать в строку кэша, строка кэша просто помечена как «Неверная». Известно, что локальная кеш-копия является единственной. Последнее является резервным в случае, если в этот момент информация недоступна. Исключительное состояние также можно полностью исключить, не вызывая функциональных проблем.


Максимальный пресет графических настроек в XCOM 2 не стал серьезным испытанием для обеих систем, и частота кадров находилась в районе 100 FPS. Но и здесь больший объем кэш-памяти трансформировался в прибавку к скорости от 2 до 12 кадров/с. И хотя обоим процессорам не удалось по максимум загрузить видеокарту, вариант на 8 МБ и в этом вопросе местами преуспевал лучше.

Из этого описания переходов состояния должно быть ясно, где затраты, характерные для многопроцессорных операций. Всякий раз, когда такое сообщение должно быть отправлено, все будет медленным. Поток переносится из одного процессора в другой, и все строки кэша должны быть перенесены на новый процессор один раз. Расходы немного меньше. . В многопоточных или многопроцессорных программах всегда требуется синхронизация; эта синхронизация выполняется с использованием памяти. Их все равно нужно держать как можно реже.

В разделе 6 мы объясним эти сценарии. Сообщения протокола когерентности кэша должны быть распределены между процессорами системы. Все веские причины сосредоточиться на том, чтобы избежать ненужного трафика. Есть еще одна проблема, связанная с наличием более одного процессора в игре. В большинстве машин все процессоры подключаются через одну шину к контроллеру памяти. Если один процессор может насытить шину, то два или четыре процессора, использующих одну и ту же шину, еще больше ограничивают пропускную способность, доступную каждому процессору.



Больше всего удивила игра Dirt Rally , которую мы запустили с пресетом очень высоко. В определенные моменты разница доходила до 25 кадров/с исключительно из-за большего объема кэш-памяти L3. Это позволяло на 10-15% лучше загружать видеокарту. Однако средние показатели бенчмарка показали более скромную победу Core i7 - всего 11 FPS.

Даже если каждый процессор имеет свою собственную шину для контроллера памяти, как на рисунке 2, все еще есть шина для модулей памяти. Обычно это одна шина, но даже в расширенной модели на рисунке 2 одновременный доступ к одному и тому же модулю памяти ограничит пропускную способность.

Да, все процессоры могут одновременно быстро обращаться к своей локальной памяти. Но многопоточные и многопроцессорные программы - по крайней мере время от времени - должны обращаться к тем же самым областям памяти, чтобы синхронизировать их. Конкуренция сильно ограничена конечной пропускной способностью, доступной для реализации необходимой синхронизации. Программы должны быть тщательно разработаны для минимизации доступа с разных процессоров и ядер к одним и тем же ячейкам памяти. Следующие измерения покажут это и другие эффекты кеша, связанные с многопоточным кодом.



Интересная ситуация получилась и с Rainbow Six Siege : на улице, в первых кадрах бенчмарка, преимущество Core i7 составляло 10-15 FPS. Внутри помещения загрузка процессоров и видеокарты в обоих случаях достигла 100%, поэтому разница уменьшилась до 3-6 FPS. Но в конце, когда камера вышла за пределы дома, отставание Core i3 опять местами превышало 10 кадров/с. Средний же показатель оказался на уровне 7 FPS в пользу 8 МБ кэша.

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



The Division при максимальном качестве графики также хорошо реагирует на увеличение объема кэш памяти. Уже первые кадры бенчмарка по полной загрузили все потоки Core i3, а вот общая нагрузка на Core i7 составляла 70-80%. Однако разница в скорости в эти моменты составляла всего 2-3 FPS. Чуть позже нагрузка на оба процессора достигла 100%, а разница в определенные моменты уже была за Core i3, но лишь на 1-2 кадра/с. В среднем же она составила около 1 FPS в пользу Core i7.

Все процессоры используют одну шину для контроллера памяти, а модули памяти - только одна.


Рисунок 19: Последовательный доступ для чтения, несколько потоков. На рисунке 19 показана производительность для последовательного доступа только для чтения для 128 байтов. Для кривой для одного потока можно ожидать кривую, похожую на фигуру. Измерения для другой машины, поэтому фактические числа меняются.

Важной частью этого рисунка является, конечно, поведение при запуске нескольких потоков. Обратите внимание, что память не изменяется и не предпринимаются попытки сохранить синхронизацию потоков при переходе по связанному списку. Поскольку между процессорами не нужно передавать строки кэша, это замедление вызвано исключительно одним или обоими узкими местами: общей шиной от процессора до контроллера памяти и шины от контроллера памяти до модулей памяти. Даже с двумя потоками доступная полоса пропускания недостаточна для линейного масштабирования.


В свою очередь бенчмарк Rise of Tomb Rider при высоких настройках графики во всех трех тестовых сценах наглядно показал преимущество процессора с значительно большим объемом кэш памяти. Средние показатели у него на 5-6 FPS лучше, но если внимательно посмотреть каждую сцену, то местами отставание Core i3 превышает 10 кадров/с.



А вот при выборе пресета с очень высокими настройками возрастает нагрузка на видеокарту и процессоры, поэтому в большинстве своем разница между системами уменьшается до нескольких кадров. И лишь кратковременно Core i7 может показывать более значимые результаты. Средние показатели его преимущества по итогам бенчмарка снизились до 3-4 FPS.


Hitman также меньше подвержен влиянию кэш-памяти L3. Хотя и здесь при ультравысоком профиле детализации дополнительные 5 МБ обеспечили лучшую загрузку видеокарты, превратив это в дополнительные 3-4 кадра/с. Особо критичного влияния на производительность они не оказывают, но из чисто спортивного интереса приятно, что есть победитель.



Высокие настройки графики Deus ex: Mankind divided сразу же потребовали максимальной вычислительной мощности от обеих систем, поэтому разница в лучшем случае составляла 1-2 кадра в пользу Core i7, на что указывает и средний показатель.



Повторный запуск при ультравысоком пресете еще сильнее загрузил видеокарту, поэтому влияние процессора на общую скорость стало еще меньшим. Соответственно, разница в кэш-памяти L3 практически не влияла на ситуацию и средний FPS отличался менее чем на полкадра.

По итогам тестирования можно отметить, что влияние кэш-памяти L3 на производительность в играх действительно имеет место, но оно проявляется лишь тогда, когда видеокарта не загружена на полную мощность. В таких случаях можно было бы получить прирост в 5-10 FPS, если бы кэш увеличился в 2,5 раза. То есть ориентировочно получается, что при прочих равных каждый дополнительный МБ кэш-памяти L3 добавляет только 1-2 FPS к скорости отображения видеоряда.

Так что, если сравнивать соседние линейки, например, Celeron и Pentium, или модели с разным объем кэш-памяти L3 внутри серии Core i3, то основной прирост производительности достигается благодаря более высоким частотам, а потом и наличию дополнительных процессорных потоков и ядер. Поэтому, выбирая процессор, в первую очередь, все же, нужно ориентироваться на основные характеристики, а только потом обращать внимание на объем кэш-памяти.

На этом все. Спасибо за внимание. Надеемся, этот материал был полезным и интересным.

Что такое кэш память процессора

Выполняет примерно ту же функцию, что и оперативная память . Только кэш - это память встроенная в процессор . Кэш-память используется процессором для хранения информации. В ней буферизируются самые часто используемые данные, за счет чего, время очередного обращения к ним значительно сокращается. Если емкость оперативной памяти на новых компьютерах от 1 Гб, то кэш у них около 2-8 Мб. Как видите, разница в объеме памяти ощутимая. Но даже этого объема вполне хватает, чтобы обеспечить нормальное быстродействие всей системы. Сейчас распространены процессоры с двумя уровнями кэш-памяти: L1 (первый уровень) и L2 (второй). Кэш первого уровня намного меньше кэша второго уровня, он обычно около 128 Кб. Используется он для хранения инструкций. А вот второй уровень используется для хранения данных, поэтому он больше. Кэш второго уровня сейчас у большинства процессоров общий. Но не у всех, вот например у AMD Athlon 64 X 2 у каждого ядра по своему кэшу L2. Кампания AMD обещает в скором времени предоставить процессор AMD Phenom с четырьмя ядрами и тремя уровнями кэш-памяти.

Программный кэш

Кэш процессора часто путают с программным кэшем. Это совершенно разные вещи, хотя и выполняют схожую функцию. Кэш процессора это микросхема, встроенная в процессор , которая помогает ему быстро обрабатывать информацию. Программный кэш - это папка или какой-нибудь файл на жестком диске, где какая -то программа хранит нужную ей информацию. Рассмотрим на примере: Вы загрузили мой сайт, шапка сайта (картинка, находящаяся в самом верху) и остальные рисунки сохранились кэше вашего браузера. Если вы вернетесь сюда, например, завтра, то картинки уже будут грузиться не из интернета, а из кэша вашего компьютера, что экономит ваши деньги. Если у вас браузер Opera, то папка с изображениями которые вы загружали находится по адресу.