Перейти к содержанию

Сообщения от Heroes3 на двухядерном процессоре

Пока нет оценок — будьте первым!
Попробовал эту программку. Сделал следующие наблюдения.

С буковскими третьими "платиновыми" Героями работает, но не сразу. :) Почему-то срабатывает регулярное выражение только вида ".*", задание выражения, соответствующего только файлу Heroes3.exe (".*Heroes3.*", например), не вызывает должного эффекта.

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

Не работает со вторыми Героями. Вероятно, вторые Герои флудят каким-то другим местом. :)

В общем, по-нормальному сделать можно, наверное, только правкой самой игры - заменить бесконечный вызов функции одним более интеллектуальным вызовом, или что-то типа того. Тем не менее, спасибо автору за проделанную работу. Если стоит задача любым способом уменьшить прожорливость третьих Героев, то этот вариант можно использовать. Особенно когда других вариантов нет вообще. :)
А какой процессор, если не секрет?
Программа не уменьшает количество вычислений, необходимых "героям" для работы, она уменьшает количество "лишних" вычислений. Если процессор слабый, то может так получится, что 95% процессорного времени Герои считают и 5% - просто крутят бесконечный цикл. Программа исправляет это, но при этом сама отжирает 10% :-)
А вот если процессор мощный, то 98% - бесконечный цикл и 1-3% - семи Герои. Тут выигрыш существенен. В моём случае выигрыш заметен уже на ноутбуке 1,6 ГГц.
Процессор P4 2.8GHz. Я не думаю, что абсолютная мощность процессора имеет какое-либо значение, кроме влияния на тепловыделение, конечно. :)

А откуда вообще взялась идея, что основным пожирателем процессорного времени являются вызовы функций API, и почему именно они являются лишними вычислениями? Я смотрел вызовы вторых героев, так там из win32-вызовов самым частым во время бездействия является тот самый sleep. :) Причем, количество этих вызовов не так уж велико и явно на порядки превосходит количество исполненных ассемблерных команд. Я не большой специалист во всех этих вопросах, но мне кажется, что собака неограниченного цикла зарыта где-то внутри программы, а не в ее вызовах внешних функций.

Для третьих Героев, думаю, достаточно и 3% моего процессора. Оставшиеся 97%, соответственно, крутится тупой цикл. Когда мы начинаем останавливать программу с определенной периодичностью (на вызовах определенных функций API в нашем случае), затормаживая ее, скажем, на 50%, то "полезным" Героям остается, соответственно, 1.5%, т.е. половина от необходимого. Это если смотреть в долговременной перспективе, т.е. как это ощущает пользователь. Отсюда тормоза. А с точки зрения компьютера мы делаем некоторое "свободное окно" во времени процессора, только и всего, и когда программа просыпается, она продолжает молотить бестолковые циклы в том же самом соотношении к полезной своей части - 97/3. И так будет на любом, хоть 10GHz-процессоре. Я думаю, что все обстоит вот так.

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

начало:
нарисовать картинку
проверить пользовательский ввод
если прошло 10 мсек (к примеру) то
сделать шаг вычислений
конецесли
перейти на начало
------
Т.е. на слабом процессоре всё будет замечательно, а вот на сильном - раз в 10 мсек будет выполняться (сделать шаг вычислений), а в остальное время - перерисовываться картинка. Прпосто на слабом компе она будет перерисовываться, скажем, 20 раз в секунду, а на сильном - 1000 раз.
И тут, если вставить sleep(1) в нужное место :-) , то процессор будет какое-то время разгружен.

Попробую добыть вторых Героев и третьих платиновых (где-то они у меня были) и посмотреть, что на них происходит.
т к я новичок и мб создал тему не там, ногами не пинать :)
но все же, как запустить на двухядерном? что ВоГ, что Полное собрание виснет практически сразу и все. Одно ядро пробывал отключать, не помогает
а играть охото :(
В ответ пользователю Gjiod
Аватар пользователя
Причем тут твои два ядра?
Первый раз такое слышу... сам на athlon х2 все переиграл...
Ищи причину в другом месте, скорее всего несовместимость с видеоадаптером или еще что нибудь...
У тебя видеокарта с интеграцией?
POWER IT IS NOT JUSTICE
JUSTICE IT REAL POWER (C)

ICQ:810721;)
Аватар пользователя
Спасибо добрым людям, они уже побороли эту проблему. Здесь ссылка есть лечилки для платиновых героев 1,2,3.
Победил соперника и ты герой. Проиграл более слабому сопернику и ты уже человек.Иногда так хочется быть героем.
В ответ пользователю Gjiod
да у меня тоже виснут вообщем
у меня атлон 64 х2 4800+
винда XP SP2 Profession Rus, версия 2002
Видеокарта Жифорс 8600 гтс 256мб
память ддр2 2гб

