Что такое ICE Affinity ?

Большое количество пользователей двух ядерных процессоров, таких как 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 <Affinity Mask> <Application Path> [Application command line parameters]

<Affinity Mask> - это целое число, в котором каждый бит отмечает процессор, на котором разрешено запускать этот процесс.

Пример:
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 - это исполняемый файл игры. Теперь клик на ярлык будет запускать Вашу игру.

Скачать ICE Affinity

P.S. Недавно был получен e-mail, качающийся этой проблемы. Это может помочь:

I'd like to thank you for your program Ice Affinity Test and the information on the description page. I was able to resolve a some long standing problems with my system because of it. I'd also like to tell you how I was able to fix my system, since it is not described on your site and it may be helpful to others. I am running an AMD X2 4200+ dual core on an ASUS A8NSLI-Premium motherboard, after updating the bios to the latest version, I still had cpu sync issues although they were not as pronounced from an amount standpoint (originally I had about -250ms and that improved to -80ms on average), but in applications it was just as bad. I came across an MS KB article (# 909944) http://support.microsoft.com/kb/909944/en-us one of the suggestions was to upgrade the CPU driver, I found it at http://www.amd.com/us-en/Processors/TechnicalResources/0,,30_182_871_13118,00.html in my case it is the driver second from the bottom ( AMD Athlon™ 64 X2 Dual Core Processor Driver for Windows XP and Windows Server 2003 Version (exe) 1.2.2) once I installed the driver and rebooted, all timing tests have come back as perfect and the problem in applications is gone. Please consider sharing this on your Ice Affinity page or in your forum.

Ray Rodriguez <*******@gmail.com>