...

воскресенье, 13 декабря 2020 г.

Пользователи обнаружили, что Cyberpunk 2077 игнорирует SMT на чипах AMD, логические ядра на Intel используются полностью

Пользователи портала Reddit обнаружили, что игра Cyberpunk 2077, похоже, игнорирует одновременную многопоточность (Simultaneous Multithreading, SMT) и в основном использует только физические ядра ЦП на ПК с процессорами AMD. На компьютерах с чипами Intel игра использует все доступные физические и логические ядра центрального процессора.

На форуме было преложено решение — изменить несколько байт в EXE-файле игры. Нужно в Hex-редакторе найти строку 75 30 33 C9 B8 01 00 00 00 0F A2 8B C8 C1 F9 08 и изменить ее на EB 30 33 C9 B8 01 00 00 00 0F A2 8B C8 C1 F9 08. В этом случае на ПК с чипами AMD станут использоваться все логические ядра центрального процессора, а производительность игры улучшиться на 10-20%.
Пример утилизации ядер процессора AMD при запущенной игре Cyberpunk 2077 без изменений в Hex-редакторе.

Пример активации утилизации всех ядер процессора AMD при запущенной игре Cyberpunk 2077 после внесения изменений в Hex-редакторе.

Некоторые пользователи предположили, что это происходит из-за того, что Cyberpunk 2077 использует компилятор Intel C++, который препятствует оптимизации игры при работе на процессорах сторонних производителей. Однако, они не нашли подтверждения этой теории.

Сейчас основная версия пользователей — при запуске игры происходит проверка производительности текущей системы с помощью библиотеки GPUOpen, чтобы планировщик игры мог использовать оптимальное количество ядер, в зависимости от семейства процессоров, которые используют игроки. По какой то причине после проверки на ПК с чипами AMD, которые не на архитектуре Bulldozer, планировщик выделяет для игры меньше потоков.

Один из пользователей пояснил, что ранее, когда AMD начала продавать процессоры серии FX, то компания подвергалась критике за неправильный маркетинг своей продукции. Проблема заключалась в том, что их «8-ядерные» процессоры вводили покупателей в заблуждение и должны были продаваться как 4-ядерные 8-поточные процессоры или 4-ядерные процессоры с гиперпоточностью. То же самое с другими вариантами подсчета ядер. Другая проблема заключалась в том, что они пытались скрыть этот факт от программного обеспечения, что означало, что, когда программы пытались проверить, сколько ядер и потоков имеет ЦП, он неверно сообщал, что имеет «8 ядер и 8 потоков» вместо «4 ядра и 4 потока", в примере с«8-ядерным» процессором. AMD устранила эту проблему с процессорами в серии Ryzen. Однако, проверка в Cyberpunk 2077 того, установлен ли процессор AMD, и как нужно соответствующим образом настроить количество ядер, работает неправильно и соответствует подсчету, который использовался до выхода новых процессоров AMD.

Устаревший фрагмент кода для расчета потоков, который, как предположили пользователи, используется в:

WORD cores, logical;
getProcessorCount(cores, logical);
DWORD count = cores;
char vendor[13];
getCpuidVendor(vendor);
if ((0 == strcmp(vendor, "AuthenticAMD")) && (0x15 == getCpuidFamily())) {
        // AMD "Bulldozer" family microarchitecture
        count = logical;

Новый фрагмент кода для расчета потоков:

DWORD cores, logical;
getProcessorCount(cores, logical);
DWORD count = logical;
char vendor[13];
getCpuidVendor(vendor);
if (0 == strcmp(vendor, "AuthenticAMD")) {
        if (0x15 == getCpuidFamily()) {
                // AMD "Bulldozer" family microarchitecture
                count = logical;
        }
        else {
                count = cores;
        }
}

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

Первоначально пользователи пробовали заменять строку 75 30 33 C9 B8 01 00 00 00 0F A2 8B C8 C1 F9 08 на значения 74 30 33 C9 B8 01 00 00 00 0F A2 8B C8 C1 F9 08. Однако скоро выяснилось, что такая замена не совсем оптимальна, так как она инвертировала некорректную проверку библиотеки GPUOpen, а не нейтрализовала ее проведение. На ПК с процессорами Intel такую замену производить не рекомендуется даже ради тестов.

Примечательно, что вчера руководство студии CD PROJEKT RED взяло на себя ответственность за баги и проблемы, обнаруженные пользователями, на старте игры Cyberpunk 2077.

11 декабря вышел четвертый патч для Cyberpunk 2077, исправляющее многочисленные ошибки в игре, включая механику квестов, геймплей, визуализацию персонажей, а также улучшающий производительность и стабильность как версий игры на ПК, так и для игровых консолей.

См. также:

Let's block ads! (Why?)

Комментариев нет:

Отправить комментарий