Мне в основном нужна помощь, чтобы объяснить/подтвердить некоторые экспериментальные результаты.
Основная теория
Общая идея, выраженная в документах по DVFS, заключается в том, что время выполнения имеет встроенные и внесхемные компоненты. Встроенные компоненты шкалы времени выполнения линейно с частотой процессора, тогда как компоненты вне кристалла остаются незатронутыми.
Следовательно, для приложений с привязкой к ЦП существует линейная зависимость между частотой процессора и скоростью выхода из системы. С другой стороны, для приложения с привязкой к памяти, где кэши часто пропущены, и к DRAM необходимо часто обращаться, отношение должно быть аффинным (одно не просто кратно другому, вам также нужно добавить константу).
Эксперимент
Я проводил эксперименты, рассматривая, как частота процессора влияет на скорость выхода на пенсию и время выполнения при разных уровнях ограниченности памяти.
Я написал тестовое приложение в C, которое пересекает связанный список. Я эффективно создаю связанный список, чьи отдельные узлы имеют размеры, равные размеру кеш-строки (64 байта). Я выделил большой объем памяти, который кратен размеру кеш-строки.
Связанный список является круглым, так что последний элемент связывается с первым элементом. Кроме того, этот связанный список случайным образом проходит через блоки размера кеш-строки в выделенной памяти. Доступ к каждому блоку размера кэша в выделенной памяти, и никто из блоков не обращается более одного раза.
Из-за случайного обхода я предположил, что аппаратное обеспечение не должно использоваться для какой-либо предварительной выборки. В основном, переходя по списку, у вас есть последовательность доступа к памяти без шаблона шага, без временной локальности и без пространственной локальности. Кроме того, поскольку это связанный список, один доступ к памяти не может начинаться до завершения предыдущего. Следовательно, обращения к памяти не должны быть параллельны.
Когда объем выделенной памяти достаточно мал, у вас не должно быть недостатков в кеше, кроме первоначального разогрева. В этом случае рабочая нагрузка эффективно связана с процессором, и скорость выхода на пенсию очень хорошо масштабируется с частотой процессора.
Когда количество выделенной памяти достаточно велико (больше, чем LLC), вам не хватает кэшей. Рабочая нагрузка связана с памятью, а скорость выхода из строя не должна также масштабироваться с частотой процессора.
Основная экспериментальная установка аналогична описанной здесь: " Фактическая частота процессора и частота процессора, сообщенная подсистемой Linux cpufreq.
Вышеуказанное приложение выполняется несколько раз в течение некоторого времени. В начале и в конце срока действия счетчик производительности оборудования выбирается для определения количества инструкций, удаленных в течение продолжительности. Измеряется также продолжительность продолжительности. Средняя норма выхода на пенсию измеряется как соотношение между этими двумя значениями.
Этот эксперимент повторяется во всех возможных параметрах частоты процессора, используя "Linux-контроллер частоты" в Linux. Кроме того, эксперимент повторяется для случая, связанного с процессором, и связанного с памятью случая, как описано выше.
Результаты
Два следующих графика показывают результаты для случая, связанного с ЦП и связанного с памятью случая соответственно. На оси X тактовая частота процессора задается в ГГц. На оси y скорость выхода из программы указана в (1/ns).
Маркер помещается для повторения описанного выше эксперимента. Строка показывает, какой результат будет, если скорость выхода на пенсию увеличится с той же скоростью, что и частота процессора, и пройдет через маркер с низкой частотой.
Результаты для случая с привязкой к процессору.
Результаты для случая, связанного с памятью.
Результаты имеют смысл для случая, связанного с процессором, но не так много для случая, связанного с памятью. Все маркеры для привязки к памяти опускаются ниже линии, которая ожидается, потому что скорость выхода из программы не должна увеличиваться с той же скоростью, что и частота процессора для приложения с привязкой к памяти. Маркеры, похоже, падают на прямые линии, что также ожидается.
Тем не менее, по-видимому, происходят изменения в скорости списания команд с изменением частоты процессора.
Вопрос
Что вызывает изменение шага в скорости выхода на пенсию? Единственное объяснение, о котором я мог думать, это то, что контроллер памяти каким-то образом изменяет скорость и энергопотребление памяти с изменением скорости запросов на память. (По мере увеличения скорости выхода из программы скорость запросов на память также должна увеличиваться.) Правильное ли это объяснение?