Игра использует только одно ядро процессора

Обновлено: 07.07.2024

Как я понял, суть проблемы в движке игры, который пользует только одно ядро.

Мне кажется, выход в запуске виртуальной машины, т.е. VirtualBox, он будет юзать 2 ядра, а в VirtualBox будет прописано одно. Такое реально? Или я глупости говорю?

Я думаю, что эмулятор эмулятором, но скорости это не прибавит. Если все основные инструкции игры прописаны для одного ядра, значит одно ядро и будет обрабатывать весь ворох информации. А VirtualBox просто добавит работы всей системе в том числе памяти, шинам обмена и прочим атрибутам компьютера. Овчинка не стоит выделки.

Ну игра и будет использовать одно ядро, только в виртуаальной машине, а машина будет юзать 2,3,4.
Суть в том, что мощностей пк хватает слихвой, да вот движок не умеет пользоваться всеми ядрами и загружает одно.
Или Вы имеете в виду, что виртуалбокс не может эмулировать больше/меньше ядер? — 7 лет назад Боксу нужно не эмулировать, а реально подключать другие ядра. Если VirtualBox прописан авторами так,что будет задействованы остальные ядра процессора, то они и будут задействованы. Вот только скорости это самой игры не прибавит.
Я знаю точно, что большинство игрушек задействует одно ядро. Попытки использовать параллельные потоки не пользуются популярностью. Во-первых, задействуют уже проверенный хороший движок, который был написан когда-то лет 10 назад. А он одноядерный. Да и зачем изобретать велосипед. Ну и "мататЫ" больше, а это удорожает разработку игрушки и удлиняет сроки выхода. А это влияет на конкуренцию. Ну и кроме того почти все видео, а значит и скорость это видеокарта. Вот она должна быть весьма хорошей. — 7 лет назад

Глупости говорите. Игра может быть оптимизирована для многоядерных процессоров - это даст незначительный прирост скорости. Если оптимизация не была сделана, то процессор самостоятельно будет выполнять задачи в многопоточном режиме, пусть это будет и не так эффективно, как мог бы сделать человек.

Виртуальная машина только затормозит работу компьютера, соответственно и игра будет медленнее.

Есть игровой сервер Killing Floor. 4х ядерный процессор. При пиковой нагрузке сервера в htop колонка CPU равна 100% (бывает 105%), но используется только 1 ядро из 4. Остальные незагружены. И на сервере начинаются ЛАГИ. Это так и должно быть, чтобы 1 процессор обрабатывает 1 процесс? И как это изменить?


Переписать приложение, чтобы оно умело в многопроцессорность.

Переписать с поддержкой OpenMP


если приложение не умеет овер 1 поток, то хоть что делай
можешь разве что планировщиком заставить скакать с ядра на ядро, не более того
а чтобы изменить сие, надо *внезапно* дать разрабу_по_яйцам/заплатить и просить многопоточную версию

Это не вариант, я не программист да и этот сервер без исходников. Есть другие варианты? Просто странно получается, 3 ядра прохлаждаются, одно загружено. Причем то, которое загружено постоянно меняется, то есть они обрабатывают процесс по очереди, но не одноврименно.

В принципе можно еще, например, три программы запустить и чтобы каждая свой IP обслуживала.

Больше вариантов нет.


странно? тебе же написали - так задумано
вот тебе задачка: почеши одной рукой одновременно оба уха и пятку, не забыв погладить котэ.



Можно, чтением мануалов.


Если процесс многопоточный, то htop отобразит его как несколько процессов (во всяком случае это настраивалось). Если процесс представляет собой один поток, то и работать он будет на одном процессоре.


покурить ман/прочие_доки по сабжу?
возможно софтина ждёт от тебя ключиков каких, типа -jX, -nX, --threads=X и т.д.


я за тебя погуглил - оно не умеет несколько потоков
расходимся

megabaks ★★★★ ( 13.01.13 22:33:22 )
Последнее исправление: megabaks 13.01.13 22:33:27 (всего исправлений: 1)

Это не вариант, я не программист да и этот сервер без исходников. Есть другие варианты? Просто странно получается, 3 ядра прохлаждаются, одно загружено.

