Почему мой сверхпортативный процессор ноутбука не может поддерживать максимальную производительность в высокопроизводительных вычислениях

Я разработал высокопроизводительную процедуру факторизации Холецкого, которая должна иметь пиковую производительность около 10,5 Гфлопс на одном процессоре (без гиперпоточности). Но есть один феномен, которого я не понимаю, когда тестирую его работоспособность. В своем эксперименте я измерил производительность при увеличении размерности матрицы N от 250 до 10000.

  • В моем алгоритме я применил кэширование (с настроенным коэффициентом блокировки), и доступ к данным всегда осуществляется с единичным шагом во время вычислений, поэтому производительность кеша оптимальна; Устранены проблемы TLB и пейджинга;
  • У меня 8 ГБ доступной оперативной памяти, а максимальный объем памяти во время эксперимента составляет менее 800 МБ, поэтому подкачки не происходит;
  • Во время эксперимента ни один ресурсоемкий процесс, такой как веб-браузер, не запускается одновременно. Только какой-то действительно дешевый фоновый процесс записывает частоту процессора, а также данные о температуре процессора каждые 2 секунды.

Я ожидал, что производительность (в GFLOP) должна поддерживаться на уровне 10,5 для любого N, которое я тестирую. Но в середине эксперимента наблюдается значительное падение производительности, как показано на первом рисунке.

Частота и температура процессора показаны на 2-м и 3-м рисунке. Эксперимент заканчивается через 400 секунд. Когда начался эксперимент, температура составляла 51 градус, а при загрузке процессора быстро поднималась до 72 градусов. После этого он медленно вырос до самого высокого уровня в 78 градусов. Частота процессора в основном стабильная, при повышении температуры она не падала.

Итак, мой вопрос:

  • если частота процессора не упала, почему страдает производительность?
  • как именно температура влияет на производительность процессора? Неужели увеличение с 72 до 78 градусов действительно ухудшает положение? введите описание изображения здесь  введите описание изображения здесь  введите описание изображения здесь

Информация о процессоре

System: Ubuntu 14.04 LTS
Laptop model: Lenovo-YOGA-3-Pro-1370
Processor: Intel Core M-5Y71 CPU @ 1.20 GHz * 2

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0,1
Off-line CPU(s) list:  2,3
Thread(s) per core:    1
Core(s) per socket:    2
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 61
Stepping:              4
CPU MHz:               1474.484
BogoMIPS:              2799.91
Virtualisation:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              4096K
NUMA node0 CPU(s):     0,1

CPU 0, 1
driver: intel_pstate
CPUs which run at the same hardware frequency: 0, 1
CPUs which need to have their frequency coordinated by software: 0, 1
maximum transition latency: 0.97 ms.
hardware limits: 500 MHz - 2.90 GHz
available cpufreq governors: performance, powersave
current policy: frequency should be within 500 MHz and 2.90 GHz.
                The governor "performance" may decide which speed to use
                within this range.
current CPU frequency is 1.40 GHz.
boost state support:
  Supported: yes
  Active: yes

обновление 1 (контрольный эксперимент)

В моем первоначальном эксперименте ЦП постоянно занят работой от N = 250 до N = 10000. Многие люди (в первую очередь те, кто видел этот пост до повторного редактирования) подозревали, что перегрев ЦП является основной причиной снижения производительности. Затем я вернулся и установил lm-sensors пакет linux для отслеживания такой информации, и действительно, температура процессора повысилась.

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

  • для N от 250 до 2500 время охлаждения составляет 5 с;
  • для N от 2750 до 5000 время охлаждения составляет 20 с;
  • для N от 5250 до 7500 время охлаждения составляет 40 с;
  • наконец, для N между 7750 и 10000 время охлаждения составляет 60 с.

Обратите внимание, что время охлаждения намного больше, чем время, затрачиваемое на вычисления. Для N = 10000 требуется всего 30 секунд для факторизации Холецкого при максимальной производительности, но я прошу время охлаждения 60 секунд.

Это, безусловно, очень неинтересный параметр для высокопроизводительных вычислений: мы хотим, чтобы наша машина работала все время с максимальной производительностью, пока не будет завершена очень большая задача. Так что такая остановка не имеет смысла. Но это помогает лучше узнать влияние температуры на производительность.

