Содержание
Данная статья является продолжением прошлого теста в котором было произведено сравнение производительности при величине кэш памяти L3 2 и 4 МБ на ядро. Также в ней была приведена необходимая теоретическая часть, которая отвечает на вопрос — из-за чего увеличение кэша в принципе приводит к росту производительности процессора. Но если коротко — то на самом деле роста производительности — нет, есть только уменьшение потерь производительности, вызванных простоями процессора из-за того, что ему сложно организовать свою работу, когда нужных данных нет в кэш памяти. Соответственно, чем больше кэша, тем реже случаются вынужденные простои процессора.
К слову, для любителей теорий заговора отмечу, что увидеть глазами когда именно происходят простои — нельзя. Программы мониторинга загрузки процессора фиксируют наличие у процессора задач как таковых, возможно ли процессору сейчас или невозможно решить задачу — программы мониторинга не знают. Но в моменты вынужденного простоя из-за подсистемы памяти — задачи перед процессором стоят, так что процессор по мониторингу «выглядит» занятым. Есть, конечно, способы запечатлеть простои (в случае когда мы не можем напрямую сравнить производительность), но они довольно условные. Я знаю таких способа два. Один подходит всегда, второй только в играх. Всегда можно оценить энергопотребление. Если задача одна и та же то с вынужденными простоями процессор будет потреблять меньше энергии. То есть если вы не знаете — приносит прирост производительности в вашей задачи разгон памяти или кэша, то можно одну и ту же задачу запустить с разгоном и без и сравнить показания датчиков отвечающих за измерение потребляемой энергии или величины потребляемого тока процессорных ядер. Второй метод, для игр, сложнее. И потребует запись логов процента загрузки процессора и в игре нужно выбрать, для теста с разгоном и без, аналогичную локацию или использовать встроенный в игру бенчмарк. Если производительность в игре была ограничена процессором, то особого ума не надо, вы по FPS увидите разницу, но если производительность ограничена видеокартой, то FPS (в случае если видеокарте хватает своей видеопамяти) от разгона памяти не увеличится. Но тут увидеть прирост производительности можно именно по проценту загрузки процессора. При равном FPS (равном объёме работы для процессора) процент загрузки процессора с разгоном памяти и кэша будет ниже. То есть ту же самую работу процессор будет выполнять быстрее, и чаще находится в простое, ожидая пока видеокарта отрисовывает кадр.
Вернёмся к основной теме
В прошлом тесте было выяснено, что увеличение объём кэша (сюрприз) приводит к росту производительности.
И рост этот зависит от самого софта. Если алгоритм требует минимума данных и вылизан до предела, то производительность и с малым объёмом кэш памяти стремится к теоретической производительности процессора. И чем задача менее оптимизирована (в силу принципов работы и задачи программы или кривости программиста), тем больше она зависит и от объёма кэш памяти и от его производительности.
С этим всё понятно. Результаты предсказуемые, увидеть их, конечно же было интересно, но тест тот был подготовительным и должен был быть частью этого теста.
Дело в том, что есть менее очевидное сравнение. А именно — как ведёт себя прирост от объёма кэш памяти в случае разной оперативной памяти.
Тут не всё настолько просто, как может показаться и есть два предположения.
Дело в том, что данные в кэш памяти «появляются» с двух сторон. Данные (блоками) поступают из оперативной памяти после того как процессор, после промаха в кэш, инициализировал необходимость передачи данных ближе к себе из оперативной памяти. И второй источник откуда данные поступают в кэш L3 — это передача данных от выполненных операций процессором. То есть процессор выполнил операцию, и данные автоматически записываются в кэш, они, если говорить про L3 становятся доступны и другим ядрам и т.д.
И исходя из двух источников поступления данных встаёт закономерный вопрос:
Как оперативная память влияет на эффективность роста объёма кэш памяти?
И развитей событий может быть два:
- Процессору постоянно нужны данные, находящиеся в оперативной памяти, и если память достаточно медленная, то в кэш записи будут происходить медленно и слишком редко (на фоне скорости работы процессора), то есть постоянно терять актуальность, и будут ограничиваться как пропускной способностью оперативной памяти, так и задержками оперативной памяти. Что приведёт к тому, что не имеет значение насколько большой кэш, так как там будет лежать старый «мусор» в не зависимости от размера этого кэша. То есть для этого предположения верно, что при разгоне оперативной памяти разница в производительности от увеличения объёма кэша станет больше. Для понимания рассмотрим простой гипотетический пример. Допустим есть компьютер с оперативной памятью 2133 МГц и с оперативной памятью 3600 МГц. И на том и на другом мы увеличиваем объём кэш памяти в два раза. Если это предположение верно, то мы должны получить результаты, допустим — прирост от роста кэша на памяти 2133 МГц — 5%, а прирост от роста кэша на оперативной памяти 3600 МГц — 10%.
- Большая часть выполняемых операций используют только что созданные процессором данные, которые и так уже находятся в кэше. То есть промахи в кэш — это редкое явление. С медленной памятью каждый из промахов будет сильнее влиять на производительность, с быстрой памятью — слабее влиять на производительность. То есть для этого предположения верно, что при разгоне оперативной памяти разница в производительности от увеличения объёма кэша станет меньше. Допустим есть компьютер с оперативной памятью 2133 МГц и с оперативной памятью 3600 МГц. И на том и на другом мы увеличиваем объём кэш памяти в два раза. Если это предположение верно, то мы должны получить результаты, допустим — прирост от роста кэша на памяти 2133 МГц — 10%, а прирост от роста кэша на оперативной памяти 3600 МГц — 5%.
В этом тесте мы и будем разбираться в том, какое из предположений верное.
Забегая вперёд — скажу, что представить результаты теста визуально довольно сложно, так что высказанным ранее предположениям дадим цветовые обозначения. Первое предположение — зелёное, второе предположение — красное (к сожалению некоторым дальтоникам этот тест будет сложен для визуального восприятия, но результаты и выводы будут описаны и текстом).
Перейдём к тестам
Начнём с бенчмарков которые плохо реагируют на память и кэш.
Немного остановлюсь на том что за таблица такая и как её читать.
У нас в тесте есть 4 конфигурации системы:
- ОЗУ 2133 МГц L3 8 МБ
- ОЗУ 2133 МГц L3 16 МБ
- ОЗУ 3600 МГц L3 8 МБ
- ОЗУ 3600 МГц L3 16 МБ
Задача сравнить разницу между разницей (всё сложно)…
Задача — определить разницу между 8 и 16 МБ кэша на ОЗУ 2133 МГц (разница между конфигурациями 1 и 2), далее — определить разницу между 8 и 16 МБ кэша на ОЗУ 3600 МГц (разница между конфигурациями 3 и 4). А потом сравнить две разницы, то есть понять что больше — разница между 1 и 2 или разница между 3 и 4. Именно это сравнение и позволит понять какое предположение верно: зелёное (1) или красное (2).
Для понимания того как читать результаты рассмотрим первый пример подробнее:
- ОЗУ 2133 МГц L3 8 МБ — 468,9
- ОЗУ 2133 МГц L3 16 МБ — 470,9
- ОЗУ 3600 МГц L3 8 МБ — 466,2
- ОЗУ 3600 МГц L3 16 МБ — 466,7
Разница между 1 и 2 — «+0,4%»
Разница между 3 и 4 — «+0,1%».
Теперь мы сравниваем «+0,4%» и «+0,1%» и получаем, что с 2133 МГц прирост выше, то есть верно «красное» предположение. Формально именно красным цветом должен был быть покрашен центральный прямоугольник на слайде результата, но так как 0,4 и 0,1 — это погрешности, то прямоугольник не окрашен вообще никак.
В многопоточном CPU-z результаты следующие:
Разница между 3,3 и 3% — слишком мала, чтобы сделать выводы. Даже несмотря на то, что все результаты — это усреднение трёх измерений 0,3% разницы — это результат не превышающий погрешности.
CINEBENCH R20 тоже плохо реагирует и на кэш и на память.
Опять разница не превышающая погрешности теста.
На этом бенчмарки которые мало отражают разгон памяти и кэша, и изменения кэша заканчиваются.
Как и следовало ожидать — им без разницы что там с памятью.
Переходим к тестам, которые любят и память и кэш.
И первым будет Win-rar
С медленной памятью — прирост от увеличения объёма кэша L3 составил «+46,6%», с разогнанной памятью рост составил — «+35%». То есть верно второе предположение. Больший объём L3 позволил реже совершать промахи в кэш, от чего влияние от разгона памяти становится менее значимым.
Другой архиватор — 7-zip показывает схожие результаты.
Опять прирост с медленной памятью — выше, чем с быстрой.
Остались только игры
Первая игра: Far Cry5
Можно увидеть, что без разгона памяти прирост от увеличения размера кэш памяти оказался существенно ниже, чем прирост от увеличения кэш памяти с разогнанной памятью. А это значит, что эффективность работы кэш памяти оказалась без разгона памяти низкой, что согласуется не со второй теорией, как в синтетических тестах, а с первой теорией.
Можно сравнить прирост не только цифрами, но и на графиках. Вот так выглядят графики распределения плотности вероятности мгновенного FPS от увеличения размера кэш памяти с разогнанной памятью.
А вот какой прирост без разгона памяти:
Вторая игра: Watch Dogs 2
Тут, к сожалению, ничего не видно. А значит и интересного сказать по этому поводу ничего не получится =(
Для того чтобы лучше оценить реальность работы в играх нужно больше игры в тесты, возможно, когда-нибудь будет расширенное тестирование. Пока же можно сделать выводы, что, несмотря на то, что вторая (красная) гипотеза на практике должна быть преобладающей — первая (зелёная) тоже может случатся, в том числе, и в реальных задачах.
У этой статьи существует и видеоверсия.
Благодарю, хорошая статья.
Доступным языком и кратко объяснил. Молодец, автор