Ничего странного. У тебя есть шоссе 4 полосы и жигули семерка. Странно, ты едешь всего 100км/ч по одной полосе, а 3 другие прохлаждаются.

Странно - это если ты на этих жигулях будешь делать 400км/ч сразу по всему шоссе.

htop отображает 4 одинаковых процесса, но загружает CPU только один из них, остальные просто висят.


ещё какой то graphite был

А можешь дать ссылку? Я сколько не пытался найти эту инфу, нигде не видел.


Тогда ещё вариант: отключи 2-3 ядра, а оставшееся разгони до 4; 4,5 гГц. Не забудь про повышение вольтажа на конкретное ядро!

В этой папке 4 других папки с номерами PID'ов каждого процесса.

Хм, это вариант. А можно отключать отдельные ядра на Core 2 quad q8300 s775?


давно закрыл уже


Проще проц заменить на малоядерный, но высокогерцовый.


А fx-8350 подойдет? Вроде там 4 ГГц.

Тогда ещё вариант: отключи 2-3 ядра, а оставшееся разгони до 4; 4,5 гГц. Не забудь про повышение вольтажа на конкретное ядро!

Ага, а потом ловить рандомные глюки в разных местах =).

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


ну cpuburn же ну 😌


Просто проигрывает новым процам, а у него старый. Мб fx-8350 потянул бы эту задачу, там хоть и ядер 8, но 4 Ггц. Почему-то этот случай заставил меня задуматься, брать ли fx-8350 :)

Использовать разгон на серверных задачах - дрючево и нищебродство.


Это странно. Если htop показывает и в /proc/PID/task несколько каталогов, значит многопоточный.

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

Наверное в /proc/PID/task серверу разрешено использовать 4 ядра по умолчанию, но он это не поддерживает.


В /proc/PID/task показывается именно количество потоков, созданных процессом (сервером). Причём для создания каждого потока процесс должен делать системный вызов, то есть это полностью инициатива сервера, а не то, что операционная система разрешает использовать несколько ядер процессора.

Вобще, Killing Floor ведь сделан на движке Unreal, наверное у них и сервер на одной кодовой базе, поэтому можно поискать, что пишут про многоядерность сервера для Unreal.

Не помню писал или нет, сервер работает в chroot окружении, может это еще как-то влияет.

Как в Windows 8.1 заставить приложения использовать одно ядро

Почти все современные компьютеры обладают процессорами с двумя и большим количеством ядер, что даёт им немалые преимущества перед их одноядерными предшественниками. Чем же так хороши многоядерные процессоры?

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

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

Как в Windows 8.1 заставить приложения использовать одно ядро

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

Как в Windows 8.1 заставить приложения использовать одно ядро

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

Как в Windows 8.1 заставить приложения использовать одно ядро

Убедиться в этом вы можете сами. Откройте Диспетчер задач, переключитесь на вкладку «Производительность» и вы увидите, что все ядра используются одновременно. Это замечательно, но с другой стороны при определённых обстоятельствах это может снизить производительность системы и сторонних приложений. Это можно наблюдать на примере выполнения некоторых фоновых задач.

Как в Windows 8.1 заставить приложения использовать одно ядро

Когда вы выполняете дефрагментацию диска, системная утилита дефрагментатор использует все имеющиеся ядра. Если «отобрать» у неё несколько ядер, другие приложения получат больше ресурсов, а значит, начнут работать немного быстрее. Осуществить это очень просто. Опять же открываем Диспетчер задач, переходим на вкладку «Подробности» и отыскиваем нужный процесс. Далее кликаем по нему правой кнопкой мыши и в открывшемся меню выбираем опцию «Задать сходство». При этом появится небольшое окошко с нескольким чекбоксами, каждый из которых будет соответствовать одному конкретному ядру. Нумеруются они с нуля. Снимаем лишние галочки и оставляем только одну. Какую из них именно оставлять, выбирайте сами.

Точно так же можно изменить параметры любого системного процесса, но вот только делать этого не рекомендуется. Зато с процессами сторонних приложений можете экспериментировать, не боясь что-то напортить. К тому же при перезагрузке компьютера все настройки автоматически сбрасываются к значениям по умолчанию.