На этот раз мы видим, что пиковая производительность достигается для всех N, как и утверждает теория! Периодическая характеристика частоты и температуры процессора является результатом охлаждения и ускорения. Температура все еще имеет тенденцию к увеличению просто потому, что с увеличением N увеличивается рабочая нагрузка. Это также оправдывает большее время охлаждения для достаточного охлаждения, как это сделал я.

Достижение максимальной производительности, похоже, исключает все эффекты, кроме температуры. Но это действительно раздражает. В основном это говорит о том, что компьютер устанет в HPC, поэтому мы не можем получить ожидаемого прироста производительности. Тогда в чем смысл разработки алгоритма HPC?


Хорошо, вот новый набор графиков:  введите описание изображения здесь введите описание изображения здесь

Не знаю, почему мне не удалось загрузить 6-ю цифру. ТАК просто не позволяет мне отправить правку при добавлении 6-го числа. Прошу прощения, я не могу приложить данные о частоте процессора.


обновление 2 (как я измеряю частоту и температуру процессора)

Спасибо Zboson за добавление тега x86. Для измерения я использовал следующие bash команды:

while true
do 
  cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq >> cpu0_freq.txt  ## parameter "freq0"
  cat sys/devices/system/cpu/cpu1/cpufreq/scaling_cur_freq >> cpu1_freq.txt  ## parameter "freq1"
  sensors | grep "Core 0" >> cpu0_temp.txt  ## parameter "temp0"
  sensors | grep "Core 1" >> cpu1_temp.txt  ## parameter "temp1"
  sleep 2
done

Поскольку я не привязал вычисления к одному ядру, операционная система будет поочередно использовать два разных ядра. Имеет смысл взять

freq[i] <- max (freq0[i], freq1[i])
temp[i] <- max (temp0[i], temp1[i])

как общее измерение.


person Zheyuan Li    schedule 01.04.2016    source источник
comment
очень догадываешься? Настройки энергосбережения? аккумулятор? Охлаждение? Следите за физическими параметрами ноутбука при этом? cpu temp и т. д. Если вы можете исключить аппаратные ограничения, тогда это было бы полезно? Пейджинг?   -  person Ryan Vincent    schedule 01.04.2016
comment
Еще больше предположений: я использовал похожие программы для этих - поиск в Интернете: monitor laptop hardware temperatures - например, openhardwaremonitor.org, также: cpuid.com/softwares/hwmonitor.html. Найдите свой конкретный ноутбук. imo, я подозреваю, что аппаратные ограничения, так как длительная работа процессора без нагрузки приведет к нагрузке на оборудование и будет «дросселировать». Возможно, стоит повысить приоритет матричных задач. Имейте в виду - я действительно предполагаю - вам нужно собрать некоторые данные.   -  person Ryan Vincent    schedule 01.04.2016
comment
Падение производительности при увеличении размера матрицы, вероятно, связано с загрузкой кеша. Второй подозрительно выглядит так, будто ваш процессор нагревается и, следовательно, снижает тактовую частоту. Но с таким же успехом на этой машине могут быть запущены другие процессы. Также вы должны привязать задачу к определенному ядру. Измерение времени - непростая задача. Как именно вы определяете ФЛОПЫ?   -  person Alexander Vogt    schedule 01.04.2016
comment
Существуют программы для действительно тяжелой работы с машиной - они расскажут вам о пределах вашего оборудования.   -  person Ryan Vincent    schedule 01.04.2016
comment
TLB пропускает, когда матрица становится большой? Можете ли вы попробовать другой, больший размер страницы?   -  person Andrew Henle    schedule 03.04.2016
comment
Ну, обычно вы не делаете HPC на своем ноутбуке :) Вот почему у вас есть серверные комнаты с кондиционированием воздуха, вы планируете потоки воздуха через серверы и т.д. В такой среде температура процессора контролируется намного лучше, чем в ваш ноутбук, который избавляется от большинства этих эффектов.   -  person Alexander Vogt    schedule 03.04.2016
comment
@AlphaBetaGamma, как вы меряете частоту процессора? При тестировании я обычно отключаю масштабирование частоты в BIOS (если это возможно). Я не уверен, что это возможно на 100%, потому что ЦП мог принять некоторые меры безопасности, чтобы снизить частоту, если ЦП нагревается. Но в своих тестах я никогда не видел, чтобы это произошло. В любом случае большинство приложений для Linux неправильно измеряют частоту. Единственный, который, как я обнаружил, сделал это правильно, был powertop. На windows cpuz работал хорошо.   -  person Z boson    schedule 03.04.2016
comment
@Zboson: Обычно я использую grep MHz /proc/cpuinfo, но /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq OP, вероятно, хорош, если он знает о турбо. В противном случае вам, вероятно, потребуется использовать .../cpuinfo_cur_freq (для чтения которого требуется root, что подразумевает, что это может быть более дорогостоящая операция, чем чтение текущего решения регулятора масштабирования. Это будет иметь смысл, если он запрашивает оборудование о турбо-режиме, но текущая частота /proc/cpuinfo может быть в турбо-диапазоне.)   -  person Peter Cordes    schedule 03.04.2016


