Ryzen, SMT и польский код

Наткнулся на интересную статью на хабре с названием "Библиотека от AMD стала причиной плохой производительности процессоров AMD в Cyberpunk 2077":

Если коротко, то функция, сообщающая число потоков CPU, возвращает число физических ядер на процессорах Ryzen, но число логических для Bulldozer (и, вероятно, Intel). И функция это содержится в библиотеке GPUOpen, которая принадлежит, собственно, AMD.

На сайте GPUOpen существует пояснительная статья, в которой AMD указывают на этот момент и советуют подбирать число используемых потоков индивидуально. Но, видимо, CDPR до неё не добрались.

P.S. Существует ещё более ранняя англоязычная статья.

1111
19 комментариев

Комментарий недоступен

5

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

5

Согласен, вопрос сложный)
Но вообще объяснение AMD, как по мне, довольно странное.
For today’s Ryzen processors with SMT enabled, we’ve found that the vast majority of multithreaded games and applications work and scale really well when managing an active thread pool up to the number of logical cores that the processor supports. However, our experience with a small number of games is that driving a hardware thread pool with more than the number of physical cores can reduce performance, primarily due to contention for available per-core resources by the multiple running hardware threads. However, for our own prior generation of Bulldozer-based processors designs, we recommend a default thread count equal to the number of logical processor cores. Other processor vendors are encouraged to provide their own guidance to software developers. AMD does not provide guidance for other processor vendors.Tl;dr: В большинстве случаев SMT работает хорошо, но иногда нет. Тем не менее, для Bulldozer мы советуем использовать число потоков, равное числу логических ядер.
И далее:
we strongly recommend that you profile your games extensively Our sample code, linked below, errs on the side of caution for our Ryzen processors and encourages you to profile: the getDefaultThreadCount() function draws attention to that fact, returning a starting default count equal to the number of physical processor cores on Ryzen.То есть "мы возвращаем физическое число ядер для Ryzen, чтобы мотивировать вас профилировать свои игры".
Как видим, на поляков мотивация не сработала (на самом деле не обратили внимания, наверное).

2

Согласен, пока не ясно в какую сторону нужно воевать в данном вопросе)

1

У меня все игры на юнити валились походу из за многопотока, после отключения smt даже pathfinder kingmaker удалось пройти спокойно

Я слышал про проблемы SMT на райзенах, но вроде бы это было во время выхода первых поколений (собственно, из тех времён и статья на GPUOpen). Она до сих пор осталась?
Просто интересно, почему эта библиотека до сих пор работает так. Либо почему проджекты взяли старую версию. Ну и почему они вообще это упустили.

1

Я слыхал, шо компилировали в intel c ++ и для рузеня в этой игре настали тяжелые времена.