Примечание. Процедура настройки многопоточности в Windows 8.1 ничем не отличается от её настройки в Windows 7. Только опция «Задать сходство» в Windows 7 называется «Задать соответствие», а сами настройки выполняются во вкладке «Процессы».

Если же вы хотите автоматизировать процедуру назначения процессорных ядер программе, вам придется изменить параметры её запуска. Сделать это можно в свойствах ярлыка исполняемого файла. Для примера возьмем какую-нибудь программу, скажем, браузер Opera. По умолчанию она использует все ядра. Оставим ей одно ядро, а остальные освободим. Откройте свойства ярлыка и замените содержимое поля «Объект» строкой c:windowssystem32cmd.exe /C start /affinity 2 opera.exe.

Как в Windows 8.1 заставить приложения использовать одно ядро

Сохраните изменения и запустив саму программу двойным кликом по ярлыку. Теперь откройте Диспетчер задач и убедитесь, что браузер работает на одном ядре. За назначение ядра отвечает ключ affinity. Значение 2 означает, что браузер будет «посажен» на третье первое ядро 1 (CPU1). Почему на первое, а не на второе? Потому что нумерация ядер начинается с нуля.

Как в Windows 8.1 заставить приложения использовать одно ядро

По идее, если поставить значение 3, программе должно быть присвоено второе ядро, но это не так. В этом случае программа получит сразу два ядра — CPU0 и CPU1. В общем, чтобы вы не путались, прилагаем небольшую таблицу соотношений ключа affinity и его значений. Пример приведен для четырехядерного процессора.

Как в Windows 8.1 заставить приложения использовать одно ядро

И еще один момент. Редактируемый ярлык обязательно должен указывать на исполняемый файл программы. Если это будет копия с другого ярлыка, программа запустится с параметрами, которые прописаны в оригинальном ярлыке.

Выбрать ядро процессора

Распределение ядер процессора для выполнения определенной программы может оказаться полезным, если у на Вашем компьютере присутствует ресурсоемкое приложение, которое нельзя выключить, и которое при этом мешает нормальной работе за компьютером. Например, выделив антивирусу Касперского одно ядро процессора для работы, мы можем, пусть незначительно, но ускорить игру и FPS в ней. С другой стороны, если у вас компьютер сильно тормозит, это не тот, метод, который Вам поможет. Нужно искать причины, см: Тормозит компьютер

Назначение логических процессоров определенной программе в Windows 7 и Windows 8

Указанные функции работают в Windows 7, Windows 8 и Windows Vista. О последней я не говорю, так как ее мало кто использует у нас в стране.

Запустите Диспетчер Задач Windows и:

  • В Windows 7 откройте вкладку «Процессы»
  • В Windows 8 откройте «Подробности»

Выбрать соответствие процессора

Кликните правой клавишей мыши по интересующему Вас процессу и выберите в контекстном меню пункт «Задать сходство». Появится окно «Соответствие процессоров», в котором Вы можете указать, какими ядрами процессора (или, вернее, логическими процессорами) программе разрешено пользоваться.

Выбор логических процессоров для выполнения программы

Вот и все, теперь процесс использует только те логические процессоры, которые ему разрешили. Правда происходит это ровно до следующего его запуска.

Как запустить программу на определенном ядре процессора (логическом процессоре)

В Windows 8 и Windows 7 имеется также возможность запустить приложение так, чтобы сразу после запуска оно использовало определенные логические процессоры. Для того, чтобы сделать это, запуск приложения нужно осуществлять с указанием соответствия в параметрах. Например:

В этом примере будет запущено приложение software.exe с использованием 0-го (ЦП 0) логического процессора. Т.е. цифра после affinity указывает номер логического процессора + 1. Эту же команду Вы можете записать в ярлык приложения, чтобы оно всегда запускалось с использованием определенного логического процессора. К сожалению, мне не удалось найти информации, как передать параметр таким образом, чтобы приложение использовало не один логический процессор, а сразу несколько.

UPD: нашел как запустить приложение на нескольких логических процессорах с помощью параметра affinity. Указываем маску в шестнадцатеричном формате, например требуется использовать процессоры 1, 3, 5, 7, соответственно, это будет 10101010 или 0xAA, передаем в виде /affinity 0xAA.

Читайте также: