Является ли латентность памяти затронутой частотой процессора? Является ли это результатом управления питанием памяти контроллером памяти?

Мне в основном нужна помощь, чтобы объяснить/подтвердить некоторые экспериментальные результаты.

Основная теория

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

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

Эксперимент

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

Я написал тестовое приложение в C, которое пересекает связанный список. Я эффективно создаю связанный список, чьи отдельные узлы имеют размеры, равные размеру кеш-строки (64 байта). Я выделил большой объем памяти, который кратен размеру кеш-строки.

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

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

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

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

Основная экспериментальная установка аналогична описанной здесь: " Фактическая частота процессора и частота процессора, сообщенная подсистемой Linux cpufreq.

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

Этот эксперимент повторяется во всех возможных параметрах частоты процессора, используя "Linux-контроллер частоты" в Linux. Кроме того, эксперимент повторяется для случая, связанного с процессором, и связанного с памятью случая, как описано выше.

Результаты

Два следующих графика показывают результаты для случая, связанного с ЦП и связанного с памятью случая соответственно. На оси X тактовая частота процессора задается в ГГц. На оси y скорость выхода из программы указана в (1/ns).

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


Instruction-retirement rate Vs CPU frequency for a CPU-bound application. Результаты для случая с привязкой к процессору.


Instruction-retirement rate Vs CPU frequency for a memory-bound application. Результаты для случая, связанного с памятью.


Результаты имеют смысл для случая, связанного с процессором, но не так много для случая, связанного с памятью. Все маркеры для привязки к памяти опускаются ниже линии, которая ожидается, потому что скорость выхода из программы не должна увеличиваться с той же скоростью, что и частота процессора для приложения с привязкой к памяти. Маркеры, похоже, падают на прямые линии, что также ожидается.

Тем не менее, по-видимому, происходят изменения в скорости списания команд с изменением частоты процессора.

Вопрос

Что вызывает изменение шага в скорости выхода на пенсию? Единственное объяснение, о котором я мог думать, это то, что контроллер памяти каким-то образом изменяет скорость и энергопотребление памяти с изменением скорости запросов на память. (По мере увеличения скорости выхода из программы скорость запросов на память также должна увеличиваться.) Правильное ли это объяснение?

Ответ 1

Кажется, у вас точно такие результаты, которые вы ожидали - примерно линейный тренд для связанной с CPU программы, а также мелкий (er) аффинный для случая с памятью (который меньше процессорного эффекта). Вам понадобится намного больше данных, чтобы определить, являются ли они согласованными шагами или если они - как я подозреваю, - в основном случайный дрожание, в зависимости от того, насколько "хороший" список.

Часы cpu будут влиять на часы шины, что повлияет на тайминги и т.д. - синхронизация между шинами с тактовой частотой всегда сложна для разработчиков аппаратного обеспечения. Расстояние между вашими шагами интересно 400 МГц, но я бы не слишком много рисовал из этого - как правило, этот вид вещей слишком сложный и зависит от конкретного оборудования, чтобы быть правильно проанализированным без "внутреннего" знания, используемого контроллером памяти и т.д..

(пожалуйста, нарисуйте более подходящие линии)