Ответы (1)


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

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


Судя по опубликованной вами информации о процессоре, у вас есть двухъядерный процессор Intel Core M с гиперпоточностью и номинальной устойчивой частотой 1,20 ГГц, поколение Broadwell. Его максимальная частота в турбо-режиме составляет 2,9 ГГц, а устойчивая частота TDP - 1,4 ГГц (при 6 Вт).

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

Настольные / серверные процессоры (Xeon и i5 / i7, но не i3) все еще имеют турбо-режим, но устойчивая частота намного ближе к максимальному турбо. например Haswell i7-4790k имеет устойчивую номинальную частоту 4,0 ГГц. На этой частоте и ниже он не будет использовать (и преобразовывать в тепло) больше, чем его номинальный TDP, равный 88 Вт. Таким образом, ему нужна система охлаждения, способная выдержать 88 Вт. Когда мощность / ток / температура позволяют, он может работать на частоте до 4,4 ГГц и потреблять более 88 Вт энергии. (Скользящее окно для расчета истории мощности для поддержания стабильной мощности 88 Вт иногда настраивается в BIOS, например, 20 или 5 секунд. В зависимости от того, какой код запущен, частота 4,4 ГГц может не повысить потребность в электрическом токе до почти пикового значения. Например, код с большим количеством ошибочных прогнозов ветвлений, которые все еще ограничены частотой процессора, но это не приближается к насыщению 256-битных блоков AVX FP, как это было бы в Prime95.)

Максимальная частота турбо вашего ноутбука в 2,4 раза выше номинальной частоты. Этот высокопроизводительный настольный процессор Haswell может разгоняться только в 1,1 раза. Максимальная устойчивая частота уже довольно близка к максимальным пиковым пределам, потому что она рассчитана на то, чтобы нуждаться в хорошей системе охлаждения, способной не отставать от такого рода тепловыделения. И надежный блок питания, способный обеспечить такой большой ток.

Цель Core M - иметь ЦП, который может ограничивать себя до сверхнизких уровней мощности (расчетная TDP составляет 4,5 Вт на 1,2 ГГц, 6 Вт на 1,4 ГГц). Таким образом, производитель ноутбуков может безопасно разработать небольшую и легкую систему охлаждения и подачи питания, которая потребляет только такое количество энергии. Расчетная мощность сценария составляет всего 3,5 Вт, и это должно отражать тепловые требования для реального кода, а не максимальную мощность, такую ​​как Prime95.

Даже обычный ЦП для портативных компьютеров ULV рассчитан на устойчивую мощность 15 Вт, а мощные процессоры для ноутбуков для игровых / рабочих станций - 45 Вт. И, конечно же, производители ноутбуков устанавливают эти процессоры в машины с более мощными радиаторами и вентиляторами. См. таблицу в Википедии и сравните процессоры настольных компьютеров и серверов (также на на той же странице).


Достижение максимальной производительности, похоже, исключает все эффекты, кроме температуры. Но это действительно раздражает. В основном это говорит о том, что компьютер устанет в HPC, поэтому мы не можем получить ожидаемого прироста производительности. Тогда в чем смысл разработки алгоритма HPC?

Дело в том, чтобы запускать их на оборудовании, которое не так сильно ограничено термически! ЦП со сверхнизким энергопотреблением, такой как Core M, является достойной платформой для разработки, но не хорошей вычислительной платформой для высокопроизводительных вычислений.

