Задать вопрос

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

Есть старая игрушка, Scarface, на конфигурациях с двух(и более)-ядерными процессорами запускается, но графика в игре становится в виде сплошных артефактов, только текст и 2d элементы отображаются корректно:
image

Решение этой проблемы было найдено только одно, отключение в системе использования процессором второго ядра:
image

Собственно, мне любопытно, нельзя ли заставить exe этой конкретной игры использовать только одно ядро, без манипуляций с системными опциями? Программки типа CPU Control пробовал, в данном случае не помогают, как и Set Affinity в диспетчере задач.
Играть в неё я не собираюсь, так что интересует именно техническая сторона вопроса.
  • Вопрос задан
  • 6896 просмотров
Подписаться 4 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
@Sayonji
Set affinity не помогает, возможно, потому что применяется уже после запуска. Можно попробовать сделать это до запуска.
Play.bat:
start /affinity 1 Scarface.exe
Ответ написан
@grechnik
Зависит от того, в чём проблема.

Если бы проблема была в плохой синхронизации между создаваемыми потоками, ломающейся на многопроцессорных системах, то start /affinity 1 помог бы; это не ваш случай.

Если кто-то где-то получает число процессоров в системе и неправильно обрабатывает случай с числом процессоров > 1, то можно перехватить GetSystemInfo и всегда возвращать число процессоров = 1 (поищите статьи про Detours, например, здесь на Хабре).

Если код в драйверных глубинах DirectX при обнаружении нескольких процессоров передаёт какие-то задачи отрисовки фоновому потоку, а программа тут же затирает переданные данные, вам ничего не поможет.
Ответ написан
foxmuldercp
@foxmuldercp
Системный администратор, программист, фотограф
отдать ей виртуалку с одним ядром? в hyper-v на win8 вполне можно штатно рулить виртуалками
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы