У меня ноутбук с процессором Intel i7-1065G7 . turbostat
сообщает
35 * 100.0 = 3500.0 MHz max turbo 8 active cores
35 * 100.0 = 3500.0 MHz max turbo 7 active cores
35 * 100.0 = 3500.0 MHz max turbo 6 active cores
35 * 100.0 = 3500.0 MHz max turbo 5 active cores
35 * 100.0 = 3500.0 MHz max turbo 4 active cores
35 * 100.0 = 3500.0 MHz max turbo 3 active cores
38 * 100.0 = 3800.0 MHz max turbo 2 active cores
39 * 100.0 = 3900.0 MHz max turbo 1 active cores
(это 4 физических / 8 виртуальных ядер) Когда я загружаю большую однопоточную нагрузку (вычисление числа пи с mpfr
) на процессор, я замечаю, что два ядра (может быть, одно физическое ядро?) работает на частоте 3500 МГц, а остальные имеют более низкую частоту. Но они никогда не достигают более высоких частот турбо-ускорения.
Если я отключу некоторые ядра процессора (например, с помощью echo 0> / sys / devices / system / cpu / cpu [2-7] * / online
]) ноутбук действительно достигает соответствующих более высоких частот турбо-ускорения , что приводит к увеличению производительности (задача, которая раньше занимала в среднем 18,5 секунд, теперь занимает 16,8).
На моем старом ноутбуке с i7-4712MQ турбостат
дает
30 * 100.0 = 3000.0 MHz max turbo 4 active cores
30 * 100.0 = 3000.0 MHz max turbo 3 active cores
32 * 100.0 = 3200.0 MHz max turbo 2 active cores
33 * 100.0 = 3300.0 MHz max turbo 1 active cores
(это тоже машина с 4/8 ядрами). На этой машине одноядерная нагрузка увеличивает частоту одного ядра почти до 3,3 ГГц, при двухъядерной нагрузке две тактовые частоты при 3,2 ГГц и т. Д.
Я не проверял частоту отдельных ЦП в Windows, но диспетчер задач иногда отображает частоты выше 3,7 ГГц.
Обновление: Так проблема исчезла ... Понятия не имею почему. Я удалил linux-cloud-tools
, но не думаю, что это должно быть причиной.
Вы написали ...
Когда я бросаю большую однопоточную загрузку
Если ваша программа однопоточная, ей не нужно переходить на максимальную частоту на другом потоков, поэтому нет.
Ваша ссылка предназначена для процессора Intel® Core ™ i7-1065G7.
В связанном вами документе Intel указано, что максимальная частота составляет 3900 МГц. Ваши данные, похоже, показывают, что есть ядро с частотой 3900 МГц, поэтому я не знаю, почему вы думаете, что оно не достигло максимума. Вы разместили это ...
35 * 100.0 = 3500.0 MHz max turbo 8 active cores
35 * 100.0 = 3500.0 MHz max turbo 7 active cores
35 * 100.0 = 3500.0 MHz max turbo 6 active cores
35 * 100.0 = 3500.0 MHz max turbo 5 active cores
35 * 100.0 = 3500.0 MHz max turbo 4 active cores
35 * 100.0 = 3500.0 MHz max turbo 3 active cores
38 * 100.0 = 3800.0 MHz max turbo 2 active cores
39 * 100.0 = 3900.0 MHz max turbo 1 active cores
В общем, если показание не является максимальной частотой, это потому, что либо оно отображается только с перерывами, поэтому измерения будут показывать это только с перерывами, либо это не обязательно должно быть на максимальной частоте, потому что там какое-то ограничение, такое как ввод-вывод. Не беспокойся об этом. Если вы пишете программу без ограничений, другими словами, это поток с ограничениями на вычисления, я гарантирую, что он будет работать с максимальной частотой.
Истекшее время 18,5 с может не иметь значения из-за случайных эффектов, которые вы не хочу использовать, чтобы делать выводы. Длительные задания продолжительностью 200 секунд и более могут дать более значимые данные.
Ваши данные, похоже, показывают, что есть ядро с частотой 3900 МГц, поэтому я не знаю, почему вы думаете, что оно не достигло максимума. Вы разместили это ...35 * 100.0 = 3500.0 MHz max turbo 8 active cores
35 * 100.0 = 3500.0 MHz max turbo 7 active cores
35 * 100.0 = 3500.0 MHz max turbo 6 active cores
35 * 100.0 = 3500.0 MHz max turbo 5 active cores
35 * 100.0 = 3500.0 MHz max turbo 4 active cores
35 * 100.0 = 3500.0 MHz max turbo 3 active cores
38 * 100.0 = 3800.0 MHz max turbo 2 active cores
39 * 100.0 = 3900.0 MHz max turbo 1 active cores
В общем, если показание не является максимальной частотой, это потому, что либо оно отображается только с перерывами, поэтому измерения будут показывать это только с перерывами, либо это не обязательно должно быть на максимальной частоте, потому что там какое-то ограничение, такое как ввод-вывод. Не беспокойся об этом. Если вы пишете программу без ограничений, другими словами, это поток с ограничениями на вычисления, я гарантирую, что он будет работать с максимальной частотой.
Истекшее время 18,5 с может не иметь значения из-за случайных эффектов, которые вы не хочу использовать, чтобы делать выводы. Длительные задания продолжительностью 200 секунд и более могут дать более значимые данные.
Ваши данные, похоже, показывают, что есть ядро с частотой 3900 МГц, поэтому я не знаю, почему вы думаете, что оно не достигло максимума. Вы разместили это ...35 * 100.0 = 3500.0 MHz max turbo 8 active cores
35 * 100.0 = 3500.0 MHz max turbo 7 active cores
35 * 100.0 = 3500.0 MHz max turbo 6 active cores
35 * 100.0 = 3500.0 MHz max turbo 5 active cores
35 * 100.0 = 3500.0 MHz max turbo 4 active cores
35 * 100.0 = 3500.0 MHz max turbo 3 active cores
38 * 100.0 = 3800.0 MHz max turbo 2 active cores
39 * 100.0 = 3900.0 MHz max turbo 1 active cores
В общем, если показание не является максимальной частотой, это потому, что либо оно отображается только с перерывами, поэтому измерения будут показывать это только с перерывами, либо это не обязательно должно быть на максимальной частоте, потому что там какое-то ограничение, такое как ввод-вывод. Не беспокойся об этом. Если вы пишете программу без ограничений, другими словами, это поток с ограничениями на вычисления, я гарантирую, что он будет работать с максимальной частотой.
Истекшее время 18,5 с может не иметь значения из-за случайных эффектов, которые вы не хочу использовать, чтобы делать выводы. Длительные задания продолжительностью 200 секунд и более могут дать более значимые данные.
Не знаю, почему вы думаете, что он не достиг максимума. Вы разместили это ...35 * 100.0 = 3500.0 MHz max turbo 8 active cores
35 * 100.0 = 3500.0 MHz max turbo 7 active cores
35 * 100.0 = 3500.0 MHz max turbo 6 active cores
35 * 100.0 = 3500.0 MHz max turbo 5 active cores
35 * 100.0 = 3500.0 MHz max turbo 4 active cores
35 * 100.0 = 3500.0 MHz max turbo 3 active cores
38 * 100.0 = 3800.0 MHz max turbo 2 active cores
39 * 100.0 = 3900.0 MHz max turbo 1 active cores
В общем, если показание не является максимальной частотой, это потому, что либо оно отображается только с перерывами, поэтому измерения будут показывать это только с перерывами, либо это не обязательно должно быть на максимальной частоте, потому что там какое-то ограничение, такое как ввод-вывод. Не беспокойся об этом. Если вы пишете программу без ограничений, другими словами, это поток с ограничениями на вычисления, я гарантирую, что он будет работать с максимальной частотой.
Истекшее время 18,5 с может не иметь значения из-за случайных эффектов, которые вы не хочу использовать, чтобы делать выводы. Длительные задания продолжительностью 200 секунд и более могут дать более значимые данные.
Не знаю, почему вы думаете, что он не достиг максимума. Вы разместили это ...35 * 100.0 = 3500.0 MHz max turbo 8 active cores
35 * 100.0 = 3500.0 MHz max turbo 7 active cores
35 * 100.0 = 3500.0 MHz max turbo 6 active cores
35 * 100.0 = 3500.0 MHz max turbo 5 active cores
35 * 100.0 = 3500.0 MHz max turbo 4 active cores
35 * 100.0 = 3500.0 MHz max turbo 3 active cores
38 * 100.0 = 3800.0 MHz max turbo 2 active cores
39 * 100.0 = 3900.0 MHz max turbo 1 active cores
В общем, если показание не является максимальной частотой, это потому, что либо оно отображается только с перерывами, поэтому измерения будут показывать это только с перерывами, либо это не обязательно должно быть на максимальной частоте, потому что там какое-то ограничение, такое как ввод-вывод. Не беспокойся об этом. Если вы пишете программу без ограничений, другими словами, это поток с ограничениями на вычисления, я гарантирую, что он будет работать с максимальной частотой.
Истекшее время 18,5 с может не иметь значения из-за случайных эффектов, которые вы не хочу использовать, чтобы делать выводы. Длительные задания продолжительностью 200 секунд и более могут дать более значимые данные.
s, потому что либо он делает это только с перерывами, так что измерения будут показывать это только с перерывами, либо это не обязательно должно быть на максимальной частоте, потому что есть некоторые ограничения, такие как ввод-вывод. Не беспокойся об этом. Если вы пишете программу без ограничений, другими словами, это поток с ограничениями на вычисления, я гарантирую, что он будет работать с максимальной частотой.Истекшее время 18,5 с может не иметь значения из-за случайных эффектов, которые вы не хочу использовать, чтобы делать выводы. Длительные задания продолжительностью 200 секунд и более могут дать более значимые данные.
s, потому что либо он делает это только с перерывами, так что измерения будут показывать это только с перерывами, либо это не обязательно должно быть на максимальной частоте, потому что есть некоторые ограничения, такие как ввод-вывод. Не беспокойся об этом. Если вы пишете программу без ограничений, другими словами, это поток с ограничениями на вычисления, я гарантирую, что он будет работать с максимальной частотой.Истекшее время 18,5 с может не иметь значения из-за случайных эффектов, которые вы не хочу использовать, чтобы делать выводы. Длительные задания продолжительностью 200 секунд и более могут дать более значимые данные.
другими словами, это поток с ограничениями вычислений, я гарантирую, что он будет работать на максимальной частоте.Прошедшее время 18,5 с может не иметь значения из-за случайных эффектов, которые вы не хотите использовать для выводов. Длительные задания продолжительностью 200 секунд и более могут дать более значимые данные.
другими словами, это поток с ограничениями вычислений, я гарантирую, что он будет работать на максимальной частоте.Прошедшее время 18,5 с может не иметь значения из-за случайных эффектов, которые вы не хотите использовать для выводов. Длительные задания продолжительностью 200 секунд и более могут дать более значимые данные.
Я столкнулся с чем-то подобным на аналогичной установке (процессор i7-9700K, Ubuntu 18.04). И я думаю, что использование моего компьютера может быть аналогичным: это настольный компьютер, который я использую для запуска некоторых интенсивных (но однопоточных) приложений, а также, возможно, с открытым веб-браузером и некоторыми приложениями для обмена сообщениями. Я нашел предложение в комментариях под исходным сообщением работать - установка привязки процессора к процессам. Для этого я использовал taskset
[1].
Первый тест (без изменений в настройках сходства):
Все 8 ядер «бездействуют» при загрузке ~10%. Я запускаю однопоточную задачу с интенсивным использованием ЦП. Одно ядро скачет на 100%, вижу 3,6 ГГц (максимум без турбо) на всех ядрах при использовании i7z
.
Второй тест:
Ограничьте все запущенные процессы ядрами ЦП 0 и 1 с помощью: for i in `sudo ps -aux | awk '{напечатать $2}'`; выполнить sudo taskset -a -p -c 0-1 $i; сделано
.Теперь эти 2 ядра загружены на 30-40%, остальные на 0% (хотя некоторые другие ядра могут начать проявлять активность, когда ОС запускает процессы). Затем запустите ту же однопоточную задачу с интенсивным использованием ЦП. Одно ядро скачет до 100%, но теперь я вижу, что оно достигает максимальной турбо-частоты 4,9 ГГц. После этого я вернул сходство, чтобы использовать все ядра, заменив диапазон 0-1
на 0-7
, в моем случае.
[1] http://manpages.ubuntu.com/manpages/focal/man1/taskset.1.html