1. Все вероятно знают, что в современных компьютерах используются многоядерные процессоры. Стандартно 2 ядра, но бывает 3 и даже 4, 8. Но для того, чтобы воспользоваться преимуществами нескольких ядер автоматически, необходимо чтобы ваша программа умела работать в режиме нескольких ядер.
К примеру, клиент игры «Пиратия» не поддерживает многоядерный режим и, в Windows XP все окна игры запускаются на одном первом ядре, что вызывает его перегрузку, а второе в это время простаивает. Если во время игры нажать (Contrl-Alt-Del) и вызвать Диспетчер задач, то на вкладке Быстродействие наглядно виден график загрузки ядер.
Видно, что в левом окошке(первое ядро) загрузка высока, а в правом(второе ядро) незначительна.
Во время массовых данжей, например во время Хаоса, когда в игре много движущихся объектов, первое ядро может быть загружено на 60-80% и более, что вызывает ощутимые задержки и лаги сервера тут не причём. Обычно в это время использовать больше 2 окон проблематично, несмотря на казалось бы мощный процессор и хорошего обьема оперативной памяти.
2. Что делать? Да вообщем-то просто – надо запускать каждую копию игры на отдельном ядре процессора. Это можно сделать вручную, но проще воспользоваться специальной программой-утилитой. Для этого в Интернете есть множество бесплатных программок-утилит. Я воспользовался программой ICE Affinity известной фирмы Ice Graphics.
2.1 Если у Вас Windows ХР, то нужно скачать программу ICE Affinity
http://www.ice-graphics.com/ICEAffinity/DownloadR.html
Скопируйте файл ICEAffinity.exe в каталог, где расположена игра и сделайте ярлык для ICEAffinity.exe, только вместо полного пути на ICEAffinity.exe вида:
"C:\Program Files\Пиратия Online\ICEAffinity.exe"
добавьте следующее:
"C:\Program Files\Пиратия Online\ICEAffinity.exe" 1 piratia.exe
где piratia.exe - это исполняемый файл игры, а цифра 1 – номер ядра, на котором запустится игра. Теперь клик на ярлык будет запускать Вашу игру на первом ядре процессора. Сделаем копию этого ярлыка и исправим в нем цифру 1 на 2.
"C:\Program Files\Пиратия Online\ICEAffinity.exe" 2 piratia.exe
Теперь клик на второй ярлык будет запускать Вашу игру на втором ядре.
Всё! Вы можете запускать окна игры на первое или второе ядро – по выбору, запуская игру первым или вторым ярлыком.
Рекомендую держать основного персонажа на втором ядре, а пару мультов для торговли повесить на первое (либо по два окна на каждое ядро).
ТС, если Вы его используете, тоже желательно переместить на ядро с не основными персонажами (первое).
Нажимаем(Contrl-Alt-Del) для вызова Диспетчер задач и убеждаемся, что на закладке Быстродействие графики загрузки ядер в правом и левом окне примерно одинаковы. Наслаждайтесь!
Если у вас слабый процессор , то Вы можете не заметить особого прироста быстродействия. Кроме того, для комфортной многооконной игры, памяти на компьютере должно быть не менее 2 ГБ. 2.2 Если у Вас Windows Vista, то можно вообще обойтись без скачивания утилиты ICE Affinity, т.к. управление ядрами встроено в систему. Потребуется всего лишь создать ярлыки запуска игры со следующей строкой:
Start “C:\Program Files\Пиратия Online\piratia.exe” /affinity 01
Клик на ярлык будет запускать Вашу игру на первом ядре.
Теперь сделаем копию этого ярлыка и исправим в нем цифру 1 на 2.
Start “C:\Program Files\Пиратия Online\piratia.exe” /affinity 02
Клик на второй ярлык будет запускать Вашу игру на втором ядре.
Особенность: дело в том, что Vista по умолчанию запускает клиент игры сразу на оба ядра (в закладке стоят обе галочки). Но клиент игры этого не понимает! И заботливая Vista периодически пытается перебросить окно игры то на одно, то на другое ядро, в зависимости от нагрузки. В момент переключения могут быть ощутимые задержки. Лучше сразу задать окну игры одно выбраное ядро.
2.3 Если у Вас Windows 7.
Эффект , будет тот же если в этом же диспечере задач, в процессах правой кнопкой щёлкнуть на game.exe выбрать задать соответствие и убрать галочки с одного из CPU.
Ежели не помогло выполнить пункт 2.1
//Если ядер у вас к примеру 6 или 8---заменяешь просто цифры 1 или 2 на какие тебе нужны//
Ниже - статья с сайта айс аффинити - утилиты для мультиядерников.
Владельцам процессоров интел - не нужно! Владельцам утилиты AMD Dual-Core Optimizer - не актуально! Всё и так будет работать оке. И серь сем 2 перестанет грести и пейнкиллер будет идти не в два раза быстрей. Большое количество пользователей двух ядерных процессоров, таких как AMD X2, Pentium D и даже Pentium 4 с HyperThreading - жаловались на странные проблемы с играми, приводящие к их полной или частичной неработоспособности. Это происходит потому, что производители материнских плат некорректно инициализируют процессоры. Если любая программа использует tick counter у процессора, эта программа может стать неработоспособной на любом двух ядерном процессоре. Windows постоянно балансирует нагрузку, постоянно переключаясь с одного процессора на другой. Если оба процессора были инициализированы синхронно, то проблема не возникает. Но большинство материнских плат не могут инициализировать процессоры синхронно. Если процессоры инициализированы не синхронно, то переключение с одного процессора на другой будет приводить к временным броскам, как прямым, так и обратным. Время начинает течь рывками, что делает работу большинства игр не стабильной.
Вы можете подумать, что эта ошибка проявляется только в играх. К сожалению, эта ошибка проявляется так в различных драйверах для USB HDD, flash плееров и т.д. Легко проверить, имеется эта ошибка в Вашем компьютере или нет. Просто запустите этот тест: ICEAffinityTest.exe. Если Ваш компьютер не идеален, этот тест покажет время сдвига между процессорами. Этот тест очень прост. Ниже приведен код из теста, позволяющий измерить этот временной сдвиг:
TLargeInteger Tmp;
QueryPerformanceFrequency(&Tmp);
__int64 Freq = Tmp.QuadPart;
QueryPerformanceCounter(&Tmp);
__int64 Value = Tmp.QuadPart;
__int64 LastValue = Tmp.QuadPart + Freq;
__int64 Shift = 0;
while(Value < LastValue)
{
QueryPerformanceCounter(&Tmp);
if (Value - Tmp.QuadPart > Shift) Shift = Value - Tmp.QuadPart;
Value = Tmp.QuadPart;
}
double TimeShift = double(Shift) / Freq; //seconds
Для материнских плат без данного дефекта переменная TimeShift равна нулю. Если переменная TimeShift не равна нулю, то значит Вы можете требовать от производителя Вашей материнской платы исправить этот дефект.
Пока же производители уговаривают Вас подождать, Вы можете использовать ICE Affinity для решения это проблемы в играх. Необходимо запретить для игр использовать больше одного процессора. Это можно сделать из Task Manager, но это не удобно, так как нужно это делать каждый раз вручную после запуска игры. ICE Affinity - небольшая утилита, которая решает эту проблему. ICE Affinity запускает любое приложение из командной строки и указывает какие процессоры в системе можно использовать для запуска этого приложения.
ICEAffinity.exe [Application command line parameters]
- это целое число, в котором каждый бит отмечает процессор, на котором разрешено запускать этот процесс.
Пример:
ICEAffinity.exe 1 Game.exe - Используется только первый процессор
ICEAffinity.exe 2 "C:\Program Files\Game\Game.exe" - Используется только второй процессор
ICEAffinity.exe 3 "C:\Program Files\Game\Game.exe" -CONNECT -LAN - Используются оба процессора
Для использования ICE Affinity скопируйте файл ICEAffinity.exe в каталог, где расположена игра и сделайте ярлык для ICEAffinity.exe, только вместо полного пути на ICEAffinity.exe вида: "C:\Program Files\Game\ICEAffinity.exe"
добавьте следующее:
"C:\Program Files\Game\ICEAffinity.exe" 1 Game.exe
где Game.exe - это исполняемый файл игры. Теперь клик на ярлык будет запускать Вашу игру.
Данная заметка очень помогает к примеру на бесплатных обедах