
Я проводил тесты с использованием CPUz и OCCT. Я заметил, что если я настраиваю CPUz на нагрузку CPU несколькими потоками, то он никогда не поднимется выше 70c. С другой стороны, запуск OCCT для нагрузки на CPU мгновенно поднимет температуру выше 75c, а затем иногда даже останавливает тест на 85c.
Что здесь происходит? Я всегда понимал, что в то время как видеокарты имеют множество ядер, которые нужно нагружать по отдельности, процессоры просты. Базовый цикл for может нагрузить процессор на 100%. Куча циклов for, запущенных в нескольких потоках, может загрузить каждое ядро. Как так получается, что OCCT нагревает мой процессор так сильно? Что он заставляет его делать, чего не может CPUz?
Немного справочной информации: процессор Intel Core i7-4790k. Turbo Boost включен, но, по-моему, он просто зависает на 5% при запуске любого из процессов
решение1
Загрузка ЦП — это мера того, сколько ресурсов доступно ЦП, но существует множество различных типов инструкций, которые могут быть обработаны, и все они имеют различные требования к обработке и памяти.
Задача, требующая большого объема памяти, может привести к остановке ЦП во время извлечения данных из памяти и, таким образом, снизить эффективную производительность.инструкцияпропускная способность при сохранении «загруженности» ЦП.
Кроме того, существует множество различных частей ЦП, которые могут быть загружены по-разному.
Из WikichipsСэнди-Бридж uArch:
Как вы видите, у нас есть начальный интерфейс декодера инструкций, который при обработке сложных и разнообразных потоков инструкций может испытывать трудности с заполнением остальной части конвейера.
Если вытолькоесть целочисленные сложения, то вы сможете использовать 3 основных исполнительных блока, так как у ЦП есть 3 блока INT ALU. Если у вас есть только умножения с плавающей точкой, то вы можете использовать только один блок FPU MUL (умножение).
ЦП также работает как конвейер, и пока один блок используется в исполнительном блоке, вы можете запланировать операциюв следующем цикле. Это означает, что поток разнообразных инструкций может лучше использовать ресурс, поскольку неиспользуемый блок может быть запланирован в том же EU, но с другим типом инструкции. Различные инструкции также будут иметь разное время выполнения и больший или меньший набор связанных схем для выполнения. Простое добавление может занять один или два такта, в то время как инструкция с плавающей точкой может занять больше времени и иметь большее количество задействованных схем. Более длительное выполнение может означать, что она потребляет больше энергии, как и большая площадь схемы. В качестве альтернативы, инструкция, занимающая больше времени, может означать, что схема планирования переднего конца приостанавливается и на короткое время потребляет меньше энергии, ожидая доступных исполнительных блоков, в то время как более мелкие и быстрые инструкции используют больше общей схемы, если вы включаете другие части ЦП.
В результате сделатьполныйпри использовании ЦП необходим разнообразный поток инструкций, и то, что может выполнять один ЦП, может не выполняться в полной мере другим из-за различного расположения и количества исполнительных блоков, а также их возможностей.
Исполнительные устройства могут работать на «низкой мощности» с помощью современного метода управления мощностью и, как следствие, не вносить вклад в тепловыделение устройства или вносить его значительно меньше.
Кэши также способствуют энергопотреблению. Использование кэша будет означать, что инструкции и данные могут быть извлечены и, как следствие, выполнены быстрее, чем процедура с набором данных в памяти, который слишком велик для кэша.
В результате разные программы или потоки инструкций могут вызывать разное пиковое потребление мощности и, следовательно, разные температуры.
Архитектурные различия между поколениями процессоров и даже внутри одного поколения, где могут иметь значение размеры кэша, параметры процессора и различная доступность инструкций.
решение2
Я понимаю, что вы хотите узнать, почему запуск многопоточного теста не нагревает процессор так сильно, как однопоточный тест.
Простое объяснение заключается в том, что виноват Turbo Boost, поскольку он отключается, когда процессор работает одинаково интенсивно на нескольких ядрах. Он включается только тогда, когда одно ядро интенсивно используется (и только одно ядро).
Когда функция Turbo Boost активна, она подает больше мощности на усиленное ядро, снижая мощность на другие ядра и, таким образом, замедляя их.
Затем разогнанное ядро работает на более высокой скорости и нагревается сильнее, чем неразогнанное ядро. Это фиксируется датчиком, который затем сообщает температуру этого ядра как температуру всего процессора.
решение3
"Нагрузка" (или использование) ЦП — это монитор активности, показывающий, какой процент времени ЦП тратится на "полезную" активность по сравнению с "простоем". Операционная система определяет, что является "полезной" активностью, а что — "простоем".
При нулевой загрузке ЦП ОС не планирует никаких пользовательских процессов в течение этого временного интервала.
При 50% загрузке ЦП ОС запланировала около половины временного интервала для пользовательских процессов, а другая половина этого временного интервала была потрачена в цикле простоя. Даже если есть только один пользовательский процесс, он может не потреблять 100% нагрузки ЦП, поскольку этот процесс не является интенсивно используемым ЦП и должен быть перепланирован, например, во время ожидания завершения операции ввода-вывода.
При 100% загрузке ЦП ОС запланировала весь временной интервал для пользовательских процессов.
Обратите внимание, что ЦП на самом деле всегда занят (при включении), то есть всегда выполняет инструкции. Если ни один (пользовательский) процесс не готов к выполнению, то планировщик ОС должен выполнить свой цикл ожидания.
Температура ЦП является следствием электрической мощности, потребляемой цепями ЦП. Чем больше транзисторных переключателей происходит, тем больше мощности требуется и потребляется, и температура ЦП увеличивается.
Это энергопотребление не отображается «нагрузкой» ЦП, которая является всего лишь монитором активности на основе времени.
Процесс может держать ЦП «занятым» (по времени), просто копируя или перемещая данные (например, инструкции загрузки и сохранения) в памяти (что не является существенной дополнительной нагрузкой по мощности по сравнению с режимом простоя).
В то время как другой процесс с интенсивными вычислениями может выполнять вычисления (например, инструкции умножения и деления), которые используют множество других цепей в ЦП, таких как АЛУ (арифметико-логическое устройство) и FPU (блок операций с плавающей точкой).
IOW, это набор инструкций (т.е. типы инструкций), которые выполняет процесс, который определяет потребляемую электроэнергию и последующий уровень температуры.
Операционная система не способна измерять это потребление энергии и только сообщает об измерении активности на основе времени с использованием датчиков загрузки ЦП и температуры.
решение4
Я приведу вам пример. Возьмем два цикла:
for (i = 0; i < 1000000000; ++i) {
x += a [i];
}
и
for (i = 0; i < 1000000000; ++i) {
x += a [i];
y += a [i];
z += a [i];
}
В первом цикле процессор должен дождаться завершения предыдущего сложения, прежде чем он сможет начать следующее сложение. Если сложение имеет задержку в 3 цикла, то процессор выполняет одно сложение каждые 3 цикла. Загрузка ЦП составляет 100%, но на самом деле ЦП не выполняет так много работы.
Во втором цикле также есть одна итерация каждые три цикла, но поскольку сложения независимы, процессор будет выполнять 3 сложения каждые 3 цикла, выполняя в 3 раза больше работы. Загрузка ЦП по-прежнему составляет 100%, но в 3 раза больше работы произведет гораздо больше тепла.
Таким образом, вы получите больше тепла, если код использует больше доступных вычислительных ресурсов в каждом цикле.