Cyberpunk 2077 игнорира SMT технологията на AMD, но логическите ядра на Intel изцяло се използват

33
2531

Потребителите на Reddit забелязаха, че играта Cyberpunk 2077 игнорира технологията на AMD за многонишкова работа SMT (Simultaneous Multithreading) и използва само физическите ядра на процесорите на Advanced Micro Devices. При компютрите с процесори на Intel, играта използва всички достъпни физически и логически ядра на централния процесор.

Във форума бе предложено много елегантно решение – промяната на няколко байта в изпълнимия EXE файл на играта. Необходимо е с помощта на шестнадесетичен редактор да бъде намерена поредицата от байтове 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 започват да използват всички логически ядра на централния процесор, като производителността нараства с над 20%.

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

След направените промени играта използва както физическите, така и логическите ядра на чиповете на AMD

Някой потребители предположиха, че това се е случило, понеже играта Cyberpunk 2077 се компилира с помощта на компилатора Intel C++, в който може би липсват съответните оптимизации за процесорите на други производители. Засега не са намерени потвърждения на тази теория.

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

Оказа се че проверката за броя нишки в тази библиотека става чрез следния остарял код:

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;
             }
}

Потребителите  на Reddit счетоха, че по принцип в играта Cyberpunk 2077 е трябвало да се използва по-новата версия на кода като начин за оптимизиране производителността на компютърната система на потребителите и за пресмятането на броя използвани нишки. Вероятно още следващия пач ще отстрани този проблем.

Интересно е че вчера ръководството на полското гейм студио CD PROJEKT RED пое върху себе си отговорността за тези бъговете, открити от потребителите и за възникналите от това проблеми при стартирането на играта Cyberpunk 2077.

5 1 глас
Оценете статията
Абонирай се
Извести ме за
guest
33 Коментара
стари
нови оценка
Отзиви
Всички коментари