Всякие вариации совместимостью с виндой 98 пробовал, не помогает...
В ответ пользователю Gjiod
Аватар пользователя
<вырезано> могу посоветовть обновить дрова на видюху и переустановить игру. www.nvidia.ru А процессор здесь в натуре не причём.
В ответ пользователю Gjiod
Аватар пользователя
Приведу данные рекомендации, если что спрашивайте.
В двухъядерной системе наиболее часто наблюдаемая проблема (с которой можно столкнуться и в случае с процессором, c технологией Hyper-Threading) состоит в снижении производительности по сравнению с аналогичной одноядерной системой. К тому же в играх наблюдается, к примеру, резкое увеличение внутриигровой скорости (не производительности!). Причиной этого является некорректный выбор таймера операционной системы - вместо таймера управления питанием ACPI используется таймер TSC, что приводит к ошибкам в программах, задействующих в своей работе вызов функции ядра QueryPerformanceCounter.

В таком случае необходимо сделать следующее: в первую очередь нужно добавить в файл boot.ini, расположенный в корневом каталоге диска C, в конец строчки вида «multi(0)disk(0)rdisk(0)partition(1)WINDOWS="Microsoft Windows XP Professional"/noexecute=optin/fastdetect» ключ/usepmtimer. Если вы не видите в Проводнике данного файла, то выберите в меню в разделе Сервис пункт Свойства папки . В появившемся окне на вкладке Вид уберите галочку возле пункта Скрывать защищенные системные файлы и в разделе Скрытые файлы и папки выберите Показывать скрытые файлы и папки . Далее владельцы процессоров AMD должны скачать и установить программу AMD DualCore Optimizer, Заметим, что если вы используете для управления частотой процессора не системные средства, а программу RMClock версии 2.15, то достаточно только добавить /usepmtimer в загрузочный файл. Если же, несмотря на выполнение вышеописанных действий, в ходе игры все равно возникают проблемы (зависания, выбрасывание на Рабочий стол и т. п.), то стоит попробовать жестко привязать игру к одному из ядер. Для этого после запуска игры нажимаем Ctrl+Alt+Del , в появившемся диспетчере задач щелкаем правой кнопкой на игре, выбираем пункт Перейти к процессам , затем кликаем опять правой кнопкой на выделенном процессе и выбираем Задать соответствие . В появившемся окне снимаем галочку возле одного из ядер, какого именно - не имеет значения, после чего закрываем окно, сам диспетчер задач и возвращаемся в игру. Если же после указанных действий проблемы не исчезли, и при этом у вас установлена видеокарта фирмы NVIDIA, можно попробовать отключить многопоточные оптимизации в видео-драйверах. Запускаем редактор реестра ( Пуск -> Выполнить -> regedit.exe), идем по адресу HKey_Local_MachineHardwareDeviceMapVideo и выписываем из переменной devicevideo0 адрес, по которому расположены настройки видеокарты. Заметим, что указанный адрес у систем Windows 2000 и Windows XP отличается, в Windows 2000 он будет иметь вид \REGISTRY\Machine\System\ControlSet001\Services\nv\Device0 , в то время как в Windows XP \Registry\Machine\System\Current ControlSet\Control\Video{DD18ED74-F584-4145-B29B-E3A6C6189FAA}\0000 . Переходим по указанному адресу, учитывая следующее: \Registry в данном случае говорит о том, что информация находится в реестре, а \Machine - что она хранится в разделе HKEY_LOCAL_MACHINE . Щелкаем мышью в правой части окна, выбираем Создать - Параметр DWORD , называем его OGL_ThreadControl и присваиваем ему значение 2 . Для отключения многопоточности в приложениях Direct3D нужно создать переменную WTD_EXECMODEL того же типа и присвоить ей значение 0 . [[COLOR="Red"Заметим, что обычно производители игр достаточно оперативно реагируют на проблемы такого рода, и прежде чем отключать поддержку двухъядерников, стоит проверить, нет ли COLOR]патча для игры, исправляющего возможные ошибки.

Добавлено через 17 минут
В прошлый раз погорячился про проц, думал что о пятёрке речь.
В ответ пользователю C13
C13;172867
Ну хрен его знает, могу посоветовть обновить дрова на видюху и переустановить игру. www.nvidia.ru А процессор здесь в натуре не причём.
Стоит последнее обновление

C13;172883

Далее владельцы процессоров AMD должны скачать и установить программу AMD DualCore Optimizer,
Стоит
C13;172883
Если же, несмотря на выполнение вышеописанных действий, в ходе игры все равно возникают проблемы (зависания, выбрасывание на Рабочий стол и т. п.), то стоит попробовать жестко привязать игру к одному из ядер. Для этого после запуска игры нажимаем Ctrl+Alt+Del , в появившемся диспетчере задач щелкаем правой кнопкой на игре, выбираем пункт Перейти к процессам , затем кликаем опять правой кнопкой на выделенном процессе и выбираем Задать соответствие . В появившемся окне снимаем галочку возле одного из ядер, какого именно - не имеет значения, после чего закрываем окно, сам диспетчер задач и возвращаемся в игру.
Не помогает
C13;172883
Если же после указанных действий проблемы не исчезли, и при этом у вас установлена видеокарта фирмы NVIDIA, можно попробовать отключить многопоточные оптимизации в видео-драйверах. Запускаем редактор реестра ( Пуск -> Выполнить -> regedit.exe), идем по адресу HKey_Local_MachineHardwareDeviceMapVideo и выписываем из переменной devicevideo0 адрес, по которому расположены настройки видеокарты. Заметим, что указанный адрес у систем Windows 2000 и Windows XP отличается, в Windows 2000 он будет иметь вид \REGISTRY\Machine\System\ControlSet001\Services\nv\Device0 , в то время как в Windows XP \Registry\Machine\System\Current ControlSet\Control\Video{DD18ED74-F584-4145-B29B-E3A6C6189FAA}\0000 . Переходим по указанному адресу, учитывая следующее: \Registry в данном случае говорит о том, что информация находится в реестре, а \Machine - что она хранится в разделе HKEY_LOCAL_MACHINE . Щелкаем мышью в правой части окна, выбираем Создать - Параметр DWORD , называем его OGL_ThreadControl и присваиваем ему значение 2 . Для отключения многопоточности в приложениях Direct3D нужно создать переменную WTD_EXECMODEL того же типа и присвоить ей значение 0 . [[COLOR="Red"Заметим, что обычно производители игр достаточно оперативно реагируют на проблемы такого рода, и прежде чем отключать поддержку двухъядерников, стоит проверить, нет ли COLOR]патча для игры, исправляющего возможные ошибки.

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


На каком-то форуме читал, что виноват СервисПак 2 Винды XP, хз
В ответ пользователю King Arthur
King Arthur;169910
Причем тут твои два ядра?
Первый раз такое слышу... сам на athlon х2 все переиграл...
Ищи причину в другом месте, скорее всего несовместимость с видеоадаптером или еще что нибудь...
У тебя видеокарта с интеграцией?
видео ати радеон 1600про. раньше с ним же на процессоре атлон 3000+ отлично игралось
В ответ пользователю Gjiod
Аватар пользователя
Gjiod и Gilmor, напишите что за материнки, что нибудь придумаем, а игруу по любому запустим!!!
Аватар пользователя
Недавно на бае нашёл похожую тему, такая прога есть и неплохо работает - сокращает до 10-15%. Тему почти никто не смотрит, поэтому искать щас в лом. Если кому-нить нужно - стучите в асю. 432-146-477

Статистика

Приветствуем новейшего участника: Emil

Сейчас на сайте 8 пользователей 1286 гостей