Подойдет даже ноутбук с процессором xxxxM, а не с процессором xxxxU. (например, игровой ноутбук или рабочая станция, предназначенный для длительной работы с ресурсоемкими процессами). Или в семействе Skylake xxxxH или HK - это мобильные процессоры мощностью 45 Вт, по крайней мере, четырехъядерные.


Дальнейшее чтение:

  • Современные микропроцессоры: 90-минутное руководство!
  • [Подача питания в современном процессоре] - общие сведения, включая блокировку питания, с которой столкнулся Pentium 4. (https://www.realworldtech.com/power-delivery/) - очень глубоко техническое погружение в конструкцию ЦП / материнской платы и проблемы обеспечения стабильного низкого напряжения для очень резких скачков напряжения и быстрой реакции на запрос ЦП большего / меньшего напряжения при изменении частоты.
person Peter Cordes    schedule 03.04.2016
comment
@AlphaBetaGamma, я немного удивлен, что кто-то поддержал ваш комментарий о том, что не было необходимости отключать турбо в BIOS, потому что частота стабильна. Разве ответ Питера не утверждает, что он нестабилен. То, что оно идет всплесками. Я написал некоторым авторам Eigen о GEMM, и они сказали мне при тестировании производительности, что турбо отключено. Когда я тестировал свой Haswell Intel NUC, я отключил турбо. Базовая частота его процессора xxxxU, к сожалению, намного ниже (примерно наполовину), но я все равно в основном разрабатываю на NUC, так что мне все равно. - person Z boson; 04.04.2016
comment
@Zboson: Сильное снижение частоты может привести к тому, что что-то будет связано с процессором, а не с памятью. Нет действительно безопасного способа экстраполировать с ЦП ноутбука на ЦП высокой мощности, если пропускная способность / время задержки памяти являются фактором. Если вы уверены, что это связано с процессором, использование счетчиков производительности для подсчета тактовых циклов ядра должно быть вполне разумным. (Я в основном смотрел на микробенчмарки, где синхронизация всей программы не была проблемой, поэтому мне не приходилось беспокоиться только о подсчете времени, затраченного на некоторый код в процессе.) - person Peter Cordes; 04.04.2016
comment
@PeterCordes, это интересный момент. Я не думал о понижении частоты, что приведет к смещению результата, потому что это не влияет на пропускную способность памяти. - person Z boson; 04.04.2016
comment
@Zboson: Это возникает, когда люди сравнивают тесты ARM с x86, а затем спорят о том, насколько хороша была бы ARM, если бы кто-нибудь сделал чип с тактовой частотой, как у настольных процессоров x86. Вы не всегда можете просто линейно масштабировать результаты тестов по частоте. В этом случае есть и другие эффекты, потому что проектам ARM могут потребоваться более длинные конвейеры для достижения этих тактовых частот, поэтому штрафы за неправильное предсказание ветвления также будут хуже. Это не проблема для чипов Intel, потому что это точно такой же конвейер с пониженной частотой, так что это в значительной степени просто задержка памяти / bw и, возможно, L3. - person Peter Cordes; 04.04.2016
comment
@PeterCordes, что также касается графических процессоров. Два ядра, работающие на половине номинальной частоты, используют 40% мощности одного ядра, работающего на номинальной частоте. Предполагая, что вы можете получить одинаковую производительность с двумя ядрами, очевидно, что стоит снизить частоту и увеличить количество ядер. Я никогда не думал об этом в пропускной способности памяти, но это еще одна победа! Это действительно интересно. Уменьшите частоту ядра ниже пропускной способности памяти и увеличьте количество ядер. Конечно, оказывается, что часто бывает трудно так хорошо распараллелить алгоритмы, даже не учитывая пропускную способность памяти. - person Z boson; 04.04.2016
comment
@PeterCordes, здесь я обсуждал 40 % ссылка. Неудивительно, что графические процессоры во многих случаях превосходят процессоры. Мой трассировщик лучей по-прежнему работает намного быстрее на моей арке графического процессора 6-летней давности, чем все процессоры Intel, которые я пробовал (включая 24-ядерный двухпроцессорный сервер Xeon IVB). - person Z boson; 04.04.2016