Полезно знать

Почему работают не все ядра. Процессоры. Что дает включение всех ядер процессора

В первые годы нового тысячелетия, когда частоты CPU, наконец, прошли отметку 1 ГГц, некоторые компании (не будем показывать пальцем на Intel) предсказывали, что новая архитектура NetBurst сможет в будущем достичь частот порядка 10 ГГц. Энтузиасты ожидали наступление новой эры, когда тактовые частоты CPU будут расти подобно грибам после дождя. Нужно больше производительности? Просто перейдите на процессор с большей тактовой частотой.

Яблоко Ньютона громко упало на головы мечтателей, которые рассматривали мегагерцы как самый лёгкий способ продолжения роста производительности ПК. Физические ограничения не позволили экспоненциально увеличивать тактовую частоту без соответствующего роста тепловыделения, да и другие проблемы, связанные с технологиями производства, тоже стали возникать. Действительно, последние годы самые быстрые процессоры работают на частотах от 3 до 4 ГГц.

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

Pentium EE 840 - первый двуядерный CPU, появившийся в рознице.

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

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

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

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

Чтобы тесты были справедливыми, мы выбрали четырёхъядерный процессор - разогнанный до 2,7 ГГц Intel Core 2 Quad Q6600. После проведения тестов на нашей системе, мы затем отключили одно из ядер, перезагрузились, и повторили тесты. Мы последовательно отключали ядра и получили результаты для разного количества активных ядер (от одного до четырёх), при этом процессор и его частота не менялись.


Отключение ядер CPU под Windows выполнить очень легко. Если вы хотите узнать, как это сделать, то наберите "msconfig" в окне Windows Vista "Начать поиск/Start Search" и нажмите "Enter". Это откроет утилиту "Конфигурация системы".

В ней перейдите на закладку "Загрузка/Boot" и нажмите клавишу "Дополнительные параметры/Advanced options".


Это приведёт к появлению окна "Дополнительные параметры загрузки/BOOT Advanced Options". Выберите галочку "Число процессоров/Number of Processors" и укажите нужно число ядер процессора, которые будут активны в системе. Всё очень просто.


После подтверждения программа предложит перезагрузиться. После перезагрузки в "Диспетчере задач Windows" (Task Manager) можно увидеть число активных ядер. Вызов "Диспетчера задач" выполняется нажатием клавиш Crtl+Shift+Esc.

Выберите в "Диспетчере задач" вкладку "Быстродействие/Performance". В ней вы сможете увидеть графики нагрузки для каждого процессора/ядра (будь это отдельный процессор/ядро или виртуальный процессор, как мы получаем в случае Core i7 с активной поддержкой Hyper-Threading) в пункте "Хронология загрузки ЦП/CPU Usage History". Два графика означают два активных ядра, три - три активных ядра и т.д.


Теперь, когда вы ознакомились с методикой наших тестов, позвольте перейти к детальному рассмотрению конфигурации тестового компьютера и программ.



СОДЕРЖАНИЕ

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

Что дает включение всех ядер процессора?

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

Прежде чем решать вопрос о том, как включить все ядра на Windows 7, нужно четко осознавать, как это все работает. Сравнить это можно, например, с приемом пищи. Можно действовать одной рукой или двумя. В этом примере рот (или желудок) можно сравнить с процессором, а руки – с ядрами. Одной рукой положить в рот несколько кусков торта будет медленнее, двумя – быстрее. Но это не значит, что в рот поместится больше, чем столько, на сколько он рассчитан. Так и с процессорами. Не всегда ускорение загрузки в процессор вычислительных операций способствует их скорейшему выполнению. А обработку информации можно сравнить не только с пережевыванием пищи, но и с глотанием. Понятно ведь, что больше дозволенного глотнуть не получится.
Тем не менее, если вы умеете жевать достаточно быстро, по аналогии с современными процессорами, которые способны «проглатывать» информацию, почему бы и нет?

Так ли это необходимо?

Насколько целесообразно это делать, каждый решает сам. Но при решении вопроса о том, как включить второе ядро на Windows 7 при условии наличия 2-ядерного процессора, стоит учесть несколько моментов.
Особого прироста производительности добиться получится вряд ли, 10-15% (хотя для некоторых систем или ресурсоемких программ и это достаточно весомый показатель). Но ведь проблема в том, что использование каждого ядра привязано к объему оперативной памяти. А тут могут возникнуть проблемы, ибо при перенаправлении команд на каждое ядро процессора может произойти переполнение RAM, и вся система просто «повиснет».

Как включить все ядра на Windows 7 через БИОС?

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


После входа следует найти раздел, имеющий название вроде Advanced Clock Calibration. В большинстве систем по умолчанию установлено значение Auto. Это означает, что дополнительные ядра будут использоваться только в случае неспособности справиться с операциями основного ядра. Нет ничего проще, чем установить значение All Cores, которое будет соответствовать задействованию всех ядер процессора, вне зависимости от количества и типа исполняемых операций.

Доступ к настройкам через конфигурацию системы

Теперь обратим внимание на то, как включить все ядра на Windows 7 именно в программной среде самой системы. Некоторые пользователи ошибаются, думая, что в стандартной «Панели управления» можно произвести такие действия. Ничего подобного! Придется использовать консоль «Выполнить» или в англоязычной версии системы – Run (Win + R). В ней нужно ввести команду msconfig (унифицированное средство доступа к конфигурации Windows для всех систем), перейти на вкладку загрузки, а затем нажать на кнопку настройки дополнительных параметров.


Теперь, собственно, о том, как включить все ядра на Windows 7. В новом окне слева используется установка числа ядер, которое соответствует числу процессоров, а справа устанавливается необходимый объем оперативной памяти.

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

С оперативной памятью не все так просто. Хотя система и сама определяет объем выделяемой памяти на каждое ядро, вроде бы и автоматически, обольщаться на этот счет не стоит.


Принято считать, согласно установленным стандартам, что для 2 Гб ОЗУ соответствует 2-ядерным процессорам, 4 Гб – 4-ядерным и т. д. Но и тут не все так просто. На каждое ядро должно быть выделено не менее 1 Гб RAM. В случае несоответствия конфигурации компьютерной системы установленным требованиям можно даже не пытаться произвести какие-то настройки (все равно ничего не получится).


С другой стороны, в вопросе о том, как включить все ядра на Windows 7, не следует упускать из виду то, что современные процессоры имеют возможности выше заявленных. Так, например, процессоры Intel Core i7 второго поколения, устанавливаемые в ноутбуках, в плане обработки вычислений соответствуют 4-ядерным процессорам в стационарных системах. Поэтому не стоит удивляться, что при 8 Гб ОЗУ память будет распределяться не так (с учетом двух потоков). В значении количества процессоров будет указано 4 (хотя их на самом деле один с двумя двухпотоковыми ядрами) с соответствующим распределением памяти.

Вместо итога

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

Извинения приняты, давайте разбираться по порядку.

Что касается ограничения памяти и появившегося позже ограничения количества используемых процессоров. Это действительно средство для отладки и диагностики и для обеспечения совместимости.
Не все программы написаны хорошо, и в некоторых случаях программисты ради упрощения разработки и ускорения работы их детища отказывались от ряда проверок, которые на тот момент казались совершенно излишними, либо, опять же ради экономии памяти, использовали для хранения данных минимально возможное количество байтов. Компьютеры совершенствовались, выходили новые версии программ, а принятые решения сохранялись где-то в ядре программ, и в результате на новом компьютере с бо"льшим объемом памяти такая программа могла "сойти с ума". Подробно историю таких случаев сейчас раскапывать уже сложно да и не имеет смысла.
Пожалуй, последними случаями были некоторые программы, запрашивавшие количество ОЗУ в компьютере и интерпретировавшие получаемый от системы результат как 32-разрядное целое число со знаком. Потом они выполняли сравнение полученного числа с некоей величиной своих потребностей и либо продолжали работать, либо заявляли о недостатке памяти. Если в компьютере оказывалось больше 2 Гб памяти, то в этих программах число имеющейся памяти оказывалось отрицательным и сравнение всегда выдавало результат - недостаточно памяти. Это к вопросу совместимости. Чтобы использовать такую программу, надо либо вытащить "избыточные" модули памяти, что непрактично и не всегда возможно, либо искусственно ограничить количество используемой памяти.
Аналогичные ситуации встречались и раньше, к примеру, что-то (уже не помню, что именно), отказывалось работать в Win98, если было установлено больше 64 Мб памяти.
Ограничение памяти нужно и разработчикам, чтобы достаточно легко и просто проверить работу программы при разном количестве ОЗУ.

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

Резервов легкого и быстрого повышения производительности ОС давно уже нет. Разница в производительности предыдущей и новой ОС - проценты. Цитируя главу подразделения производительности Майкла Фортина (а он уже больше 10 лет руководит этим подразделением, "иногда прирост небольшой, один-два процента, иногда значительный, до пяти-десяти процентов". И эти проценты прироста даются достаточно большим трудом по оптимизации работы системы. Надеяться на то, что кто-то в интернете нашел способ ускорить работы системы раза в полтора легкой корректировкой режима работы системы - легкомысленно.

Что касается смены HAL и ускорения работы раза в полтора-два, то называйте это как хотите, компьютерным мифом, байкой, легендой - но никак не фактом. Никто так и не смог описать способ продемонстрировать наличие этого прироста. Заявлений-то было немало, но вот описать ситуацию, когда это повторилось бы у других, пока не смог никто.
"Прирост" достигался почти исключительно за счет самовнушения.
Вот, к примеру: http://forum.ixbt.com/topic.cgi?id=15:62688 , читайте первые два десятка сообщений, до переноса в "Общий" (флеймовый) форум. Более старые обсуждения искать лень, а может, они уже и удалились, но результат налицо - модераторы форума всерьез такие обсуждения больше не воспринимают и сбрасывают из тематических разделов во флеймовые.