Нормализация скорости для тестирования на разных многоядерных процессорах - PullRequest
0 голосов
/ 23 марта 2011

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

Ответы [ 4 ]

1 голос
/ 23 марта 2011

В Linux вы можете загрузиться с параметром командной строки ядра maxcpus=N, чтобы ограничить машину только N процессорами.Подробнее см. Documentation/kernel-parameters.txt в исходном коде ядра.

В большинстве сред BIOS также есть возможность отключить гиперпоточность;в зависимости от ваших тестов HT может ускорить или замедлить ваши тесты;контроль ХТ был бы идеальным.

1 голос
/ 23 марта 2011

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

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

0 голосов
/ 30 марта 2011

Ваша проблема связана с автоматическим масштабированием частоты ядра на основе количества активных ядер в любой момент времени. Например, 6-ядерные чипы AMD Phenom работают на частоте 3,4 ГГц (или несколько похожи), а если ваше приложение создает более 3 потоков, оно снижается до 2,8 ГГц (или аналогично). Intel, с другой стороны, использует набор эвристик для определения правильной частоты в любой момент времени. Тем не менее, вы всегда можете отключить эти настройки, перейдя в BIOS, и тогда результаты будут сопоставимы, только отличаясь в зависимости от тактовой частоты. Обычно люди измеряют гигафлопс, чтобы получить сопоставимые результаты.

0 голосов
/ 23 марта 2011

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

...