Такая ситуация странная. Купили для работы AMD Ryzen 3970. Предполагалось на нем многопоточно считать наши мат. задачи.
До этого использовали Core i9 10850K ( 10 ядер + 10 Hyper-threading ).
По итогу имею вот такую некрасивую картинку....
40 миллионов наших мат итераций ( мат операции не содержат операций с плавающей запятой вообще, только сложение, вычитание, умножение и сдвиг )
- на Intel при использовании 20 потоков занимает 20,5 секунд
- на Amd при использовании 64 потоков занимает 37,0 секунд
При этом в мониторе ресурсов видно что все ядра Intel загружены на 100% а AMD на 35-45%
установка приоритетов при создании потока никакого эффекта не имеет:
threads[ core ] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)testMathThread, params, 0, NULL);
::SetThreadPriority( threads[ core ], THREAD_PRIORITY_HIGHEST);
::SetThreadAffinityMask( threads[ core ], 1 << core );
Глобальных переменных нет. У каждого потока свой собственный объект в памяти куда они заносят свои результаты.
Если делать расчет на одном ядре то результат такой: 4 миллиона итераций Intel 7.7 сек. AMD 9.25 сек
Включение / выключение в BIOS SMT у AMD практически ничего не меняет.
Переключение в Windows профиля питания со схемы
AMD Rizen Balanced на схему "
Максимальная производительность" то время обработки увеличивается на 10-12% до 45с.
Такое ощущение что у АМД где то предохранитель стоит который не позволяет ядро загрузить на 100%.
40-50% и всё
Последняя надежда разобраться что блин происходит на сообщество. А то уже руки тянутся обратно в магазин сдать.
PS да, оперативная память идентичная на обоих машинах DDR4 3200 по 32 гига на каждой. Но матан память мало есть.