Pull to refresh

Cyberpunk 2077 игнорирует многопоточность микропроцессора AMD

Game developmentDesktop PC'sCPUGames and game consoles


Пользователи сайта 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 ядер и 8 потоков» в примере с «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 декабря вышел патч 1.04 для Cyberpunk 2077, исправляющий многочисленные ошибки в игре, включая механику квестов, геймплей, визуализацию персонажей, а также улучшающий производительность и стабильность как версий игры на ПК, так и для игровых консолей.

Обновление публикации. 19 декабря 2020 года вышел патч 1.05, в котором была решена проблема с производительностью, использованию SMT и процессорами AMD. Правда, разработчики уточнили, что патч улучшает ситуацию только для 4-ядерных и 6-ядерных процессоров AMD Ryzen. Для обладателей 8-ми, 12-ти и 16-ядерных процессоров патч не помогает. Это происходит из-за того, что студия CD Projekt Red совместно с AMD протестировала различные конфигурация и выяснила, что улучшение производительности с SMT происходит только на процессорах с 6 ядрами и менее.

См. также:

Tags:Cyberpunk 2077SMTAMDIntelпроизводительность
Hubs: Game development Desktop PC's CPU Games and game consoles
Total votes 30: ↑25 and ↓5 +20
Views44K

Popular right now