Оптимизация для pentium процессора


Содержание

Как разогнать процессор на базе Intel для ускорения работы ПК?

Читайте, как увеличить частоту процессора Intel (Overclocking). Пошаговая инструкция. Ваш компьютер работает очень быстро. Невероятно быстро, по крайней мере, по сравнению с ПК, который у вас был десять или двадцать лет назад. Но всё равно, он может работать намного быстрее. Если это заявление побуждает вас узнать, как это можно сделать, то в этой статье вы найдёте нужную информацию.

Оверклокинг (Overclocking)

Оверклокинг (Overclocking) – это совокупность действий по увеличению частоты работы устройства, увеличении напряжения сверх нормы, чем сертифицировано производителем устройства с целью увеличения скорости его работы. Максимальный уровень частоты процессора должен быть в пределах, при которых сохраняется стабильная работа устройства при максимальной производительности.

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

Мы будем разгонять процессор от компании «Intel», потому что именно эта компания по-прежнему остается лидером по количеству установок для настольных ПК. В статье мы расскажем о процессе разгона для одной из последних моделей из семейства «Core» (K-серии), которые разблокированы для разгона. Но общие шаги будут верны и могут применяться к большинству настольных компьютеров, проданных или собранных за последние несколько лет. Тем не менее, перед тем как приступать, поищите дополнительные рекомендации в сети для разгона именно вашей модели процессора.

Шаг первый: проверьте свою конфигурацию

Перед началом, убедитесь, что ваше оборудование может быть разогнано. Если вы купили готовый ПК или вам собирали компьютер, то вы, возможно, не помните точную конфигурацию и все возможные ограничения, установленные производителем. Поэтому, вам следует скачать специальную программу, например, «CPU-Z» и с помощью неё узнать точную модель вашего процессора и материнской платы (со всеми буквами, цифрами, номером версии или выпуска). Потом зайдите на официальный сайт производителя и найдите полную характеристику на устройство.

Процессор

Компания «Intel» разработала и представляет на рынке целое множество процессоров, но для разгона хорошо подходят только серии процессоров «K-» и «X-». Причём серия «K» в этом смысле, скорее всего представляет собой определённую переменную, чем фактическую линейку продуктов, это буква в названии процессора означает, что он «разблокирован» (разлочен) и готов к разгону конечным пользователем. Поддержка этой функции встречается в моделях «i7», «i5» и «i3», а также во всех новых, получивших дополнительную мощность, процессорах «X-серии». Поэтому, если вы покупаете процессор от «Intel», с осознанием того, что будете пытаться разогнать его, то вам необходим «камень» версии «K» или «X». Полный список процессоров, которые «разлочены» и могут быть разогнаны конечным потребителем, а также дополнительные рекомендации по разгону, вы сможете найти на официальном сайте компании «Intel». Мы же будем использовать для разгона «Intel Core i7-2600K» для этого руководства.

А возможно ли разогнать процессоры от «Intel» не из серии «К» и «Х»? Естественно да, но это гораздо сложнее, и, вероятно, вам для этого потребуется материнская плата, которая будет поддерживать дополнительные специализированные функции. Кроме того, компания «Intel» пытается всячески запретить разгон «залоченых» процессоров – до такой степени, что они постоянно выпускают и обновляют своё программное обеспечение, специально закрывая все обнаруженные ранее лазейки, позволяющие разгонять «залоченное» оборудование. Такая политика компании вызывает бурю недовольства в рядах энтузиастов, тестирующих их аппаратное оборудование.

Я также должен упомянуть об определённой концепции, известную среди энтузиастов как «кремниевую лотерею». Микроархитектура современных процессоров невероятно сложна, как и процесс их производства. Даже если два процессора имеют одинаковую модель и теоретически должны быть полностью идентичными, то вполне возможно, что они будут разгоняться и работать по-разному. Не расстраивайтесь, если ваш конкретный процессор и вся конфигурация в целом не смогут достичь той же производительности разгона, что получил кто-то, описавший свои результаты в Интернете. Вот почему невероятно важно пройти долгий, трудный процесс самостоятельно, а не просто пытаться подключать чужие настройки – ни один из двух разных процессоров не разгонятся одинаково.

Материнская плата

Теперь необходимо убедиться в том, что ваша материнская плата подходит и имеет нужный функционал для разгона вашего процессора. Технически абсолютно любая материнская плата должна предоставлять возможность разгона своего процессора, но некоторые из них разработаны специально для таких, «разлоченных» процессоров, а некоторые нет. Если вы выбираете какую материнскую плату купить, то могу порекомендовать любую «игровую» материнскую плату или найдите в Интернете информацию, какая плата будет отвечать всем необходимым требованиям для разгона именно вашей модели процессора. Они конечно стоят дороже, чем стандартные модели, но имеют доступ к обновлениям «UEFI / BIOS» и специальному программному обеспечению производителя, разработанному с целью упрощения разгона. Вы также можете часто встречать обзоры оверклокеров, энтузиастов, которые обсуждают настройки, нужные для разгона конкретных моделей процессоров на определённой материнской плате и получаемый прирост производительности. Хорошие решения в этом отношении – это топовые и игровые материнские платы от «ASUS», «Gigabyte», «EVGA» и «MSI».

Это само собой разумеется, но я все равно напомню: вам нужна материнская плата с сокетом, которая совместима с вашим конкретным процессором. Для последних разблокированных процессоров Intel это либо разъем «LGA-1151» (серия K), либо «LGA-2066» (серия X).

Система охлаждения процессора

Даже если вы готовитесь разогнать процессор на существующей конфигурации, которая не была построена с учетом разгона, то всё равно захотите использовать новую систему охлаждения, более мощную чем стоковая. Новые системы работают намного эффективные, чем те что предлагает компания «Intel», они оснащены более крупными вентиляторами и значительно расширенными радиаторами. Фактически, процессоры серии «К» и «Х», могут специально поставляться без системы охлаждения, именно для того что бы вы установили более мощное охлаждение. Весь смысл в том, что чем лучше и качественней охлаждение, тем меньше будет греться ваш процессор, соответственно вы сможете сильнее разогнать его и ещё больше увеличить производительность ПК.

Характеристики новейших систем охлаждения ошеломляют, даже если вы не будете использовать самый премиальный вариант – водяное охлаждение. Даже на версию с воздушным охлаждением можно потратить от 20 до 100 долларов, а цена на водяное охлаждение может доходить до 500 долларов. Но если бюджет ограничен, или вы не желаете тратить слишком много, то существует несколько более-менее экономичных вариантов. Кулер, который мы будем использовать, – это «Cooler Master Hyper 612 V.2», цена на который не превышает 35 долларов и будет входить в большинство полноразмерных ATX-корпусов. Вероятно, мы могли бы получить лучшие результаты с более дорогой и продуманной моделью, но даже это охлаждение позволит нам значительно увеличить наши тактовые частоты, не попадая в небезопасные температурные диапазоны.

Если вы выберете новый кулер, помимо цены вам нужно будет рассмотреть две переменные: совместимость и размер. Как воздушное охлаждение, так и водяное должны поддерживать тип сокета на вашей материнской плате. Воздухоохладители также нуждаются в достаточно большом физическом пространстве, доступном внутри корпуса вашего ПК, особенно в вертикальном положении. Водяное охлаждение не нуждается в большом количестве места вокруг сокета процессора, но оно нуждается в свободном пространстве на боковине корпуса для вентиляторов, чтобы охлаждать поступающую от процессора горячую воду. Перед тем как принимать решение о покупке, нужно тщательно проверить хватит ли места в вашем корпусе, или есть ли место для установки водяного охлаждения. Также удостоверьтесь, что система охлаждения установлена и подключена правильно, вентиляторы крутятся и вода нигде не бежит. Это нужно сделать ещё до того, как вы соберётесь разогнать свой процессор.

Шаг второй: проведите стресс-тест вашей системы

Мы предполагаем, что все настройки, связанные с вашим процессором, установлены по умолчанию. Если нет, то желательно загрузить UEFI вашего компьютера (более известный как BIOS) и сбросить все настройки по умолчанию. Перезагружаем компьютер, нажимаем «DEL» или соответствующую кнопку, которая указана на вашем экране «POST» (на экране с логотипом производителя материнской платы и проверки всех основных систем). Обычно это «Delete», «Escape», «F1» или «F12» в зависимости от производителя.

Где-то в настройках «UEFI / BIOS» должна быть опция, чтобы вернуть все значения по умолчанию. На нашей тестовой машине с материнской платой от «ASUS», нужная нам опция находится в меню «Сохранить и выйти» и обозначена как «Load Optimized Defaults» (Загрузить оптимизированные стандартные настройки). Выберите этот вариант, нажмите клавишу «Enter» и сохраните настройки, затем выйдите из «UEFI / BIOS» и перезагрузите ПК.

Есть еще несколько изменений, которые вам может понадобиться сделать до разгона. На новых процессорах от компании «Intel», чтобы получить более стабильные и прогнозируемые результаты тестов, вам нужно будет отключить опцию «Intel Turbo Boost» для каждого из ядер. Это встроенный стабильный полуразгон от «Intel», который повышает тактовую частоту процессора при интенсивных нагрузках. Это удобная функция, если вы никогда не используете собственных разгон, но в данном случае его лучше отключить, потому что мы надеемся получить увеличение мощности больше, чем может предоставить функция «Turbo Boost». В данным момент мы будем самостоятельно управлять этим процессом.

В зависимости от вашего процессора вы можете отключить опцию «C State» или другие энергосберегающие функции, которые призваны уменьшать производительность процессора, когда его полная мощность не нужна. Однако вы сможете включить их после разгона, и они продолжат работать в штатном режиме. Некоторые сообщения в интернете свидетельствовали о том, что функции энергосбережения не работают после разгона, но в других сообщениях говориться, что они работают нормально.

После того как, все настройки сброшены по умолчанию, а дополнительные функции задушены, загрузитесь в свою основную операционную систему (мы используем ОС Windows, но многие из этих программ также должны работать и с «Linux»). Перед тем, как начать разгон, необходимо провести стандартный стресс-тест своей системы, а полученные результаты будут служить ориентиром и отправной точкой для сравнения увеличения производительности ПК. Для этого вам понадобится специальное программное обеспечение, которое запускает сверх трудоёмкие процессы, и нагружает центральный процессор и другие устройства на максимальном уровне производительности. По сути, оно имитирует наиболее интенсивное использование компьютера, чтобы увидеть, вызовет ли это ошибки и сбои в работе компьютера. То есть проведя этот тест после разгона, мы сможет увидеть на сколько быстрее ПК справился с теми же задачами, и соответственно, на сколько выросла производительность всей системы.

Я буду использовать для стресс-тестов утилиту «Prime95», потому что она крайне проста в использовании, является свободно распространяемой и доступна на трех основных настольных операционных системах. Другие популярные альтернативы включают «AIDA64», «LinX» и «IntelBurnTest». Любая из них справиться со своими функциями, также вы можете использовать комбинацию из двух или нескольких утилит на ваше усмотрение. Если вы хотите быть полностью уверены в стабильность работы системы после разгона процессора, то вам действительно следует использовать несколько утилит, для пущей уверенности (я буду использовать «Prime95» как основную программу для тестов, а также дополнительно проверю систему с помощью «AIDA64»).

Какой вариант бы вы ни выбрали, скачайте ПО из интернета, установите его и запустите. Позвольте ему выполнить свой первоначальный тест, а затем повторите проверку несколько раз, чтобы убедиться, что ваш процессор может обрабатывать расширенные прогоны на 100% и не превышает разрешённую максимальную температуру. Вы даже можете услышать, как вентилятор на вашем кулере процессора поднимает обороты до максимальной скорости, чтобы справиться с повышенной нагрузкой.

В то время как стресс-тесты выполняются, самое время загрузить некоторые другие дополнительные утилиты, которые мы будем использовать немного позже: утилита, предоставляющая информацию о процессоре, чтобы держать вас в курсе ваших изменяющихся значений и программа-монитор температуры процессора для определения насколько высокая температура в данный момент времени. Для ОС Windows мы рекомендуем «CPU-Z» и «RealTemp» соответственно. Загрузите их из интернета и запустите, теперь можно отследить как повышается температура вашего процессора под вашим стресс-тестом.

Показатели температуры будут иметь решающее значение для процесса разгона. При проведении стресс-теста в условиях настроек по умолчанию на нашем процессоре «Intel i7-2600K» мы увидели, что температура на внутренних датчиках колеблется от 49 до 75 градусов по Цельсию. Ваши показатели будут отличаться от моих, потому что вы можете использовать более или менее эффективную систему охлаждения. Звучит жарко, но пока не о чем беспокоиться. Процессоры предназначены для работы при таких высоких температурах с помощью систем охлаждения ПК. Максимальная допустимая температура нашего процессора до того, как он автоматически уменьшит напряжение или отключится (функции «Tmax» или «Tjunction»), составляет 100 градусов Цельсия. При разгоне, нашей целью будет увеличение производительности процессора до такой степени, когда его температура все еще останется на достаточно безопасном уровне, ниже 100 градусов Цельсия, и при этом система продолжит стабильно работать.

Если вы выполнили несколько тестов подряд, с использованием процессора на 100%, и его температура находится в безопасном диапазоне (до 100 градусов), система осталась стабильной, то самое время приняться за разгон.

Шаг третий: поднимите процессорный множитель (CPU Clock Ratio)

Теперь пришло время начать разгон. Перезагрузите компьютер и войдите в «UEFI (BIOS)». Найдите нужную категорию, она может называться как «Overclock Settings». В зависимости от производителя вашей материнской платы, эта категория может называться «CPU Booster» или ещё как-то.

В этом разделе найдите параметр «CPU Clock Ratio» («CPU Multiplier», «CPU Clock Multiplier», «Multiplier Factor», «Adjust CPU Ratio»), также при наведении курсора на этот параметр справа будет показана подсказка.

«CPU Clock Ratio» переводится как множитель процессора. В настоящее время, на материнских платах частота на которой работает процессор определяется с помощью умножения частоты системной шины и специального параметра (собственно этого множителя).

В «UEFI (BIOS)» нашей материнской платы этот параметр можно найти на вкладке «Advanced Frequency Settings» и далее в «Advanced CPU Core Settings».

Тактовая частота определяется двумя параметрами: скоростью шины (100 МГц в нашем случае) и множителем (в нашем случае 34). Умножьте эти два значения между собой, и вы получите тактовую частоту процессора (в нашем случае – 3.4 ГГц).

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

Я установлю значение параметра «CPU Clock Ratio» на 35, всего на один шаг, чтобы увеличить максимальную частоту до 3,5 ГГц. Возможно, вам придется разрешить системе вносить изменения в «UEFI (BIOS)», чтобы «UEFI (BIOS)» позволил изменять множитель.

Как только это будет сделано, сохраните настройки «UEFI (BIOS)» и выйдите, а затем перезагрузитесь в операционную систему. После этого запускаем программу «CPU-Z», чтобы проверить и убедиться, что ваши изменения сохранились и показатель «CPU Multiplier» имеет значение 35, и более высокую частоту.

Примечание: если вы обнаружили более низкие значения для полей «Core Speed» ​​и «Multiplier», то вам может потребоваться запустить стресс-тест заново, чтобы максимально нагрузить процессор и проверить введённые параметры, или, возможно до сих пор работает функция энергосбережения.

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

В какой-то момент вы достигнете определённой точки, при которой компьютер, во время прохождения стресс-теста закончит работу с ошибкой. Либо вы достигнете максимальной температуры процессора, превышать которую не имеет смысла (например, на 10-15 градусов меньше значения использования функции отключения процессора).

Если вы столкнулись с провалом стресс-теста, то перейдите к следующему шагу, но если достигли максимума температуры, то перейдите сразу к пятому шагу.

Шаг четвертый: повторяйте до отказа системы, затем повысьте напряжение

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

Перезагружаем компьютер в «UEFI (BIOS)», находим раздел «Advanced Voltage Settings» и далее «CPU Core Voltage Control». Опять же, у вас названия и значения этих параметров будут отличаться, это зависит от производителя материнской платы и версии «UEFI (BIOS)», информацию об этих параметрах можно найти в мануале к материнской плате или на сайте её разработчика.

Здесь выполняем почти те же самые действия, немного увеличиваем напряжение, потом повторяем шаги два и три, пока ваш компьютер не завершит работу с ошибкой, а затем снова увеличиваем напряжение. Рекомендуемый шаг – 0,05 вольта, опять же крайне мелкие шажки занимают больше времени, но вы получите гораздо более надежные результаты.

В течении процесса выполнения, постоянно следите за температурными показателями, напомню, чем больше вы повышаете напряжение, тем больше будет увеличиваться температура процессора. Если проведённые вами тесты терпят неудачу даже при +2 вольта, то возможно вы просто не сможете увеличить напряжение и добиться стабильной работы системы. Вспомните про «кремниевую лотерею» – возможно, что ваш конкретный процессор не будет вести себя точно так же, как другие с тем же номером модели.

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

В моём случае, я вообще не смог поднять напряжение – самый высокий стабильный разгон составлял 3,7 ГГц.

Шаг пятый: Большой всеобъемлющий тест

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

Заново включите функции энергосбережения и настройте программу стресс-тестирования для проведения непрерывного теста несколько часов подряд. Утилита «Prime95» выполнит это автоматически, для других программ может потребоваться дополнительная настройка параметров времени. Несколько часов, по крайней мере, будем достаточно для достижения самой максимальной температуры процессора при максимальной нагрузке. (Кроме того, если вы живете в широтах с высокой температурой, и у вас не установлено дополнительное охлаждение комнаты, в которой находится ваш ПК, то имейте в виду, что температура окружающей среды также повлияет на максимальный порог разгона в течение лета.) Если ПК завершает работу с ошибкой, или после теста температура процессора опасно приближается к максимально допустимому значению, значит тест провален. Вам потребуется уменьшить значения множителя, напряжения на процессоре и повторить попытку заново, пока тест не окажется пройденным.

Как оптимизировать нагрузку на многоядерный процессор в Windows

Процессоры с количеством ядер, большим одного, появились давно — больше 10 лет назад. Однако до сих пор встречаются программы и игры, которые не умеют использовать несколько ядер одновременно. И хорошо, если производительности одного ядра хватает для работы программы, но в некоторых играх (к примеру, линейки Far Cry) производительности одного ядра уже не хватает: оно постоянно нагружено на 100%, когда другие «прохлаждаются», и из-за этого может страдать fps. На деле это выглядит как-то так:

Если вы столкнулись с чем-то похожим, то распредилить загрузку равномерно поможет бесплатная программа CPU Control (скачать можно, например, здесь). Запустите ее, найдите нужный процесс, нажмите на нем правой кнопкой мыши > All CPUs > максимальное свое число CPU (у меня 4) > 1+2+3+4 (или больше, если у вас больше ядер):

Все, теперь приложение будет использовать все ядра.

Оптимизация работы процессора: утилита CPU Control

В данной публикации пойдет речь еще об одном стороннем инструменте оптимизации работы многоядерных процессоров – бесплатной программе CPU Control. «Еще» – потому, что автор уже касался этой темы, смотрите заметку об ICEAffinity . Детище немецкого разработчика Маттиаса Коча (Matthias Koch), русифицированная утилита CPU Control будет особенно интересна начинающим компьютерным пользователям из-за наличия многопрофильного авторежима оптимизации, но обо всем – по порядку.

/ опубликовано в IT-издании » Компьютерные Вести » № 6 2013 в рубрике «Software» /

» Зачем это надо & что я буду с этого иметь? «

Данный вопрос был затронут в озвученной статье, поэтому дефрагментирую сказанное до пары абзацев:

  • Некоторые приложения не поддерживают многоядерный режим, поэтому для корректной работы необходимо вручную выделить им отдельное процессорное ядро. Другой «проблемный» вариант – материнская плата асинхронно инициализирует ядра. В обоих случаях требуется оперативное вмешательство пользователя.
  • По умолчанию, Windows присваивает всем запускаемым процессам равный приоритет в пользовании процессорных мощностей. Что не совсем правильно в случае запуска ресурсоемких приложений, например, когда вашему любимому Call of Duty «мешает» антивирус вкупе с дюжиной другого «второстепенного» ПО. CPU Control поможет пропорционально разнести процессы по ядрам, что напрямую скажется на общей производительности системы.

Important!

Утилита поддерживает двух- и четырехъядерные процессоры, но, по отзывам, корректно работает и на 6–8 ядрах.

Оптимизируем

1. Для начала необходимо скачать утилиту например отсюда, из моего Каталога лучшего софта . Никаких «хитростей» в установке нет, поэтому последовательно жмем «Next» («Далее«) до полной инсталляции. Кстати, программа не «сорит» в реестре, т.е. портативна и носима на съемных накопителях.

2. После запуска первым делом кликаем на » Options » («Опции«) и русифицируем CPU Control через «Languages» («Языки«) → «Russion«. Далее, в соответствии со следующим скриншотом, ставим галочки напротив » Автозапуск с Windows «, » Минимизировать » и » 4 ядра » (для четырех и более ядер). Понятно, что если ЦП двухъядерный, активировать «4 ядра» без надобности.

3. Закрыв «Опции», в главном окне приложения видим 5 режимов контроля работы ЦП: » Авто «, » Ручной «, » CPU1 » (все процессы выполняются на 1-ом ядре), » CPU2 » (все процессы выполняются на 2-ом ядре) и » Отключено » (без оптимизации). Последние три режима нам не интересны, поэтому сосредоточимся на первых двух.

Для начинающих пользователей автор рекомендует просто выбрать режим « Авто » и, закрыв окно, проверить для будущих загрузок Windows, чтобы CPU Control был в списке автозагружаемых приложений ( ! ). Это легко сделать, например, через Revo Uninstaller любой версии, смотрите в панели меню «Инструменты» → «Менеджер автозапуска» (при необходимости добавить приложение кликаем апплет «Добавить«).

4. Для любителей «покопаться» эта простенькая утилита дает шанс «развернуться»: в авторежиме имеется 9 базовых профилей-вариаций распределения процессов по ядрам (скриншот ниже). При наличии времени и открытом на вкладке «Быстродействие» Диспетчере задач («Ctrl + Alt + Del» ), для мониторинга результатов, можно выбрать оптимальный профиль под свою систему.

5. Самые «продвинутые» пользователи , желающие добиться максимальных результатов в деле повышения производительности системы данным способом, наверняка заинтересуются режимом « Ручной «. В этом режиме вы самостоятельно распределяете процессы по ядрам или группам ядер. Все просто: выделяете процесс(-ы) и через правую клавишу мыши «вешаете» на нужное ядро или комбинацию ядер. Например, при выборе «CPU1» процесс будет «висеть» на первом ядре, при выборе «CPU3+4» – на третьем и четвертом ядрах и т.д.

Вот хороший вариант ранжирования для 4-ядерного ПК: системные процессы оставьте 1-ому ядру, самые ресурсоемкие приложения (типа Photoshop) «распылите» между всеми ядрами (вариант как на последнем скриншоте), а «середнячков» типа антивирусного сканера отдайте в руки комбинации на 2 ядра, скажем, «CPU3+4«. Диспетчер задач Windows поможет сделать правильный выбор. Для удобства мониторинга, при открытой в Диспетчере вкладке «Быстродействие«, проверьте, чтобы была активирована функция » По графику на каждый ЦП » (см. «Вид» → «Загрузка ЦП» → искомое «По графику на каждый ЦП«).

В общем, экспериментируйте и ваши усилия обязательно окупятся сторицей!

Как увеличить производительность процессора на ноутбуке

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

Наиболее «прожорливым» с точки зрения потребления энергии в ноутбуке является центральный процессор (ЦП). Чтобы снизить его быстродействие используются достаточно простые, но очень эффективные методы.

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

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

Внимание! Вследствие тяжёлого режима эксплуатации (ограничения на размеры, малые габариты системы охлаждения, применяемые узкоспециализированные комплектующие и т.д.) время «наработки на отказ» у ноутбуков примерно в три раза меньше, чем у стационарных ПК. То есть среднее время появления первой поломки у ноутов наступает в три раза быстрее, чем у десктопного решения.

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

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

Подготовка к увеличению производительности процессора

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

Оптимизация на программном уровне включает в себя следующие мероприятия:

  1. Отключение или удаление всех неиспользуемых или ненужных программ (например, всякие программы по сбору и отправке информации о работе ПК производителю, различные твикеры, которые никогда не используются, всякие программы-промоушены и т.д.)
  2. Удаление редко используемых программ из автозагрузки.
  3. Очистка жесткого диска ноута с его последующей оптимизацией.
  4. Отключение неиспользуемых или редко используемых служб.
  5. Настройка антивируса на минимальную активность.

Аппаратная оптимизация состоит из:

  • Настройки плана электропитания, обеспечивающего максимальное быстродействие.
  • Увеличения объёма оперативной памяти и оптимизация её режима работы.
  • Замена жесткого диска на более быстродействующий (например, SSD).
  • Установка на ноут более эффективной системы охлаждения.

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

Разгон процессора ноутбука

Разгон процессора ноута может быть выполнен двумя способами:

  1. обычным, обусловленным заводскими настройками;
  2. экстремальным, с использованием различных внешних утилит, позволяющих не только менять частоты и коэффициенты множителя процессора, но и повышать напряжение питания на нём.

Стандартными средствами Windows

Функции разгона с использованием такого способа достаточно просты и не всегда обеспечивают максимальную производительность. Однако их применение гарантировано не приводит к возможным поломкам мобильного ПК.

Для того, чтобы средствами Windows максимально увеличить быстродействие процессора, следует зайти в панели управления в раздел «Электропитание» и выбрать профиль, обеспечивающий максимальное быстродействие системы. Других способов увеличения производительности процессора в стандартных средствах операционной системы не предусмотрено.

Можно попробовать оптимизировать работу ЦП или осуществить его разгон при помощи программы BIOS ноутбука. Однако, как правило, функционал BIOS мобильных систем существенно ограничен. Обычно, в нём можно только настраивать время и функции безопасности системы. Поэтому для более тонкой оптимизации параметров работы мобильного ПК следует использовать стороннее ПО.

Программный способ с помощью специальных утилит

Существует множество утилит, предназначенных для тонкой настройки аппаратных параметров ПК. Подобное ПО увеличивает производительность ЦП и памяти как на ПК, так и на ноутбуке, что позволяет повысить быстродействие системы в целом.

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

Примеры подобных программ:

  • CPUСontrol. Утилита, оптимизирующая работу ЦП без разгона. Позволяет устанавливать для каждого приложения, или для системы в целом, количество используемых ядер, объём оперативной памяти, приоритет использования ЦП и т.д.
  • ClockGen. Утилита, позволяющая менять частоты и напряжения ЦП для осуществления его разгона. Обладает множеством настроек и опций, а также функциями защиты ЦП от перегрева.
  • Специализированные программы, поставляемые производителями ноутов (например, Asus Turbo EVO – твикер для тонкой настройки параметров ноута от фирмы Asus). Позволяют менять настройки быстродействия применительно к узкому кругу устройств, однако, они оптимизированы для более корректной работы с ними.

Уменьшение производительности процессора ноутбука

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

Инструменты Intel для оптимизации приложений и задача о течениях в пористых средах

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

Оптимизации, которые влияют на скорость вычислений при использовании любого числа потоков, сводятся к учёту в коде особенностей процессорных архитектур, наборов инструкций, к поиску наиболее рациональных способов работы с разными видами памяти. Помощь в подобной оптимизации способен оказать, например, подход к исследованию производительности методом «сверху вниз» с использованием низкоуровневых данных о системных событиях, которые преобразуются в доступные для анализа и практического применения высокоуровневые показатели.

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

Моделирование течений многофазных жидкостей в пористых средах

Данная задача находит применение во многих сферах. Например, в области добычи нефти и газа, в промышленности, экологии.

Мы рассмотрим методики векторизации кода, расскажем о переходе от последовательного к параллельному исполнению, проведём ряд экспериментов. Эксперименты проводились на платформах Intel, для анализа и оптимизации приложения применялись различные программные средства, в частности, Intel VTune Amplifier.

Материал состоит из трёх основных разделов:

    В первом мы поговорим об автоматической векторизации кода и проведём эксперименты на системе с процессором Intel Core i5-4350U в однопоточном режиме.

Второй раздел посвящён сравнению однопоточного и двухпоточного исполнения приложения. Здесь мы будем сравнивать скорость работы разных вариантов программы на процессоре Intel Core i7-5500U.

  • Третий раздел посвящён подготовке приложения для исполнения в многопоточной среде. Он включает в себя рассказ об анализе и оптимизации приложения с применением Intel Parallel Advisor. Испытывать код будем на узле вычислительного кластера с 4-мя Intel Xeon E5-2698 v3.
  • Анализ и автоматическая векторизация кода

    ▍Испытательная платформа и набор инструкций Intel AVX2

    Здесь, в качестве аппаратной платформы для экспериментов, используется система на Ubuntu 14.04 с установленным процессором Intel Core i5-4350U (1.4 ГГц, 2 ядра, 4 потока) с 3 Мб кэш-памяти и 4 Гб RAM. Наша экспериментальная среда построена на процессоре, принадлежащем к семейству Intel Haswell, которое отличается полной поддержкой набора инструкций Intel AVX2. Использование возможностей этого набора инструкций, в частности, улучшенная поддержка векторизации, позволяет повысить производительность приложений, предназначенных для широкого спектра платформ, среди них – серверные решениях на базе Intel Xeon и Intel Xeon Phi.

    При разработке для Intel AVX2 используется та же модель программирования, что использовалась в предыдущей версии, Intel AVX, однако, новые инструкции расширяют то, что было, предлагая большинство 128-битных целочисленных SIMD инструкций с возможностью обработки 256-битных чисел. Векторизация кода позволяет раскрыть потенциал однопоточного варианта программы, что крайне важно перед переходом к следующему шагу – параллельному исполнению.

    Для анализа производительности и оценки качества оптимизации здесь использована Intel Parallel Studio XE 2015.

    ▍О выявлении потенциала оптимизации

    Для того, чтобы понять, как оптимизировать код, нужно его проанализировать и найти блоки программы, исполнение которых можно ускорить за счёт векторизации и параллелизации. Для того, чтобы этого достичь, можно воспользоваться инструментами Intel, такими, как Intel VTune Amplifier и Intel Parallel Advisor. Весьма полезны в этом плане и отчёты, которые генерирует компилятор.

    Илон Маск рекомендует:  Микроданные

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


    Современные микропроцессоры реализуют конвейерное исполнение инструкций, и, вместе с этим подходом, используют другие техники, такие, как аппаратные потоки, выполнение команд с изменением их очерёдности, параллелизм на уровне инструкций. Делается всё это для того, чтобы наиболее полно использовать ресурсы системы.

    Перед программистом, который занимается оптимизацией кода, стоит непростая задача. Главная сложность здесь в том, что ему нужно как можно эффективнее использовать аппаратные возможности компьютера, а они находятся на уровне микроархитектуры вычислительной системы, который расположен довольно далеко от уровня абстракции, предоставляемого современными языками программирования, такими, как C, C++ и Fortran.

    Инструменты Intel могут помочь в оптимизации кода, анализируя компиляцию и компоновку приложения, давая сведения о временных параметрах исполнения программы для определения того, как именно используются аппаратные ресурсы. Среди этих инструментов – отчёты компилятора, Intel VTune, Intel Parallel Advisor. Вот как можно организовать работу с ними.

      Анализ отчёта компилятора. Компилятор способен генерировать отчёт, из которого можно узнать, какие автоматические оптимизации были применены к коду, а какие – нет. Иногда, например, некий цикл может быть автоматически векторизован, а иногда этого не происходит. При этом и в том и в другом случае компилятор сообщает об этом, а подобные сведения полезны для программиста, так как они позволяют ему решить, нужно ли его вмешательство в код или нет.

    Анализ с использованием Intel VTune Amplifier. Это средство позволяет наблюдать за тем, как приложение исполняется на конвейере, как оно использует память. Кроме того, с помощью VTune Amplifier можно узнать, какое время занимает исполнение каждого модуля, и то, насколько эффективно при этом задействуются ресурсы системы. Intel VTune Amplifier создаёт высокоуровневую систему показателей, с помощью которых можно всё это анализировать. Среди таких показателей, например, количество тактовых циклов, необходимых на инструкцию.

  • Анализ с помощью Intel Parallel Advisor. Этот инструмент может спрогнозировать ожидаемый рост производительности при переходе к параллелизму на уровне потоков. Кроме того, Parallel Advisor способно помочь в подготовке кода к параллельному исполнению.
  • Программист, скомбинировав данные, полученные с помощью вышеперечисленных средств, может изменить исходный код программы и параметры компиляции для того, чтобы достичь целевых показателей оптимизации.

    ▍Автоматическая векторизация кода

    Современные компиляторы способны векторизовать исполняемый код. В частности, для этого устанавливают параметр оптимизации в значение — O2 или выше. Отключить автоматическую векторизацию можно, используя параметр компилятора –no-vec . Это может быть полезно для сравнения производительности разных вариантов исполняемого кода.

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

    Если этот цикл не подвергся векторизации, то использование регистров при его исполнении выглядит примерно так, как показано на рисунке ниже.

    Использование регистров при исполнении цикла, который не подвергся векторизации

    Если тот же самый цикл векторизовать, будут задействованы дополнительные регистры, как результат, можно будет выполнять четыре операции сложения, используя одну инструкцию. Это называют «один поток команд – много потоков данных» (Single Instruction Multiple Data, SIMD).

    Исполнение векторизованного цикла

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

    В приложении моделирования потока в пористых средах, оптимизацией которого мы занимаемся, автоматическая векторизация позволила повысить производительность в два раза на процессоре семейства Haswell, который поддерживает набор инструкций Intel AVX2.

    Параметр — xHost указывает компилятору на то, что он должен генерировать исполняемый код, соответствующий архитектуре системы, на которой выполняется компиляция. В случае, когда такой системой является компьютер с процессором семейства Haswell, использование этого параметра гарантирует применение инструкций Intel AVX2.

    На рисунке ниже показан сводный отчёт Intel VTune Amplifier по программе, скомпилированной без использования параметра — xHost . Здесь время исполнения составило 186,6 секунд, количество тактовых циклов на инструкцию (Clocks per Instruction, CPI) – примерно 0.5, число выполненных инструкций – 1.067.768.800.000.

    Отчёт VTune Amplifier, параметр -xHost не используется

    Основная цель оптимизации в данном случае заключается в уменьшении времени исполнения кода и увеличении CPI, который, в идеале, должен составлять 0.75, что означает полное использование возможностей конвейера.

    На рисунке ниже показан список модулей приложения, отсортированный по эффективно используемому машинному времени.

    Список модулей приложения

    Обратите внимание на то, что функция vizinhanca создаёт максимальную нагрузку на систему, используя порядка 20% времени процессора. Эта функция занята пошаговым расчётом параметров пористости, проницаемости, скоростей, потока в каждом элементе и во всех его соседних элементах в моделируемой среде.

    Обратите внимание на то, что CPI очень плох у функции fkt , которая занята расчётом параметров потока на заданном шаге по времени. Эта функция вызывает функцию vizinhanca .

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

    Фрагмент ассемблерного кода линейной реконструкции

    В этом фрагменте кода можно видеть следующие инструкции: MULSD, MOVSDQ, SUB, IMUL, MOVSXD, MOVL, MOVQ, ADDQ. Все они из набора инструкций Intel Streaming SIMD Extensions 2 (Intel SSE2). Эти «старые» инструкции появились с выходом в ноябре 2000-го года процессора Intel Pentium 4.

    Скомпилировав тот же самый код с параметром –xHost , который указывает компилятору на то, что нужно сгенерировать исполняемый код для архитектуры используемой системы, и проанализировав его исполнение с помощью Intel VTune Amplifier, мы получили следующее.

    Отчёт VTune Amplifier, параметр -xHost используется

    А именно, время исполнения кода теперь составило 65.6 секунд, CPI – 0.62, что гораздо лучше, чем было раньше и ближе к идеальному значению 0.75.

    Для того, чтобы понять причину подобного роста производительности, можно взглянуть на ассемблерный код. Там обнаружатся инструкции из набора команд Intel AVX2. Кроме того, сравнивая отчёты VTune Amplifier, можно заметить, что при использовании Intel AVX2 число выполненных инструкций гораздо меньше, чем в случае с применением SSE2 в невекторизованной версии кода.

    Это происходит из-за того, что в итоговых данных не учитываются инструкции, исполнение которых было отменено, так как они находились в ветке, по которой не должно было пойти исполнение кода из-за неверного предсказания ветвлений. Меньшее число подобных ошибок так же объясняет улучшение параметра CPI.

    Вот тот же фрагмент исходного кода, который мы рассматривали выше, но теперь его ассемблерное представление получено после включения параметра — xHost .

    Фрагмент векторизованного ассемблерного кода линейной реконструкции

    Обратите внимание на то, что большинство инструкций здесь – векторные, из набора Intel AVX2, а не из SSE2. Имена векторных инструкций начинаются с префикса V .

    Например, использование инструкции VMOV вместо MOV указывает на то, что мы имеем дело с векторизованным кодом.

    На рисунке ниже вы можете видеть сравнение регистров для наборов инструкций Intel SSE2, AVX и AVX2.

    Регистры и наборы инструкций

    Простой в применении подход с включением автоматической векторизации позволяет достичь трёхкратного роста производительности.

    ▍Поиск проблемных участков кода

    В системе, с которой мы экспериментируем, на двух физических ядрах могут исполняться 4 потока. Сейчас единственное сделанное улучшение кода – это автоматическая векторизация, выполненная компилятором. Мы пока далеки от программы, которая способна работать на пределе возможностей системы, код ещё можно оптимизировать. Для того, чтобы продолжить улучшение кода, нужно выявить его узкие места. Например, в исходном варианте нашего приложения имеется множество строк, где используется деление.

    Опция –no-prec-div указывает компилятору на то, что операции деления нужно заменить на операции умножения на обратные величины. Этой возможностью мы воспользуемся в ходе оптимизации нашего приложения.

    Вот фрагмент исходного кода, где часто используется операция деления. Этот код находится внутри функции udd_rt , которая, по данным ранее проведённого анализа, представляет собой одно из узких мест.

    Множество операций деления в важном участке кода

    Однако, у опции –no-prec-div имеется одна проблема. Иногда после этой оптимизации полученные значения не так точны, как при использовании обычного деления по стандарту IEEE. Если для целей приложения важна точность, используйте эту опцию для отключения оптимизации, что приведёт к более точным результатам с некоторым падением производительности.

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

    С использованием опций –ipo , –xHost и –no-prec-div общее время исполнения программы снизилось ещё сильнее, до 53.5 секунд.

    Результат использования опций –ipo, -xHost и –no-prec-div

    Для того, чтобы лучше понять вклад в производительность программы, который вносит использование опции –no-prec-div , было проведено испытание с отключением этой опции. В результате время исполнения выросло до 84.324 с. Это означает, что данная опция даёт примерно 1.5-кратный прирост производительности.

    Ещё одно испытание, на этот раз с отключённой опцией –ipo , показало, что время исполнения возросло до 69.003 с. Это позволяет говорить о том, что данная опция даёт примерно 1.3-кратный прирост производительности.

    ▍Использование Intel VTune Amplifier General Exploration для выявления ограничений процессора и памяти

    Intel VTune Amplifier может не только сообщать о времени, затраченном на исполнение программы, о CPI, и о том, сколько инструкций было выполнено. Используя его профиль General Exploration, можно получить сведения о поведении программы внутри конвейера процессора и выяснить, можно ли улучшить производительность, если учесть ограничения процессора и памяти.

    Ограничения вычислительного ядра (Core Bounds) относятся к проблемам, не связанным с передачей данных в памяти и воздействуют на производительность при исполнении инструкций с изменением их порядка или при перегрузке операционных блоков. Ограничения памяти (Memory Bounds) способны вызвать неэффективную работу конвейера из-за необходимости ожидания завершения инструкций загрузки/сохранения данных. Вместе два этих параметра определяют то, что называют Back-End Bounds, этот показатель можно воспринимать как ограничения, возникающие внутри конвейера.

    Если же простои конвейера вызваны незаполненными слотами, то есть, тем фактом, что микрокоманды не успевают поступать в него по каким-либо причинам, и часть конвейера не выполняет полезной работы только потому что ей нечего обрабатывать, перед нами уже так называемые Front-End Bounds – внешние по отношению к конвейеру ограничения.

    Вот схема типичного современного конвейера, поддерживающего исполнение кода с изменением последовательности команд.

    Конвейер процессора Intel, поддерживающий исполнение инструкций с изменением их порядка

    Внутренние структуры, back-end конвейера, представляют собой порты для доставки инструкций к ALU, к блокам загрузки и сохранения. Несбалансированное использование этих портов обычно плохо сказывается на производительности, так как некоторые блоки могут либо простаивать, либо использоваться не так равномерно, как другие, которые оказываются перегруженными.

    Для приложения, которое мы здесь рассматриваем, анализ показал, что даже при использовании автоматической векторизации, выполняемой компилятором, имеются проблемы при исполнении кода. А именно – высокое значение показателя Core Bound из-за несбалансированного распределения инструкций по портам.

    Ограничения вычислительного ядра

    Результаты анализа, показанные на рисунке выше, указывают на высокий уровень тактовых циклов (0.203, или 20.3%), в которых не задействован ни один порт. Это говорит о неэффективном использовании ресурсов процессора. Кроме того, заметен высокий уровень циклов (0.311, или 31.1%), когда задействованы три или более порта. Такая ситуация приводит к перегрузке. Очевидно, перед нами несбалансированное использование ресурсов.

    Результаты анализа ситуации, выполненные в Intel VTune Amplifier и показанные на рисунке ниже, позволяют обнаружить причины вышеописанных проблем. В данном случае видны четыре функции ( fkt , udd_rt , xlo , и xmax_speed ), у которых слишком высок показатель Back-End Bound. Кроме того, функция xmax_speed отличается слишком высоким уровнем неправильных предсказаний (показатель Bad Speculation). Не всё благополучно и в модуле transport .

    Анализ показателей Back-End Bound и Bad Speculation

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

    Анализируя каждую функцию, которая имеет высокий показатель в графе Back-End Bound, можно выяснить, где именно возникают проблемы. На нескольких рисунках, приведённых ниже, можно видеть, что Intel VTune Amplifier показывает исходный код и соответствующие метрики для каждой строки. Среди них – успешно завершённые инструкции (Retiring), ошибки предсказаний (Bad Speculation), такты (Clockticks), CPI, ограничения внутри конвейера (Back-End Bound). В общем случае, высокое значение показателя Clockticks указывает на ответственные строки кода и VTune выделяет соответствующие им значения.

    Вот анализ функции transport , отличающейся высоким показателем Back-End Bound.

    Анализ причин высокого значения показателя Back-End Bound в функции transport

    Функцию fkt так же можно отнести к разряду ответственных. Она вызывает функции g и h для вычисления потока и функцию udd_rt для вычисления насыщения начального элемента сетки. Аналитические данные по этой функции показаны на рисунке ниже.

    Анализ функции fkt

    Вот код функций g и h , которые вызывает функция fkt .

    Здесь важно обратить внимание на то, что здесь идёт речь о двумерных компонентах вектора F , который представляет поток сохраняющейся величины s в соответствии со следующим выражением.

    Функция xlo , которая находит общую подвижность, в соответствии с подвижностью воды и нефти, так же отличается высоким показателем Back-End Bound. Вот её анализ.

    Вот анализ функции xmax_speed , которая вычисляет максимальную скорость в направлении x . Эта функция так же вносит немалый вклад в общий уровень показателя Back-End Bound.

    Intel VTune Amplifier использует данные о функциях, анализ которых мы провели выше, для нахождения итогового показателя Back-End Bound.

    Как уже было сказано, причиной возникновения такого рода ограничений может являться неэффективное использование процессора или памяти. Так как автоматическая векторизация уже была применена к нашему коду, весьма вероятно, что причина возникшей ситуации – в памяти. Дальнейший анализ, а именно, рассмотрение показателя Memory Bound, данные по которому приведены ниже, позволяет говорить о том, что программа неэффективно использует кэш первого уровня (показатель L1 Bound).

    Показатель Memory Bound

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

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

    Для того, чтобы обнаружить больше возможностей оптимизации кода посредством векторизации, следует воспользоваться отчётами компилятора, так как в них можно найти сведения о циклах, которые можно векторизовать. Модуль MTRANSPORT стал центральным объектом анализа, так как в нём сосредоточен значительный объём вычислений.

    Некоторые внешние циклы не векторизуются из-за того, что соответствующие внутренние циклы уже векторизованы благодаря описанной выше методике автоматическое векторизации. В подобной ситуации компилятор выдаёт такое сообщение:

    В некоторых случаях компилятор указывает разработчику на то, что для векторизации цикла ему следует воспользоваться директивой SIMD, но, когда это сделано, цикл всё равно не векторизуется из-за того, что в нём выполняется присвоение скалярной переменной:

    Вот соответствующее сообщение компилятора:

    Большая часть циклов была автоматически векторизована компилятором, и в некоторых случаях потенциальный рост производительности, оценённый компилятором, варьировался от 1.4 (большинство циклов) до 6.5 (такой показатель получен лишь для одного цикла).

    Когда компилятор обнаруживает, что после векторизации производительность падает (то есть, рост производительности составляет меньше, чем 1.0), векторизацию он не проводит. Вот один из примеров сообщения компилятора в подобной ситуации.

    Реально же производительность после автоматической векторизации выросла примерно в три раза, в соответствии с оценённым компилятором средним значением.

    Анализ причин, по которым компилятор не выполняет векторизацию некоторых циклов, следует провести до применения других методов оптимизации.

    ▍Эксперименты с различными размерами сетки

    Все тесты, которые проводились до настоящего момента, выполнялись в применении к решению задачи, пространство которой представляет собой сетку размером 100x20x100, при этом проводится 641 шаг вычислений с использованием одного вычислительного потока.

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

    Сетка Время исполнения без векторизации Время исполнения с векторизацией Рост производительности Количество шагов
    100×20×100 186,628 53,590 3,4 641
    50×10×50 17,789 5,277 3,4 321
    25×5×25 0,773 0,308 2,5 161
    10×2×10 0,039 0,0156 2,5 65

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

    Ниже мы рассмотрим сетки большего размера для того, чтобы проверить эту гипотезу.

    Переход от одного потока к двум

    ▍Испытательная платформа

    После того, как код векторизован, к нему применены автоматические, и, если это возможно, полуавтоматические методы оптимизации, можно заняться рассмотрением вопроса о том, насколько ускорится работа приложения при исполнении его в многопоточной среде. Для этой цели в данном разделе представлены результаты эксперимента по сравнению производительности приложения при использовании одного и двух потоков. Изучать приложение мы будем с помощью Intel VTune Amplifier.

    Тесты, о которых здесь пойдёт речь, выполнены на системе, которая отличается от той, с которой мы экспериментировали ранее. На этом компьютере установлена Ubuntu 14.04.3 LTS, он оснащён процессором Intel Core i7-5500U (2.4 ГГц, 4 Мб кэш-памяти) с двумя ядрами и с поддержкой технологии HT (до четырёх одновременно исполняемых потоков). Этот процессор принадлежит к семейству Intel Broadwell, он полностью поддерживает набор инструкций Intel AVX2. В компьютере имеется 7.7 Гб оперативной памяти.

    Процессоры семейства Broadwell производятся с использованием 14-нанометрового техпроцесса, развивая микроархитектуру Haswell. В стратегии «тик-так» («tick-tock»), которую использует Intel, это семейство относится к фазе «тик», то есть, это шаг, на котором уменьшен техпроцесс и произведены некоторые улучшения микроархитектуры, представленной ранее.

    ▍Однопоточное исполнение

    Для анализа производительности программы воспользуемся Intel VTune XE 2020. Первый эксперимент заключается в однопоточном исполнении кода, скомпилированного с использованием параметров –ipo , –xHost и –no-prec-div . Такие настройки соответствуют тем, которые использовались ранее.

    Расчёты с выполнением 641 шага для той же самой сетки размером 100x20x100, заняли 39.259 секунд, что означает рост производительности в сравнении с процессором семейства Haswell примерно в 1.4 раза. Вот часть отчёта об этом эксперименте из Intel VTune Amplifier.

    Отчёт Intel VTune Amplifier

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

    Из отчёта видно, что показатель Back-End Bound оставляет 0.375. Это указывает на то, что даже увеличение тактовой частоты процессора не спасает в ситуации, когда причины неэффективного использования ресурсов системы не устранены.

    На следующем рисунке показаны развёрнутые данные по показателю Back-End Bound.

    Анализ отчёта Intel VTune Amplifier

    Здесь видно, что причиной высокого значения обобщённого показателя Back-End Bound являются ограничения ядра (показатель Core Bound), а именно – задержки в блоке деления (Divider). Есть и другие проблемы, не связанные с блоком деления, на них указывает показатель Port Utilization. Этот показатель позволяет понять, насколько эффективно используются порты исполнения внутри ALU. Высокое значение Core Bound – это отражение последовательности запросов к модулю исполнения или следствие недостатка параллелизма на уровне инструкций в коде. Задержки в работе процессора могут указывать, кроме прочего, на неоптимальное использование порта исполнения. Например, операция деления, довольно ресурсоёмкая, может задержать исполнение, увеличивая потребность в порте, который обслуживает специфические типы микрокоманд. Это, как следствие, это приведёт к малому числу портов, задействованных в тактовом цикле.

    Вышесказанное указывает на то, что код должен быть улучшен для того, чтобы избежать зависимости от данных. Здесь нужно применить более эффективный подход, нежели уже использованная автоматическая векторизация.
    На рисунке ниже показан один из этапов анализа причин высокого значения показателя Back-End Bound, в частности, функции, которые вносят наибольший вклад в падение производительности, находятся в верхней части списка и выделены. Мы уже сталкивались с этими функциями.

    Анализ в Intel VTune Amplifier

    Сейчас можно сделать вывод о том, что даже при увеличении частоты процессора узкие места кода никуда не деваются, или проявляются в новых участках программы из-за исполнения команд с изменением их очерёдности и более высокой потребности в вычислительных ресурсах из-за более высокой скорости расчётов.

    ▍Исполнение с использованием двух потоков

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

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

    Вот сводный отчёт Intel VTune после проведения эксперимента.

    Отчёт Intel VTune

    Здесь исполняется тот же код, который мы рассматривали выше, единственная разница заключается в том, что переменная среды OMP_NUM_THREADS была установлена в значение 2. Код работает примерно в 1.8 раза быстрее, но показатель Back-End Bound всё ещё высок и у данной ситуации те же причины, о которых мы говорили выше.

    Вот подробный анализ происходящего. Здесь видны те же узкие места, что и ранее, к ним, кроме того, добавился высокий уровень параметра Bad Speculation у функции xlo и высокий уровень показателя Retiring у функции xlw .

    Анализ в Intel VTune Amplifier

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

    Когда увеличивается число потоков, начинают проявляться зависимости по данным между ними, что может вызвать неудачные предсказания. Это ведёт к отмене исполнения в ходе работы конвейера, который реализует методику исполнения команд с изменением порядка. Увеличение показателя CPI Rate в функции xlw указывает на то, что параллелизм немного улучшил использование слотов.

    Вот трафарет, который задействован в применяемом численном методе решения уравнений, его использование и ведёт к зависимости по данным между потоками при параллельном исполнении программы.

    Сетка конечных элементов

    Каждый элемент «O» в сетке, используемый в этом методе, зависит от данных, поступающих от четырёх соседних элементов: левого, правого, верхнего и нижнего. Участки, выделенные светло-серым цветом – это области, используемые и элементом, и его соседями. Тёмно-серый цвет указывает на области, используемые элементом и другими двумя его соседями. Точки xl, xln, xlc, xr, xrn, xrc, yun, yu, yuc, ydc, yd и ydn – это данные, которыми пользуются расположенные рядом элементы и здесь видно возможное узкое место для параллельного исполнения, так как данные приходится пересылать между параллельными потоками, а это значит, что в транспортном модуле должны быть реализованы методы синхронизации с помощью барьеров OpenMP.

    Для того, чтобы узнать, влияет ли размер задачи на ускорение, вызванное параллельным исполнением, были проверены другие размеры сеток. Вот результаты испытаний.

    Сетка Время исполнения, один поток Время исполнения, два потока Рост производительности Количество шагов
    100×20×100 39.259 21.429 1.83 641
    50×10×50 2.493 1.426 1.74 321
    25×5×25 0.185 0.112 1.65 161
    10×2×10 0.014 0.015 0.94 65

    В ходе эксперимента не было обнаружено значительной разницы в однопоточной и двухпоточной производительности для маленьких сеток. Однако, здесь особо выделяется самая маленькая сетка, 10x2x10, которая отличается очень малым объёмом вычислений. Время, необходимое на проведение расчётов при использовании двух потоков, выше, чем в однопоточном варианте. Здесь, учитывая малый размер задачи, проявляются дополнительные затраты времени на работу механизмов OpenMP, в частности, на создание и уничтожение потоков.

    Вот отчёт Intel VTune Amplifier, касающийся исполнения задачи с самой маленькой сеткой в однопоточном режиме.

    Отчёт Intel VTune, 1 поток

    Вот – тот же анализ, но уже для двух потоков.

    Отчёт Intel VTune, 2 потока

    Обратите внимание на то, что в однопоточном режиме показатель Front-End Bound равен нулю, а Back-End Bound – единице. А при использовании двух потоков первый равняется единице, а второй – нулю.

    Работа в многопоточной среде

    ▍Рекомендации по многопоточному исполнению из Intel Parallel Advisor

    Intel Parallel Advisor – это полезный инструмент, который помогает предсказывать и анализировать воздействие на программу распараллеливания. Это средство находит наиболее нагруженные фрагменты кода и оценивает ускорение, которого можно достичь при многопоточном исполнении программы.

    Использование Intel Parallel Advisor состоит из четырёх шагов:

    1. Обзорный анализ.
    2. Анализ с добавлением аннотаций.
    3. Анализ эффективности.
    4. Анализ корректности.

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


    Intel Parallel Advisor

    Intel Parallel Advisor выводит такие сведения, как время, проведённое в каждой функции, тип цикла (векторный или скалярный), используемый набор инструкций (Intel AVX, AVX2, SSE и так далее). Те же сведения выводятся в нижней части рисунка, но уже в виде древовидной структуры, показывающей взаимоотношения между вызывающими и вызываемыми модулями. Это даёт возможность оценить поведение модулей, даёт сведения о возможных проблемах на уровне микроархитектуры процессора, помогает выявить наиболее нагруженные циклы, от распараллеливания которых можно получить серьёзный прирост производительности. В данном случае главный цикл функции ktdd_rt , внутри модуля transport , который потребляет 98% процессорного времени, показан в верхней части рисунка.

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

    На данном этапе нужно выявить части циклов или функций, которые используют значительное количество процессорного времени, особенно те, которые могут работать независимо, и обработку которых можно распределить по нескольким ядрам. Аннотации – это, в зависимости от используемого языка программирования, либо вызовы функций, либо макросы, которые могут быть обработаны компилятором. Сами по себе, аннотации не влияют на исполнение программы, с ними она будет работать так же, как и без них.

    Добавляемые в код аннотации позволяют отметить области, которые предлагается распараллелить. Эти области Parallel Advisor подвергнет подробному анализу. Вот три основных типа аннотаций.

      Аннотации для выделения параллельных областей (parallel site) позволяют отметить границы участка кода, содержащего одну или несколько задач. Эти участки при переходе к распараллеленному коду будут исполняться в отдельных потоках.

    Аннотации для выделения параллельных задач (parallel task) используются для выделения отдельных задач внутри параллельной области. Каждая задача, встречающаяся в ходе исполнения параллельной области, воспринимается как код, который может быть исполнен одновременно с другими задачами и оставшимся в области кодом. При преобразовании программы к параллельному виду задачи будут исполняться одновременно. Другими словами, каждый экземпляр кода задачи может быть запущен параллельно на разных ядрах и множество экземпляров этого кода так же исполняется параллельно с множеством экземпляров любых других задач внутри той же самой параллельной области.

  • Аннотации блокировки синхронизации (locking synchronization) позволяют защитить области программы, в которых требуется доступ нескольких экземпляров параллельно исполняемого кода к одним и тем же данным.
  • Вот какие аннотации были добавлены в наш код.

    Первая выделенная область включает в себя вызов функции maxder . Вторая – цикл, который занят расчётом поля скорости для каждого конечного элемента в сетке.

    После размещения аннотаций можно проанализировать возможный прирост производительности при исполнении кода в многопоточной среде, выполнив анализ эффективности. На рисунке ниже показана оценка производительности кода из первой выделенной области (помеченной как principal ) при использовании разного числа потоков. А именно, в левой части отчёта можно видеть графическое представление прогноза влияния числа потоков (до 32-х) на производительность. Здесь можно видеть, что предсказанная зависимость линейна.

    Анализ эффективности исполнения области principal в Intel Parallel Advisor

    Вот такой же анализ для области loop2 , но уже выполненный для 64-х потоков.

    Анализ эффективности исполнения области loop2 в Intel Parallel Advisor

    В результате, для четырёх параллельных потоков OpenMP (параметр CPU Count установлен в значение 4) Intel Parallel Advisor предсказал возможный рост производительности в 2.47 раза для области «principal» и в 2.5 раза для «loop2». Нужно заметить, что для того, чтобы получить оценку, справедливую для всего приложения, следует аннотировать другие нагруженные части кода.

    ▍Испытательная платформа

    Для того, чтобы узнать, насколько быстро может исполняться наш код, мы провели испытания на узле кластера, состоящего из четырёх процессоров Intel Xeon E5-2698 V3 (2.3 ГГц, 40 Мб кэш-памяти).

    ▍Исследование приложения в многопоточной среде

    Мы исследовали задачу с размером сетки 100x20x100 и 200x40x200 для того, чтобы выяснить, как производительность разных вариантов приложения зависит от числа потоков. Выше мы анализировали код в Intel Parallel Advisor, который предсказал, что линейного роста производительности можно ожидать при использовании до 32-х потоков. Здесь же мы это предсказание проверим на практике.

    Наш код может нормально работать до тех пор, пока для его исполнения используются до 47 потоков. Если их больше, возникает ошибка сегментации. Причина возникновения этой ошибки пока не найдена.

    Задача с первой сеткой (100x20x100) показывала линейную зависимость производительности от числа потоков до тех пор, пока их число не превысило 25. Это можно видеть на рисунке ниже. После этого наблюдается падение производительности, а дальше рост продолжается, и на 32-х потоках показатель производительности достигает той же величины, что и на 25. После 32-х потоков производительность ведёт себя похожим образом – сначала падает, потом снова растёт.

    Зависимость производительности от числа потоков, сетка 100x20x100

    В результате на графике зависимости производительности от числа потоков можно выделить три области: от 1 до 25 потоков, от 26 до 32, и от 33 до 47. Подобное поведение, вероятнее всего, может быть вызвано двумя причинами. Первая – особенности многопоточного исполнения кода и технологии Intel Hyper-Threading. Вторая – так называемый NUMA-эффект.

    Способ организации памяти NUMA (Non Uniform Memory Access) предлагает решение задачи масштабирования в архитектуре SMP, но, из-за проблем с доступом к памяти, способен стать узким местом производительности.

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

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

    Узел кластера, на котором проводятся испытания, включает в себя четыре процессора, каждый из них подключён к собственному блоку памяти. Как результат, в подобной среде возможно возникновение NUMA-эффекта.

    Как было сказано выше, одна из причин необычного поведения программы в многопоточной среде заключается в особенностях технологии Intel Hyper-Threading.

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

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

    Вот, что по этому поводу, с использованием в качестве демонстрации вышеприведённого рисунка, говорится в данном материале. «Перед нами – пример того, как можно улучшить производительность вычислений с использованием технологии Intel HT. 64-битные процессоры Intel Xeon имеют по четыре исполнительных блока на ядро. Если технология Intel HT выключена, ядро может выполнять только инструкции из потока №1 или из потока №2. Как и ожидается, в течение многих тактовых циклов некоторые исполнительные блоки простаивают. Если же включить HT, процессор может обрабатывать инструкции из двух потоков одновременно. В данном примере использование HT позволило сократить требуемое число тактовых циклов с 10 до 7».

    Сокращение необходимых тактовых циклов с 10 до 7 даёт прирост производительности примерно в 1.5 раза.

    Вот результаты испытаний второй сетки (200x40x200). Здесь выполняется расчёт 1281 шага, эта задача в 1000 раз больше предыдущей (с сеткой 100x20x100), что делает её гораздо более ресурсоёмкой.

    Зависимость производительности от числа потоков, сетка 200x40x200

    График показывает, что зависимость производительности от числа потоков близка к линейной лишь до тех пор, пока это число не превысит 16. Как и в предыдущем случае, на графике можно выделить три области. При использовании от 1 до 16 потоков и от 19 до 32-х наблюдается рост производительности при увеличении числа потоков. Последующее увеличение числа потоков прироста в производительности почти не даёт.

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

    Вот сведения о времени в секундах, необходимом для решения наших задач с использованием разного числа потоков.

    Задача с сеткой 100x20x100

    Задача с сеткой 200x40x200

    Для достижения большего выигрыша в производительности можно провести другие испытания, с более высокой нагрузкой. Закон Амдала указывает на то, что ускорение программы, возможное от её распараллеливания, ограничено размером той её части, которая исполняется последовательно. Это означает, что вне зависимости от количества областей программы, которые можно исполнять параллельно и количества потоков, общий рост производительности ограничен той частью программы, которую распараллелить не удаётся.

    Илон Маск рекомендует:  Asp компонент tools

    В нашем случае, для испытаний, о которых речь пойдёт ниже, число расчётных шагов было увеличено благодаря уменьшению числа Куранта (Cr) c 0.125 до 0.0125. Это привело к тому, что общее время расчётов составило более 19 часов. Для задачи с сеткой 100x20x100 число шагов возросло с 641 до 6410, для задачи размера 200x40x200 – с 1281 до 12810. Объём вычислений, и в том и в другом случае, возрос в 10 раз, так как Cr было уменьшено в 10 раз.

    Вот каковы результаты испытаний для меньшей задачи.

    Задача с сеткой 100x20x100, Cr = 0.0125

    Можно заметить, что производительность линейно росла до тех пор, пока число потоков не достигло 34-х. Это близко к числу используемых физических ядер в узле кластера. А именно, здесь имеется 4 процессора с поддержкой технологии HT, в каждом задействованы 9 ядер. Здесь происходит то же самое, что и в ранее проведённых тестах: технология Hyper-Threading в задаче, выполняющей интенсивные вычисления, не может обеспечить дальнейший рост производительности.

    Несмотря на это, что отличает данное испытание от предыдущего исследования той же задачи, здесь наблюдается практически линейный рост производительности до тех пор, пока число потоков не превысит число используемых физических ядер. Результаты указывают на то, что при более высоких рабочих нагрузках код эффективнее использует возможности многоядерной архитектуры, но здесь всё ещё остаётся один вопрос. Он относится к ранее проведённому испытанию задачи с сеткой 200x40x200, которая отличается более высокой рабочей нагрузкой, нежели задача меньшего размера, но при этом рост производительности происходил лишь до тех пор, пока число потоков не достигло 16. Какая именно нагрузка на процессор позволит занять его работой, при выполнении которой с добавлением новых потоков продолжится рост производительности?

    Увеличить рабочую нагрузку, в применении к нашей задаче, можно двумя путями. Первый – использовать более плотную сетку, в которой имеется большее число точек, и, таким образом, больше конечных элементов внутри областей. Второй – использовать больше шагов вычислений, чего можно достигнуть за счёт большего времени проведения симуляции или благодаря уменьшению Cr. На предыдущем рисунке, для задачи с сеткой 100x20x100, объём вычислений возрос благодаря увеличению числа шагов по времени. При этом время, необходимое для решения задачи с использованием одного потока, составило 403,16 секунд, а при использовании 36 потоков – 14,22 секунды, что указывает на примерно 28-кратный рост производительности.

    Другой подход, который заключается в том, что увеличивается и число шагов по времени, и плотность сетки, показан на рисунке ниже. Здесь общее время решения задачи с применением одного потока составило 6577,53 секунды. Когда в работу включились 36 потоков, время расчётов сократилось до 216,16 секунд, то есть, производительность выросла примерно в 30 раз.

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

    Задача с сеткой 200x40x200, Cr = 0.0125

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

    Сетка 100×20×100 Сетка 200×40×200
    Cr = 0.125 Нелинейный рост Нелинейный рост
    Cr = 0.0125 Линейный рост Линейный рост

    Как уже было сказано, выяснено, что увеличение числа расчётных шагов (за счёт уменьшения Cr) позволяет добиться лучшего роста производительности, уменьшая долю времени, затрачиваемого на доступ к кэш-памяти, к которой процессор не подключён напрямую, а значит – уменьшая NUMA-эффект. Этот результат позволяет спрогнозировать, какие задачи удастся эффективно решать на системах с многоядерными процессорами, такими, как Intel Xeon Phi.

    Итоги

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

    Исследовав нашу программу с помощью инструментов Intel, мы выяснили, что размер задачи влияет на динамику производительности. Так, автоматическая векторизация уменьшает время исполнения примерно в 2.5 раза на небольших задачах, и примерно в 3 раза – на задачах более крупных.

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

    Ещё один важный вывод, который сделан в ходе нашего исследования, относится к многопоточному (OpenMP) исполнению кода, который показал, что при использовании двух потоков можно достичь роста производительности примерно в 1.8 раз, даже несмотря на то, что код ещё можно оптимизировать.

    Анализ с использованием Intel Parallel Advisor выявил, что, в потенциале, возможно 32-кратное ускорение кода, но тесты, проведённые на узле вычислительного кластера, показали, что линейный рост производительности при увеличении числа потоков наблюдается лишь при использовании 25 или 16 потоков в задачах разного размера. Эти различие между прогнозами Parallel Advisor и результатами испытаний, вероятнее всего, вызваны NUMA-эффектом и особенностями технологии Hyper-Threading.

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

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

    Оптимизация для pentium процессора

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

    аббревиатура имя
    PPlain обычный старый Pentium
    PMMX Pentium с MMX
    PPro Pentium Pro
    PII Pentium II (включая Celeron’ы и Xeon’ы)
    PIII Pentium III (включая его разновидности)

    В данном руководстве используется синтаксис MASM 5.10. Для языка ассемблера x86 не существует официального стандарта, но это фактически является стандартом, так как многие ассемблеры имеют режим совместимости с MASM 5.10. (Я не рекомендую использовать сам MASM версии 5.10, так как в нем есть серьезный баг, проявляющийся в 32-х битном режиме. Используйте TASM или более позднюю версию MASM).
    Некоторые замечания в данном руководстве могут показаться критикой Intel. Это не нужно понимать, что другие марки лучше. Семейство микропроцессоров Pentium вполне сравнимы со своими конкурентами, они лучше документированы и у них есть другие отличительные особенности.
    Программировать на ассемблере гораздо сложнее, чем на языке высокого уровня. Сделать ошибку очень легко, а найти ее очень трудно. Вы были предупреждены! Предполагается, что у читателя уже есть опыт в программировании на ассемблере. Если нет, пожалуйста, прочитайте соответствующие книги по этому теме и наберитесь определенного опыта в программировании, прежде чем вы начнете выполнять сложную оптимизацию.
    Архитектура чипов PPlain и PMMX имеет много особенностей, которые оптимизированы специально под некоторые наиболее часто используемые инструкции или комбинации инструкций. В этих случаях нельзя использовать общие методики оптимизации. Следовательно, правила для оптимизирования программного обеспечения весьма сложны и имеют много исключений, но возможный выигрыш в производительности значителен. У процессоров PPro, PII и PIII совершенно разный дизайн в том, как процессор берет на себя часть оптимизации, запуская инструкции в совершенно разном порядке, но усложненный дизайн этих процессоров становится причиной множества потенциальных узких мест, поэтому можно много выиграть, оптимизируя код вручную для этих процессоров. У Pentium 4 также другой дизайн, и пути оптимизации для Pentium 4 отличаются от тех, которые используются для других версий. Это руководство не рассказывает о Pentium 4 — читатель может обратиться к руководствам от Intel.
    Прежде, чем вы начнете конвертировать ваш код в ассемблер, убедитесь, что используемый вами алгоритм оптимален. Зачастую вы можете гораздо сильнее улучшить ваш код путем оптимизации алгоритма, чем переписыванием кода на ассемблере.
    Затем вам нужно выделить критические части вашей программы. Зачастую более, чем 99% времени процессора тратится на внутренний цикл программы. В этом случае вам нужно только оптимизировать этот цикл и оставить все остальное на языке высокого уровня. Некоторые асм-программисты тратят огромное количество энергии на оптимизирование не тех частей своей программы, единственным значительным результатом чего становится то, что программу становится труднее отлаживать и распространять!
    Если не совсем понятно, какие части вашей программы являются критическим, вы можете использовать профайлер, чтобы найти их. Если выясняется, что узким местом является доступ к диску, вы можете модифицировать вашу программу таким образом, чтобы сделать доступ к диску последовательным (для улучшения работы кэша диска), а не переключаться на ассемблерное программирование. Если узким местом является вывод графики, вы можете поискать путь к уменьшению вызовов графических процедур.
    Некоторые высокоуровневые компиляторы предлагают относительно хорошую оптимизацию для некоторых процессоров, но дальнейшая оптимизация вручную обычно дает лучшие результаты.
    Пожалуйста, не посылайте мне ваши вопросы о программировании. Я не собираюсь делать за вас вашу домашнюю работу.
    Удачи в охоте за наносекундами!
    2. Литература — Архив WASM.RU

    Множество полезной литературы и туториалов можно скачать бесплатно с www-сайта Intel или заказать на CD-ROM. Рекомендуется, чтобы вы изучили эту литературу для ознакомления с архитектурой процессора. Тем не менее, документы от Intel не всегда точны — особенно много ошибок содержат туториалы (похоже, что они не проверяют собственные примеры).
    Я не будут давать здесь прямые ссылки, потому что местоположение файлов часто меняется. Вы можете найти нужные вам документы используя функцию поиска на developer.intel.com или перейдя по ссылке, которые находятся на www.agner.org/assem.
    Некоторые документы в формате .PDF. Если у вас нет никакого программного обеспечения для просмотра или распечатки PDF-файлов, вы можете скачать просмотровщик файлов Acrobat с www.adobe.com.
    VTUNE — это утилита от Intel для оптимизации кода. Я не тестировал его и поэтому не могу ничего сказать по этому поводу.
    Кроме Intel существует множество другой полезной информации. Эти источники перечислены в FAQ ньюсгруппы comp.lang.asm.x86. Также обратите внимание на ссылки, приведенные на www.agner.org/assem.
    3. Вызов ассемблерных функций из языка высокого уровня — Архив WASM.RU

    Вы можете использовать встроенный ассемблер или написать процедуру полностью на ассемблере и вставить ее в свой проект. Если вы выберете последний вариант, рекомендуется, что компилятор умел переводить высокоуровневый код напрямую в ассемблер. Это даст вам гарантию, что вы получите верный метод вызова функции. Большинство компиляторов C++ умеют это делать.
    Методы вызова функций и искажение имен функций (англ. mangling) могут быть достаточно сложными. Существует много различных соглашений о вызовах функций, и разные марки компиляторов не совместимы друг с другом в этом отношении. Если вы вызываете ассемблерную процедуру из C++, самым логичным и совместимым будет объявление вашей функции как extern «C» и _cdecl. К имени ассемблерной функции надо прибавить символ подчеркивания и компилировать ее нужно указав чувствительность к регистрам в именах внешних функций и переменных (опция -mx).
    Если вам нужно использовать перегружаемые функции, перегружаемые операторы, функции-члены классов и другие расширения C++, тогда вам нужно сначала написать это на C++ и заставить ваш компилятор перевести это в ассемблер, чтобы получить верную информацию о линковке и методе вызова, так как они могут отличаться у разных компиляторов. Если вам нужна ассемблерная функция, соглашение о вызове которой отличается от extern «C» и _cdecl, вам нужно получить ее имя, создаваемое компилятором. Вот пример перегруженной функции вычисления квадратного корня:

    соглашение порядок помещения параметров в стек кто очищает стек
    _cdecl обратный вызывающий
    _stdcall обратный процедура
    _fastcall зависит от компилятора процедура
    _pascal прямой процедура

    Использование регистров в 16-ти битном режиме или Windows, C или C++

    • 16-ти битное значение возвращается в AX
    • 32-х битное значение в DX:AX
    • значение с плавающей запятой в ST(0).
    • Регистры AX, BX, CX, DX, ES и арифметические флаги могут быть изменены процедурой;
    • другие регистры должны быть сохранены и восстановлены.
    • Процедура может полагаться на то, что при вызове другой процедуры значения
      в регистрах SI, DI, BP, DS и SS не изменится.

    Использование регистров в 32-х битных Windows, C++ и других языках программирования

    • целочисленное значение возвращается в EAX
    • значение с плавающей точкой возвращается в ST(0)
    • Регистры EAX, ECX, EDX (но не EBX) могут быть изменены процедурой;
    • Другие регистры (EBX, EBP, EDI, ESI, ESP) должны быть сохранены и восстановлены.
    • Сегментные регистры нельзя изменять даже временно.
      • CS, DS, ES и SS указывают на плоский сегмент.
      • FS используется операционной системой.
      • GS не используется, но зарезервирован.
    • Флаги могут меняться процедурой, но со следующими ограничениями:
      • флаг направления равен 0 по умолчанию. Его можно изменить временно, но при выходе из процедуры необходимо очистить.
      • Флаг прерывания не может быть очищен.
    • Стековый регистр плавающей запятой пуст при входе в процедуру и должен быть пустым при выходе, если только ST(0) не используется для возвращения значения.
    • Регистры MMX можно изменять, и если это было сделано, их нужно очистить с помощью инструкции EMMS перед возвращением или вызовом любой другой процедуры, которая может использовать регистры плавающей запятой.
    • Все XMM регистры можно свободно изменять. Правила для передачи параметров и возвращения значений через регистры XMM объяснены в интеловском документе AP 589.
    • Процедура может полагаться на неизменность EBX, ESI, EDI, EBP и всех сегментных регистров при вызове другой процедуры.

    4. Отладка — Архив WASM.RU

    Отладка ассемблерного кода может оказаться довольно трудоемкой и неприятной, как вы, возможно, уже заметили. Я рекомендую вам

    1. сначала написать то, что вы хотите оптимизировать как подпрограмму на языке высокого уровня.
    2. Затем напишите тестовую программу, в которой вы будете отлаживать подпрограмму.
    3. Убедитесь, что тестовая программа удовлетворяет всем условиям ветвления и выравнивания.
    4. Затем переведите код на язык ассемблера.

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

    • Протестируйте скорость наиболее критичных частей вашей программы с помощью метода, изложенного в главе 30 или с помощью тестовой программы.
    • Если код значительно медленнее, чем ожидалось, тогда возможно, что:
      • неправильно используется кэш ( глава 7 ),
      • невыровненные операнды ( глава 6 ),
      • цена первого запуска ( глава 8 ),
      • неправильное предсказание переходов ( глава 22 ),
      • проблемы загрузки кода ( глава 15 ),
      • потери скорости при чтении регистра ( глава 16 )
      • или долгая цепь зависимости ( глава 20 ).

    5. Модель памяти — Архив WASM.RU

    Пентиумы спроектированы в основном для 32-х разрядного кода, и скорость исполнения ужасно медлена при использовании 16-х разрядного кода. Сегментирование вашего кода и данных также значительно отражается на производительности, поэтому вам следует использовать 32-х разрядный плоский режим и операционную систему, которая поддерживает этот режим. Примеры, приводимые в данном руководстве — для 32-х разрядный плоского режима, если иное не оговорено особо.
    6. Выравнивание — Архив WASM.RU

    Все данные в RAM должны быть выровненены так, чтобы их адреса были кратны 2, 4, 8 или 16 согласно таблице:

    размер выравнивание
    1 (byte) 1 1
    2 (word) 2 2
    4 (dword) 4 4
    6 (fword) 4 8
    8 (qword) 8 8
    10 (tbyte) 8 16
    16 (oword) n.a. 16

    В то время как выравнивание данных важно всегда, выравнивание кода не является необходимым на PPlain и PMMX. Принципы выравнивания кода на PPro, PII и PIII изложены в главе 15.
    7. Кэш — Архив WASM.RU

    У PPlain и PPro 8 килобайт кэша первого уровня для кода и 8 килобайт для данных. У PMMX, PII и PIII по 16 килобайт для кода и данных. Данные в кэше первого уровня можно читать или перезаписывать всего лишь за один такт, в то время как выход за границы кэша может стоить множества тактов. Поэтому важно, понимать, как работает кэш, чтобы использовать его более эффективно.
    Кэш данных состоит из 256 или 512 рядов по 32 байта в каждом. Каждый раз, когда вы считываете элемент данных, который еще не находится в кэше, процессор считает весь кэш-ряд из памяти. Кэш-ряды всегда выравниваются по физическому адресу, кратному 32. Когда вы считываете байт по адресу, который кратен 32, чтение или запись в следующие 31 байт вам не будет стоить практически ничего. Вы можете использовать это к своей выгоде, организовав данные, которые используются вместе, в блоки по 32 байта. Если, например, у вас есть цикл, в котором обрабатываются два массива, вы можете перегруппировать эти два массива в один массив структур, чтобы данные, которые используются вместе, находились в памяти рядом друг с другом.
    Если размер массива кратен 32 байтам, вам следует и выравнивать его по границе 32 байта.
    Кэш set-ассоциативен. Это означает, что кэш-ряд нельзя ассоциировать с произвольным адресом памяти. У каждого кэш-ряда есть 7-ми битное значение, которое задает биты 5-11 адреса в физической памяти (биты 0-4 определяются положением элемента данных в кэш-ряде). У PPlain и PPro два кэш-ряда для каждого из возможных 128 set-значений, поэтому с определенным адресом в памяти можно ассоциировать только два жестко заданных кэш-ряда. В PMMX, PII и PIII — четыре.
    Следствием этого является то, что кэш может содержать не более двух или четырех различных блока данных, у которых совпадают биты 5-11 их адресов. Вы можете определить, совпадают ли эти биты у двух адресов следующим образом: удалите нижние пять битов каждого адреса, чтобы получить значение, кратное 32. Если разница между этими обрезанными значениями кратна 4096 (=1000h), значит у этих адресов одно и то же set-значение.
    Давайте я проиллюстрирую вышеизложенное с помощью следующего кода, где ESI содержит адрес, кратный 32:

    мы пересечем границу в 32 байта, поэтому у нас будет другое set-значение, и не возникнет никаких проблем с ассоциирование кэш-рядов к этим трем адресам. Цикл теперь занимает 3 такта (не считая первого раза) — весьма значительное улучшение! Стоит упомянуть, что у PMMX, PII и PIII для каждого set-значения есть четыре кэш-ряда. (Некоторые интеловские документы ошибочно утверждают, что у PII по два кэш-ряда на каждое set-значение).
    Определить, одинаковые или у переменных set-значения, может оказаться достаточно сложным, особенно, если они разбросаны по разным сегментам. Лучшим, что вы можете придумать для избежания проблем подобного рода — это держать все данные, используемые в критической части вашей программы внутри одного блока, который будет не больше, чем кэш, либо в двух блоках, не больших, чем половина от его размера (например, один блок для статических данных, а другой для данных в стеке). Это будет гарантией того, что ваши кэш-ряды используются оптимальным образом.
    Если критическая часть вашего кода имеет дело с большими структурами данных или данными, располагающимися в памяти случайным образом, тогда вам стоит подумать о том, чтобы держать наиболее часто используемые переменные (счетчики, указатели, флаговые переменные и так далее) в одном блоке с максимальным размеров в 4 килобайта, чтобы использовались все кэш-ряды. Так как вам еще требуется стек для параметров подпрограммы и возвращаемых адресов, лучшее, что вы можете сделать — это скопировать наиболее часто используемые статические данные в динамические переменные в стеке, а после выхода из критической части кода скопировать обратно те из них, которые подверглись изменению.
    Чтение элемента данных, которого нет в кэше первого уровня приводит к тому, что весь кэш-ряд будет заполнен из кэша второго уровня. Если ее нет и в кэше второго уровня, то вы получите еще большую задержку, которая может оказаться совсем гигантской, если вы пересечете границу между страницами памяти.
    При считывании больших блоков данных из памяти, скорость ограничена временем, уходящим на заполнение кэш-рядов. Иногда вы можете увеличить скорость, считывая данные в непоследовательном порядке: еще не считав данные из одного кэш-ряда, начать читать первый элемент из следующего кэш-ряда. Этот метода можете повысить скорость на 20-40% при считывании данных из основной памяти или кэша второго уровня на PPlain и PMMX, или из кэша второго уровня на PPro, PII и PIII. Недостаток этого метода заключается в том, что код программы становится очень запутанным и сложным. Другую информацию об этом методе вы можете получить на www.intelligentfirm.com .
    Когда вы пишите в адрес, которого нет в кэше первого уровня, тогда значение пойдет прямо в кэш второго уровня или в память (в зависимости от того, как настроен кэш второго уровня) на PPlain и PMMX. Это займет примерно 100 ns. Если вы пишите восемь или более раз в тот же 32-х байтный блок памяти, ничего не читая из него, и блок не находится в кэше первого уровня, возможно стоит сделать фальшивое чтение из него, чтобы он был загружен в кэш-ряд. Все последующие чтения будут производиться в кэш, что занимает всего лишь один такт. На PPlain и PMMX иногда происходит небольшая потеря в производительности при повторяющемся чтении по одному и тому же адресу без чтения из него между этим.
    На PPro, PII и PIII запись обычно ведет к загрузке памяти в кэш-ряд, но возможно указать область памяти, с которой следует поступать иначе (смотри Pentium Pro Family Developer’s Manual, vol. 3: Operating System Writer’s Guide»).
    Другие пути увеличения скорости чтения и записи в память обсуждаются в главе 27.8.
    У PPlain и PPro есть два буфера записи, у PMMX, PII и PIII — четыре. На PMMX, PII и PIII у вас может быть до четырех незаконченных записей в некэшированную память без задержки последующих инструкций. Каждый буфер записи может обрабатывать операнды до 64 бит длиной.
    Временные данные удобно хранить в стеке, потому что стековая область как правило находится в кэше. Тем не менее, вам следует избегать проблем с выравниваем, если элементы ваших данных больше, чем размер слова стека.
    Если время жизни двух структур данных не пересекается, они могут разделять одну и ту же область памяти, чтобы повысить эффективность кэша. Это согласуется с общей практикой держать временные переменные в стеке.
    Хранение временных данных в регистрах, разумеется, более эффективно. Так как регистров мало, вы, возможно, захотите использовать [ESP] вместо [EBP] для адресации данных к стеку, чтобы освободить EBP для других целей. Только не забудьте, что значение ESP меняется каждый раз, когда вы делаете PUSH или POP. (Вы не можете использовать ESP под 16-ти битным Windows, потому что прерывание таймера будет менять верхнее слово ESP тогда, когда это невозможно предугадать.)
    Есть отдельных кэш для кода, которых схож с кэшем данных. Размер кэша кода равен 8 килобайтам на PPlain и PPro и 16 килобайтам на PMMX, PII и PIII. Важно, чтобы критические части вашего кода (внутренние циклы) умещались в кэш кода. Часто используемые процедуры следует помещать рядом друг с другом. Редко используемые ветви или процедуры нужно держать в самом низу вашего кода или где-нибудь еще.
    8. Исполнение кода в первый раз — Архив WASM.RU

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

    1. Загрузка кода из RAM в кэш занимает намного больше времени, чем его выполнение.
    2. Любые данные, к которым обращается код должны быть загружены в кэш, что также занимает много времени. Когда код повторяется, данные, как правило, уже находятся в кэше.
    3. Инструкция перехода не будет находится в буфере предсказывания переходов в первый раз, поэтому маловероятно, что она будет предсказана правильно. Смотри главу 22.
    4. На PPlain декодирование инструкций является узким местом. Если определение длины инструкции занимает один такт, то процессор не может раскодировать за такт две инструкции, так как он не знает, где начинает вторая инструкция. PPlain решает эту проблему, запоминая длину любой инструкции, которая осталась в кэше. Как следствие, ряд инструкции не спариваются на PPlain во время первого исполнения, если только первые две инструкции не занимают по одному байту. У PMMX, PPro, PII и PIII таких потерь нет.

    В силу этих четырех причин, код внутри цикла будет занимать больше времени, исполняясь в первый раз, нежели в последующие.
    Если у вас большой цикл, который не влезает в кэш кода, у вас будут постоянные потери в производительности, потому что код будет исполняться не из кэша. Вам следует реорганизовать цикл, чтобы он умещался в кэш.
    Если в вашем цикле очень много переходов и вызовов, то у вас будут потери из-за регулярных ошибок предсказания переходов.
    Также у вас будет потеря производительности, если ваш цикл периодически обращается к структурам данных, которые слишком велики для кэша данных.
    9. Задержка генерации адреса — Архив WASM.RU

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

    Как ускорить процессор, а точнее Windows под него — CPU Control

    Как Вы поняли из заголовка, мы поговорим про то как ускорить процессор , а точнее говоря (просто некоторые неопытные пользователи называют системный блок так ;) ) компьютер и Windows .

    Т.е, сегодня я решил обновить и дополнить одну из старых и неполных статей по оптимизации, причем обновить не просто, а вставив в неё часть материала одного из уроков нашего курса обучения ;)

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

    Как ускорить процессор (компьютер) — теория

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

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

    Глобально, в этом направлении, с точки зрения программной оптимизации есть два пути:

    • В случае с многоядерными процессорами, — это распределение нагрузки по ядрам. Дело здесь в том, что изначально не все процессы могут использовать адекватно все ядра в системе (т.е нет поддержки многоядерности) или корректно занимать те из них, что не заняты обсчетом других приложений и нужд, а посему имеет смысл вручную (или автоматически) разносить приложения на отдельные ядра или группы ядер, для корректного распределения нагрузки и/или ушустрения работы;
    • В случае со всеми процессорами, т.е одноядерными в том числе, — это работа с приоритетами системы. Дело в том, что по умолчанию Windows присваивает всем запускаемым процессам нормальный приоритет, что ставит приложения в равные условия в плане получения процессорных мощностей;
    • Однако, согласитесь, что, скажем, 3D игра и обычный блокнот, – это немного разные приложения и, очевидно, что игре нужно больше ресурсов процессора в реальном времени, т.к находясь в трехмерном приложении Вы вряд ли взаимодействуете с этим самым блокнотом и он Вам не нужен до поры до времени (да особых мощностей процессора блокноту почти не надо, – там той программы то.. раз два и нету). Отсюда, вроде как логично вытекает, что приоритеты у разных приложений должны быть разные (особенно во времена многоядерности то), но на практике это далеко от реальности.

    И в том и в другом случае, решить проблему с тем как ускорить процессор (вздохнул), а точнее компьютер и Windows , собственно, помогут программы для того предназначенные.

    Про приоретизацию я уже немного говорил в соответствующей статье, а про распределение речь пойдет ниже.

    Как ускорить процессор — вводная, скачиваем CPU Control

    Что это за распределение нагрузки и как оно выглядит? Говоря простым языком, можно вручную, запустив программку, повесить все системные службы на просчитывание первым ядром, антивирус и фаерволл вторым, браузер и аську третьим и тд и тп.

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

    В этом нам поможет такая программа, как CPU Control . К сожалению, оная несколько устарела и может поддерживать не все процессоры, но для решений 2-4 ядра подойдет вполне. С более многоядреными версиями не факт.

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

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

    Скачать можно прямо с моего сайта, а именно отсюда. Установка не требуется, просто распакуйте программу.

    Как ускорить процессор и компьютер с помощью настроек CPU Control

    После запуска видим примерно такую картину:

    Где сразу идем на вкладку “ Options ” и задаем галочками “ Автозапуск с Windows ”, “ Минимизировать ”, язык и ставим галочку 4 ядра, если у нас их, собственно, 4 или не ставим, если, собственно, их два.

    Настройка CPU Control, чтобы еще сильнее ускорить процессор

    Дальше есть несколько путей, а именно:

      • Ручной , т.е когда мы задаем для каждого процесса всё сами, т.е на каком ядре/ах он будет, что называется обрабатываться;
      • Авто , т.е, когда программа сама назначает распределение по ядрам, чтобы ускорить наш процессор;
      • CPU1 , т.е, когда приоритет отдается первому ядру;
      • CPU2 , т.е, когда приоритет отдается второму ядру;
      • И тд.

    Последние два нас не интересуют, ибо идея передачи нагрузки куда-то в одно место мне не ясна. Мы как-никак занимаемся оптимизацией, а не наоборот :). Поэтому будем работать с первыми двумя.

    Для начала пару слов про » Авто «. Это довольно удобный режим, когда нет особого желания заморачиваться с тонкой настройкой или знаний на эту самую настройку не хватает. Посему можно выбрать этот режим и один из 9 профилей для него, которые, на базе неких правил, распределяют приложения по ядрам.

    Так можно получить неплохой прирост производительности без особых заморочек, особенно, если некоторое время повыбирать правильный профиль под Вашу текущую систему.

    Второй вариант, как уже говорилось,- это режим «Ручной» . Он более сложен, т.к требует определенного понимания концепции работы системы, приложений и тп.

    Перейдя в этот режим, Вы сможете сами распределять процессы по ядрам или группам ядер. Делается это путем выделения одного или нескольких процессов и последующим нажатием правой кнопки мышки. Здесь собственно, CPU и его номер — это номер ядра.

    Т.е. если Вы хотите ускорить процессор и повесить процесс на 4 -ое ядро, то выбираете CPU4 , если на 1 -ое и 3 -тье, то CPU 1+3 , и тд. Думаю, что идея ясна. Теперь о том как лучше распределять.

    Глобально, имеет смысл растаскивать процессы на группы, а ресурсоёмким приложением выделять все ядра сразу. Т.е, например, фаерволл и антивирус отдать на попечение 3+4 ядер, системные мелкие процессы, а так же небольшие программы, вроде аськи , Punto Switcher и прочую шушеру на 1-ое, игры-фотошоп-прочее-тяжелое на 1+2+3+4 .

    Либо, как вариант, попробовать всё повесить на все и посмотреть, что будет.

    Как посмотреть результаты ускорения и вообще изменения

    Мониторить нагрузку на ядра можно в том же диспетчере задач.


    Важно включить в нем мониторинг нагрузки на ядра, что делается по кнопке “ Вид ” — “ Вывод времени ядра ” и “ Вид ” — “ Загрузка ЦП ” — “ По графику на каждый ЦП ”.

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

    К слову, вот на 4 -х ядрах даже в автоматическом режиме прирост производительности значительно ощутим, зато на двух почему-то даже в ручную не всегда удается достигнуть мощи.

    В общем и целом здесь огромное поле для экспериментов, которое Вам, надеюсь, будет изучить, ибо у каждого своя система, набор программ и всё такое прочее. Поле, кстати, минное, ибо легко можно добиться обратного эффекта вместо оптимизации, но зато как интересно поковыряться :).

    Попробуйте использовать разные профили в авторежиме или ручную настройку, дабы добиться максимальной производительности на Вашем компьютере.

    Послесловие

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

    Илон Маск рекомендует:  Что такое код round

    Я люблю возится с системой и доводить её скорость, удобство и всё такое прочее до новых высот, пусть и не всегда больш и х, но зато б о льших, т.е ускорять процессор хотя бы как-то.

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

    Оптимизация для pentium процессора

    ОПТИМИЗАЦИЯ
    6.1. Приемы оптимизации для процессоров Intel Pentium

    Все, что здесь написано, является выборкой наиболее важных на мой взгляд фактов из документации от Agner Fog. Если вы серьезно интересуетесь оптимизацией для Intel Pentium (plain, MMX, PPro, P2), найдите и прочтите эту документацию (я нашел на http://www.agner.org/assem, относительно старая версия есть на ftp://ftp.cdrom.com/pub/sac/text/pentopt.zip).

    6.1.1. Спаривание целочисленных команд

    По-моему, основной прием ускорения. Дело в том, что у процессоров Pentium есть два конвейера обработки команд, U-pipe и V-pipe. В результате некоторые пары команд могут исполняться одновременно, а это практически удваивает скорость.

    Эти команды могут быть исполнены и в U-pipe, и в V-pipe, и при этом могут быть спарены (с какой-либо другой командой):

    mov reg/mem,reg/mem/imm
    push reg/imm
    pop reg
    lea, nop, inc, dec, add, sub, cmp, and, or, xor
    некоторые формы test

    Эти команды могут быть исполнены только в U-pipe, но при этом все-таки могут быть спарены:

    adc, sbb
    shr, sar, shl, sal на заданное число
    ror, rol, rcr, rcl на единичку

    Эти команды могут быть исполнены в любом конвейере, но могут быть спарены только в V-pipe:

    near call (близкий вызов)
    short/near jump (короткий/близкий переход)
    short/near conditional jump (короткий/близкий переход по условию)

    Все остальные целочисленные команды могут быть исполнены только в U-pipe и не могут быть спарены вообще.

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

      Первая команда может быть исполнена и спарена в U-pipe, вторая, соответственно, в V-pipe.
  • Если первая команда записывает что-то в регистр, то вторая команда не может производить чтение/запись из регистра. Причем, в этом условии части регистров считаются за весь регистр (то есть, запись в al/ah расценивается как запись в eax, а запись в cf — как запись в flags). Пример:
  • Две команды, записывающие что-то в регистр флагов, могут быть спарены, несмотря на условие 2:
  • Команда, записывающая что-то в регистр флагов, может быть спарена с условным переходом, несмотря на условие 2:
  • Следующие пары команд могут спариться несмотря на то, что обе команды изменяют esp:
  • Существуют ограничения на исполнение команд с префиксом. Префиксы возникают в таких случаях:
    • команда, адресующаяся не к сегменту по умолчанию, имеет префикс сегмента (примеры: mov eax,es:[ebx]; mov eax,ds:[ebp])
    • команда, работающая с 16-битными операндами в 32-битном режиме или с 32-битными операндами в 16-битном режиме, имеет префикс разрядности операнда (примеры: mov ax,1234 в защищенном режиме; mov ax,word ptr [variable] в защищенном режиме; xor eax,eax в реальном режиме)
    • команды, использующая 32-битную адресацию в 16-битном режиме, имеет префикс разрядности адреса (пример: mov ax,[ebx] в реальном режиме)
    • rep, lock — префиксы (пример: rep stosd)
    • многие команды, которых не было на 8086, имеют двухбайтовый код команды, где первый байт равен 0Fh. На процессоре Pentium без MMX этот байт считается префиксом. Наиболее часто встречающиеся команды с префиксом 0Fh: movzx, movsx, push/pop fs/gs, lfs/lgs/lss, setXX, bt/btc/btr/bts/bsf/bsr/shld/shrd, imul с двумя операндами и без операнда-числа (immediate).

    На процессоре Pentium без MMX команда с префиксом может исполняться только в U-pipe, исключение — близкие переходы по условию (conditional near jumps). На процессоре Pentium с MMX команды с префиксами 0Fh и размера операнда или адреса может исполняться в любом конвейере; но команды с префиксами сегмента, rep или lock (повторения или блокировки шины) могут исполняться только в U-pipe.

  • Команда, в которой одновременно участвует смещение (displacement) и заданное число (immediate) не может быть спарена на процессоре Pentium без MMX и может быть выполнена и спарена только в U-pipe на процессоре Pentium с MMX. Вот примеры:
  • Спаривающаяся команда, которая читает из памяти, считает и записывает результат в регистр или в регистр флагов занимает 2 такта. Спаривающаяся команда, которая читает из памяти, считает и записывает результат обратно в память занимает 3 такта. Примеры таких команд:

    Существует также так называемое неполное спаривание (imperfect pairing), когда обе команды выполняются в разных конвейерах, но НЕ одновременно (возможно, частично перекрываясь по времени исполнения), а следующие за ними команды не могут начать исполнение, пока обе команды не закончатся. Такое случается в следующих случаях:

    1. Вторая команда вызывает AGI (address generation interlock, блокировка генерирования адреса). Это происходит, если адрес, используемый во второй команде зависит от регистров, измененных в первой команде. Примеры:
    2. Две команды одновременно обращаются к одному и тому же двойному слову памяти. Примеры (подразумевается, что esi делится на 4):
    3. Две команды одновременно обращаются к адресам, в которых одинковы биты 2-4 (это вызывает конфликт кэш-банков). Для dword-адресов это значит, что разница между двумя адресами делится на 32. Пример:
    4. Первая команда производит чтение, подсчет и запись одновременно; вторая — чтение и изменение; в этом случае число тактов, требующееся для выполнения пары команд, можно рассчитать по следующей таблице:
    первая команда
    вторая команда mov или
    регистровая
    чтение/
    подсчет
    чтение/подсчет/
    запись
    mov или регистровая 1 2 3
    чтение/подсчет 2 2 4
    чтение/подсчет/запись 3 3 5

    У процессора Pentium непосредственно на кристалле есть 8k кэш-памяти (это т.н. кэш-память первого уровня, L1 cache) для кода и 8k — для данных. Данные из L1 cache считываются/записываются за один такт; кэш-промах же может стоить довольно много тактов. Таким образом, для наиболее эффективного использования кэша необходимо знать, как он работает.

    Итак, L1 cache состоит из 256 кэш-линий (cachelines), по 32 байта в каждой. При чтении данных, которых нет в кэше, процессор считывает из памяти целую кэш-линию. Кэш-линии всегда выравнены на физический адрес, делящийся на 32; так что если прочитать байт по адресу, делящемуся на 32, то можно читать и писать в следующий за ним 31 байт без всяких задержек. Свои данные имеет смысл располагать с учетом этого факта — например, выравнивать массивы из структур длиной 32 байта на 32; перед записью в видеопамять читать оттуда один байт (один раз на 32 записываемых байта); используемые вместе данные располагать вместе; и так далее.

    Но кэш-линия не может быть связана с любым физическим адресом. У каждой кэш-линии есть некое 7-битное «заданное значение» (set-value), которое должно совпадать с битами адреса 5-11. Для каждого из 128 возможных значений set-value есть две кэш-линии. Отсюда следует то, что в кэше не может одновременно содержаться более двух блоков данных с одинаковыми битами адреса 5-11. Чем это чревато, покажем на примере.

    У используемых трех адресов будет одинаковое значение в битах 5-11. Поэтому к моменту самого первого чтения в ecx в кэше точно не окажется свободной кэш-линии, процессор выберет для нее наименее использованную (least recently used) линию, ту самую, которая была использована при чтении eax. При чтении ebx, соответственно, будет заново перекрыта линия, использованная при чтении ecx. В результате цикл будет состоять из сплошных кэш-промахов и съест порядка 60 тактов. Если же поменять 28 на 32, изменив, таким образом, на единичку биты 5-11 для адреса [esi+20*4096+28], то для чтения в eax и ebx будут как раз использованы две имеющихся линии, для чтения в ecx — третья, не совпадающая ни с одной из этих двух. В результате — скорость порядка трех тактов на один проход и ускорение примерно в 20 (. ) раз.

    Еще одна интересная вещь, которую стоит учесть — Pentium НЕ загружает кэш-линию при промахе записи; только при промахе чтения. При промахе записи данные пойдут в L2 cache или память (в зависимости от настроек L2 cache). А это довольно медленно. Поэтому, если мы последовательно пишем в один и тот же 32-байтовый блок, но не читаем оттуда, то имеет смысл сначала сделать холостое чтение из этого блока, чтобы загрузить его в L1 cache; тогда все последовательные операции записи будут есть только по одному такту.

    6.1.3. Разные трюки

    Трюков есть много, перечислим здесь только наиболее часто используемые:

    работа с fixed point вместо floating point иногда (если код не слишком сильно насыщен математикой) быстрее; практически всегда быстрее для клонов;

    все данные желательно выравнивать по адресам, кратным размеру данных (то есть, переменные-байты можно не выравнивать, слова — выравнивать на 2, двойные слова — на 4); обращение к невыравненной переменной влечет за собой задержку минимум на три такта;

    деление на заранее известное число можно заменить умножением на обратное ему число;

    деление на степень двойки для целых чисел заменяется на сдвиг влево; деление чисел с плавающей точкой (fdiv) на Intel Pentium (на клонах, к несчастью, это не так) может исполняться параллельно с целочисленными командами.

    Остужаем и сохраняем процессоры. Вопросы снижения энергопотребления и тепловыделения ноутбуков и компьютеров. Часть 1.

    Введение.
    Достаточно давно мне хотелось остановиться на вопросах обеспечения снижения энергопотребления современных персональных компьютеров и ноутбуков. Многие пользователи оправданно зададут вопрос: «Зачем это надо? — производитель уже позаботился обо всех тонкостях энергопотребления моей системы. Как показывает опыт, к сожалению, это практически всегда не так. Если производители ноутбуков еще как-то стараются обеспечить снижение энергопотребления своих устройств, то с персональными компьютерами, как правило, все находится в запущенном состоянии.

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

    Определение ключевых компонентов энергопотребления системы.

    На представленном рисунке видны компоненты стандартного системного блока. Знание этих компонентов системы позволит вам еще на этапах сборки или апгрейда своего компьютера определиться с теми параметрами, которые позволят вам снизить энергопотребление системы. Итак, современный системный блок содержит:
    — корпус,
    — блок питания,
    — материнская плата,
    — процессор,
    — оперативная память,
    — видеокарта/видеокарты,
    — жесткий диск/диски,
    — привод компакт-дисков,
    — дисководы,
    — картридеры,
    — системы охлаждения процессора, корпуса.
    Звуковые карты, ТВ-тюнеры в отдельном исполнении редко встречаются в современных компьютерах. Во-первых, все существующие материнские платы имеют встроенные контроллеры звука, которые не уступают по качеству звучания дешевым звуковым картам и картам среднего ценового диапазона. Во-вторых, ТВ-тюнеры отслужили свой век, как и коаксиальное телевидение. В эпоху FulHD, IP-TV, DVB говорит о ТВ-тюнерах попросту излишне.

    Энергосбережение: корпус и блок питания.

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

    Блок питания может стать источником неэффективного энергопотребления в первую очередь. Любой современный блок питания должен обеспечивать высокие показатели КПД при преобразовании тока высокого напряжения в 12, 5 и 3,3 вольта.

    Любой современный блок питания имеет соответствие одному из стандартов серии 80 Plus. Стандарт 80 Plus был принят еще в далеком 2007 году, в рамках энергосберегающих стандартов Energy Star четвертого пересмотра. Данный стандарт требует от производителей блоков питания обеспечение 80% КПД своих устройств при различных нагрузках, — 20%, 50% и 100% от номинальной мощности.

    Из этого следует, что для обеспечения максимальной эффективности вашего блока питания, он должен быть нагружен не менее 20 % от своей номинальной мощности. Абсолютно не правильно, когда пользователь приобретает блоки питания «с запасом» на 900 и 1200 Ватт. При выборе блока питания руководствуйтесь тем, что без нагрузки на систему, нагрузка на него не должна падать ниже 20% и он должен иметь сертификат соответствия 80 Plus.

    Справедливости ради, нужно отметить, что на сегодняшний день стандарт 80 Plus дифференцировался на следующие категории:
    — 80 Plus
    — 80 Plus Bronze
    — 80 Plus Silver
    — 80 Plus Gold
    — 80 Plus Platinum.

    Различие между стандартами заключается в обеспечении более высоких показателей КПД внутри семейства стандарта 80 Plus. Если при 50% нагрузке блок питания стандарта 80 Pus обеспечивает КПД на уровне 80%, то дорогие блоки питания соответствующие стандарту 80 Plus Platinum обеспечивают КПД на уровне 94% и выше.

    Энергосбережение: материнская плата.

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

    В силу общих тенденций, многие именитые производители материнских плат, такие как Gigabyte, ASUS, MSI демонстрируют на выставках свои новые «экологичные» продукты. Как правило, экологичность данных решений достигается за счет оптимизации схем питания процессора и видеокарт, — основных потребителей любого системного блока. Как правило, это осуществляется за счет применения многофазных стабилизаторов напряжения процессоров.

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

    При покупке материнской платы, также следует быть более внимательным. Приобретение «навороченной» материнской платы всегда оборачивается повышенным энергопотреблением. Если вам никогда не будет нужен порт FireWire, не следует за него переплачивать, а затем ежемесячно платить за то электричество, которое потребляет его контроллер на материнской плате.

    Энергосбережение: процессор.

    Ведущие производители процессоров AMD и Intel на протяжении последних десятилетий занимаются снижением энергопотребления своих продуктов. Следует отдать должное, вся эстафета была начата компанией AMD, в которой она удерживала прочное лидерство на протяжении двух-трех лет. Были времена, когда процессоры компании AMD с технологией Cool’n’Quiet имели значительно меньшее энергопотребление, нежели процессоры от компании Intel линеек Pentium 4 и Pentium D.

    Компания Intel быстро наверстала свое отставание и внедрила технологию EIST — Enhanced Intel SpeedStep Technology, которая прекрасно себя показала в последних поколениях процессоров. В то время как новые процессоры от компании Intel обзаводятся все новыми и новыми технологиями энергосбережения и наращивают производительность, от компании AMD существенных рывков вперед мы не видим.

    Как известно, ключевым энергопотребителем любого персонального компьютера или ноутбука является именно процессор, поэтому мы остановимся на вопросах снижения его энергопотребления.

    Для того чтоб понять, как можно снизить энергопотребление процессора, вы должны четко для себя представлять, от чего оно зависит. Энергопотребление современного процессора зависит:
    — от напряжения питания подаваемого на транзисторы,
    — частоты работы процессора. Частота работы процессора формируется из произведения его множителя на частоту шины.

    По сути дела, технологии Cool’n’Quiet и EIST занимаются снижением энергопотребления именно за счет этих двух параметров. К сожалению, чаще всего мы сталкиваемся с работой не с напряжением питания процессора, а с работой его частотой. При снижении нагрузки на процессор энергосберегающие технологии снижают множитель процессора и тем самым добиваются снижения энергопотребления процессора. При появлении нагрузки на процессоре, множитель возвращается на прежние значения, и процессор работает, как ни в чем не бывало. К сожалению, данная методика снижения энергопотребления не всегда позволяет добиться высокой энергоэффективности. Покажем на примере.
    В качестве примера выбран процессор Core 2 Duo с номинальной частотой работы 2,0 Ггц.

    Из представленной диаграммы видно, что температура работы процессора без включения режима энергосбережения, при номинальном множителе x12 и напряжении питания 1,25 вольт мы имеем рабочую температуру порядка 55-56 градусов в простое.

    После подачи нагрузки на процессор, при аналогичных условиях работы мы фиксируем среднею температуру работы процессора порядка 71-72 градусов, что и было зафиксировано на наших диаграммах.
    Температура ядер процессора снимается по внутренним датчикам, поэтому погрешности минимальны. Учитывая тот факт, что между энергопотреблением процессора и его рабочей температурой имеется прямопропорциональная связь, мы будем ориентироваться на данный параметр при оценке его энергоэффективности.
    Следующим этапом мы снизили множитель процессора до минимально возможных значений, до 6. При этом частота процессора составила 997 Мгц, грубо можно округлить до 1 Ггц. Напряжение питания осталось неизменным, в районе 1,25 вольт.

    Из представленных данных видно, что в режиме простоя, рабочая температура процессора изменилась очень мало, она осталась, по-прежнему, в рамках 55-56 градусов. Отсюда напрашивается вывод о том, что от простого снижения частоты работы процессора мы выигрываем очень мало.

    После этого мы подали нагрузку на процессор, но множитель и рабочее напряжение процессора оставили на прежнем уровне. Естественно, подобное тестирование имеет значение только с практической стороны, реализовывать его в жизни мы не рекомендуем. Связано это с тем, что именно от частоты процессора зависит его производительность, и никто не покупает высокочастотный процессор для его последующей работы на заниженных частотах. После стабилизации температурных значений, мы получили среднею рабочую температуру равную 65-66 градусам, что на шесть градусов ниже, чем при работе процессора на номинальной частоте равной 2 Ггц.
    Из этого всего следует, что действительно энергосбережение от снижения рабочей частоты процессора путем изменения значения множителя имеет место быть, но оно не того уровня, которого нам бы хотелось видеть, в каждом конкретном случае. Поэтому мы приступаем к работе с напряжением процессора.

    Наш процессор и материнская плата позволяют изменять напряжение питания процессора в промежутке 0,95-1,25 вольт. Шаг составляет 0,0125 вольт. Это связано с тем, что процессор установлен в ноутбуке, материнские платы которых, редко когда дают возможность менять рабочие напряжения компонентов в широких диапазонах.
    Для того чтоб доказать эффективность снижения рабочего напряжения процессора в плане снижения его энергопотребления и тепловыделения, мы оставим его рабочую частоту на уровне 1 Ггц, но параллельно снизим рабочее напряжение до минимально возможных значений, — 0,95 вольт.

    Данная манипуляция позволила нам снизить температуру простоя процессора до 45-46 градусов, что представлено на диаграмме. В данном режиме мы добиваемся максимально возможно низкого энергопотребления процессора. Снижение рабочего напряжения до 0,95 вольт позволило нам снизить рабочую температуру простоя на 10 градусов.

    Для оценки эффективности метода снижения рабочего напряжения процессора, мы подали на него нагрузку. В результате чего мы получили рабочую температуру в нагрузке равную 50-51 градусам, в то время как без изменения напряжения и аналогичной производительности системы на частоте 1 Ггц ранее мы получали 65-66 градусов. Полученные нами данные зафиксированы на диаграммах.

    Энергопотребление процессора: выводы

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

    — Учитывая тот факт, что любой процессор может работать при более низком напряжении при более низких частотах своей работы, следует подобрать свое минимальное стабильное напряжение для каждой частоты его работы.

    — Для определения приблизительных рабочих напряжений для каждой частоты (множителя) процессора достаточно построить график прямой зависимости минимального напряжения от частоты путем нанесения максимальных и минимальных значений. Это значительно облегчит работу начинающим пользователям.

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

    Для этих целей я рекомендую программу RightMark CPU Clock Utility — RMClock, которую использую уже на четырех поколениях процессоров, бесплатного функционала которой хватает для всех вышеописанных манипуляций.

    Энергосбережение процессора: RightMark CPU Clock Utility (RMClock)

    Утилита имеет небольшой вес, порядка 250 килобайт. Не требуется какой-либо установки, просто распаковываете его в выбранную папку и запускаете файл RMClock.exe. Для простоты ссылка на архив с программой будет представлена в конце нашей статьи.

    На момент написания статьи последняя версия программы 2.35 имеет следующий функционал в рамках бесплатного использования:
    — контроль тактовой частоты процессоры,
    — контроль троттлинга,
    — контроль уровня загрузки процессора, ядер процессора,
    — контроль рабочего напряжения процессора,
    — контроль температуры процессора/ядер процессора,
    — постоянный мониторинг указанных параметров,
    — возможность изменения напряжения процессора из операционной системы,
    — возможность изменения множителя процессора (его частоты) из операционной системы,
    — автоматическое управление частотой и напряжением процессора в зависимости от подаваемой нагрузки на него. Концепция носит название «Perfomance on demand» или «производительность по требованию».

    Запустив программный продукт, вы попадаете в один из разделов его меню. Мы перечислим весь функционал RightMark CPU Clock Utility по порядку. В разделе About представлена информация о разработчиках, их сайте, и ссылка на лицензионное соглашение. Базовая версия продукта поставляется бесплатно для некоммерческих целей, никакой регистрации не требуется. Имеется профессиональная версия, которая предоставляет гораздо более широкий функционал настроек работы системы и стоит символические 15 долларов. Для начинающего пользователя возможностей базовой версии вполне хватит.

    В закладке «Settings» представлены настройки программы для удобства его использования. К сожалению, русского языкового пакета, который встречался в ранее выпущенных версиях продукта, в нашем случае не оказалось, но в этом нет ничего страшного. В данной закладке имеется возможность выбора цвета оформления и, прошу обратить внимание, — режим автозапуска.

    За режим автозапуска отвечает подраздел «Startup options«. Автозапуск RightMark CPU Clock Utility при загрузке операционной системы позволяет максимально легко решить вопросы энергосбережения без вмешательства в BIOS компьютера, что особенно полезно, когда BIOS не предоставляет каких-либо возможностей по изменению рабочего напряжения и множителя процессора. Подобное встречается в BIOS’ах современных ноутбуков.

    Поставив галочку в окне пункта «Start minimized to system tray» вы избавите себя от надобности постоянно закрывать окно программы при очередном запуске. Оно будет выполнять свои задачи после автоматического запуска с предварительным свертыванием.

    Пункт «Run at Windows startup:» позволяет установить автоматический запуск программного продукта и выбрать, как это делать. В нашем случае мы осуществляем автоматический запуск через реестр, также имеется возможность автоматического запуска через папку «Автозагрузка». Оба варианта прекрасно работают, начиная от Windows XP заканчивая Windows 7.

    Имеется возможность записи необходимых параметров работы процессора в Log-файл. Данный параметр бывает необходим для выяснения причин нестабильной работы системы.

    В закладке «CPU info» представлена информация о процессоре, его характеристики на текущий момент. Перечислены поддерживаемые технологии энергосбережения. Чем более современный процессор, тем больше технологий он поддерживает.

    В закладке «Monitoring» представлены диаграммы изменения рабочей частоты ядра процессора, его троттлинг, нагрузка на него, множитель, рабочее напряжение и температура. Количество вкладок соответствует количеству ядер процессора.

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

    Пункт «P-states transitions method» позволяет выбрать метод перехода от одной заданной комбинации множителя-напряжения на другой. Имеются следующие возможности выбора:
    — Single-step: множитель переключается с шагом равной единице. То есть при переходе с множителя 10 на множитель 12 всегда будет промежуточное звено 11.
    — Multi-step: переход будет осуществляться с переменным шагом. В случае нашего примера, с 10 сразу на 12.

    Пункт «Multi-CPU load calculation» позволяет определить метод определения загрузки процессора. Данный параметр будет влиять на скорость переключения комбинации множитель-напряжение на процессоре. В каждом случае подбирается исходя из индивидуальных особенностей работы пользователя. Обычно данный параметр мы не меняем и оставляет на указанном на скрине значении, который означает, что оценка будет осуществляться по максимальной нагрузке любого из ядер процессора.

    Пункт «Standby/hibernate action» позволяет выбрать действие программы при переходе в режим гибернации или сна. Как правило, оставление текущего профиля работы является вполне достаточным.

    В разделе «CPU Default Settings» представлены следующие пункты:
    — Restore CPU defaults on management turns off, который позволяет вернуть первоначальные параметры работы процессора после выбора режима «No Power Managemet».
    — Restore CPU defaults on application exit, который позволяет вернуть первоначальные параметры работы процессора после выключения RightMark CPU Clock Utility.

    В разделе «CPU defeaults selection» выбирается метод определения комбинаций множитель-напряжение у процессора:
    — CPU-defined default P-state, комбинация определяются процессором,
    — P-state found at startup, комбинации определяются при загрузке программы,
    — Custom P-state, комбинации устанавливаются вручную.

    Пункт «Enable OS power management integration» позволяет создать профиль в схемах энергопотребления системы под названием «RMClock Power Management».

    В разделе «Profiles» пользователю предлагается задать те самые комбинации множитель-напряжение, — P-state. Во-первых, предлагается выбрать профили в зависимости от режима энергопотребления, — сеть или батарея/ИБП.

    Ниже предлагается выбрать множители процессора и напряжение для них в каждом конкретном случае. Как правило, я выбираю три значения:
    — минимальный множитель и минимальное напряжение для него,
    — максимальный множитель и минимально рабочее напряжение для него,
    — среднее значение множителя, а напряжение для него устанавливается самой программой исходя из максимальных и минимальных значений.

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

    Затем устанавливаете галочки для уже выбранных профилей в соответствующих разновидностях работы программы:
    — No management — без управления, в настройках не нуждается
    — вкладки «Power Saving», «Maximal performance», «Perfomance on Demand» по сути дела равнозначны и позволяют установить диапазоны изменения множителей-напрежения процессора.

    Например, в нашем случае для вкладки «Power Saving» мы выбрали минимально возможный множитель и напряжением, для вкладки «Maximal performance» максимальный множитель и минимально рабочее напряжение при данной частоте у процессора.

    В разделе производительность по требованию «Perfomance on Demand» выбрали три комбинации множитель-напряжение:
    — x4-0,95 вольт
    — x9-1,1 вольт
    — x12-1,25 вольт.

    Затем наводите на значок в области уведомлений рабочего стола программы RightMark CPU Clock Utility и выбираете необходимые параметры процессора, которые всегда должны вам показываться и выбираете текущий профиль работы. Я всегда ставлю для мониторинга частоту процессора и его температуру работы, что всегда удобно и отчасти интересно.

    На рисунке представлены три пиктограммы в области уведомлений рабочего стола:
    — пиктограммы программы RightMark CPU Clock Utility,
    — текущая частота процессора,
    — его текущая температура.

    На скрине представлены диаграммы работы процессора в режиме «Производительность по требованию«. Видно, как программный продукт при увеличении нагрузки на процессор ступенчато увеличивает его множитель и напряжение вначале до x9-1,1 вольт и при необходимости до максимальных x12-1,25 вольт. Как только нагрузка падает, все ступенчато возвращается обратно.
    Подобная регулировка практически никак не влияет на итоговую производительность системы.

    Во вкладке «Battery info» предлагается выбрать способы оповещения о состоянии аккумуляторной батареи ноутбука.

    Во вкладке «Advanced CPU settings» предлагается выбрать опрашиваемые температурные датчики процессора, включаемые технологии энергосбережения.
    Все эти энергосберегающие технологии описаны на сайте Intel. Мы просто хотим сказать, что, как правило, их включение не влияет на стабильность системы, поэтому — почему бы их не включить?

    Наш процессор относится к раннему семейству процессоров Core 2 Duo. Современные процессоры поддерживает не активные у нас технологии:
    — Engage Intel Dynamic Acceleration (IDA)
    — Enable Dynamic FSB Frequency Switching (DFFS)

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

    Вторая технология позволяет добиться еще более сильного снижения рабочей частоты процессора в режимах простоя. Ранее мы говорили о том, что итоговая частота процессора — это всегда произведение множителя на частоту системной шины. Современные процессоры Intel в рамках технологии DFFS позволяют снижать не только значение множителя, но и частоту шины, что позволяет достичь еще более низких частот. Данная технология также опасна для разогнанных процессоров, так как можно получить нестабильность со стороны оперативной памяти.

    Пожалуй, это все что мы хотели рассказать о программном продукте RightMark CPU Clock Utility. Остается посоветовать следить за ее обновлениями. При этом не имеет смысл обновляться, когда у вас уже на протяжении многих месяцев все стабильно работает. Имеет смысл искать новую версию при смене процессора или переходе на более современную операционную систему.
    Использование программы RightMark CPU Clock Utility позволит вам максимально продлить жизнь не только своего процессора, но и системы питания материнской платы, а также значительно снизить шум от системы охлаждения процессора, который не будет надрываться для его охлаждения, когда вы будете печатать, смотреть фильмы или просто листать страницы в Интернете.

    Энергопотребление процессора: определяем минимальное рабочее напряжение

    В своей статье я многократно указывал на то, что важно определить минимальное рабочее напряжение для каждой частоты работы процессора. Делается это путем проб и ошибок. Как правило, последовательно выполняется следующий цикл задач:
    — снижение напряжения на один пункт,
    — проверка стабильности процессора в стресс-тестовом программном продукте,
    — понижение или повышение напряжения на один пункт в зависимости от результатов стресс-тестирования.

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

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

    Выбираем метод тестирования в разделе «Options«=> «Torture test» и запускаем его. Длительность тестирования полностью зависит от вас. Как правило, при определении ориентировочного минимального напряжения я дожидаюсь либо первой ошибки, либо провожу тестирование в течение получаса. Если полчаса теста прошло без ошибок, снижаем напряжение на один пункт и вперед заново.
    После того, как вы определились с минимальным напряжением окончательно, имеет смысл оставить тест на ночь. За несколько часов кропотливой работы, практически всегда удается выявить возникающие ошибки.
    Нередко, операционная система зависает или в лучшем случае, выдает «синий экран смерти«. Это говорит о том, что напряжение занижено и возникла ошибка, — следует поднять рабочее напряжение на процессоре для данной частоты.

    В нашем случае, мы определили минимальное рабочее напряжение для нашего процессора. Как оказалось, при максимальной частоте в 2 Ггц нашему процессору 1,25 вольт совсем не нужны. Он вполне стабильно работает и при 1,00 вольтах. Стабильность операционной системы была обнаружена и при режиме 0,975 вольт, но Prime95 сообщил об ошибке, которая пропала после поднятия напряжения до 1,00 вольт.

    В итоге мы имеем

    — процессор с неизменным уровнем производительности и частотой работы 2 Ггц,
    — максимальную рабочую температуру в нагрузке 62-63 градуса, вместо привычных 72 градусов,
    — более низкое энергопотребление, которое позволяет без каких-либо схем энергопотребления от Acer, Asus, Samsung, Gigabyte максимально продлить длительность работы ноутбука от аккумуляторной батареи не теряя уровня производительности,
    — более низкое энергопотребление позволит сократить расходы на электричество, особенно, если указать данные значения в описанном выше программном продукте RightMark CPU Clock Utility.

    В действительности, подобное низкое рабочее напряжение процессора для оверклоккера говорит всегда об одном, — об его высоком разгонном потенциале. Но нюансам разгона у нас будут посвящены другие статьи, — тема разгона процессора выходит за рамки темы об энергосбережении. Заключение.
    Прочитав статью, у пользователя должен возникнуть вопрос: «Неужели производители настолько неумелые, что сами не понижают рабочее напряжение процессоров, особенно в ноутбуках, где это так критично?» Ответ прост и заключается в том, что процессоры выпускаются массово, ноутбуки также выходят с конвейера. Не в интересах производителей затягивать процесс производства, поэтому кому-то везет и его процессор показывает чудеса разгона, а у кого-то отказывается это делать, у кого-то процессор работает при напряжении 1,175 вольт, а у кого-то он стабилен и при 0,98 вольтах. Покупка электроники, — это всегда лотерея. Что скрыто под этикеткой в каждом конкретном случае, познается только на практике.
    В заключение хочется поблагодарить разработчиков программных продуктов RightMark CPU Clock Utility и Prime95, которым наш портал МегаОбзор вручает золотую почетную медаль. Ждем ваших вопросов и напоминаем, что все, что вы делаете со своей электроникой, вы делаете на свой страх и риск.

    Описанную в статье программу RightMark CPU Clock Utility можно найти по ссылке.
    Описанную в статье программу Prime95 можно найти по ссылке.

    Оптимизация процессора Intel

    13.08.2015, 13:40

    Температура процессора Intel i3 4170
    Здравствуйте, не подскажите температура 45C для процессора нормальная. Просто при запуске данная.

    Разгон процессора intel celeon
    Здравствуйте! Я хотел бы разогнать свой проц! Есть ли возможность это сделать не открывая корпус.

    Заявленная температура процессора от Intel
    Вопрос такой у меня возник спонтанно, в связи с жалобами многих владельцев процессоров Intel 7й.

    Топовые Intel процессора подешевели?
    Ух. Смотрите парни, что сейчас творится на computeruniverse :) i7-8700k — 25.5 рубля. i9-9900k.

    Температуры Процессора Intel P4 3.00 ггц
    У меня Intel P4 3.00 ггц,presscot,s 478.Без нагрузки температура 47-50 градусов,а под нагрузкой(в.

    Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL