У меня есть многопоточное приложение, которое параллельно решает огромную матрицу. Недавно я сменил свой ноутбук, и на новом ноутбуке началось странное поведение. В старом ноутбуке использовался процессор Intel(R) Core(TM) i9-11950H 11-го поколения, а в новом ноутбуке установлен Intel(R) Core(TM) 12-го поколения i9-12900H. сильный>. При запуске моего многопоточного приложения (с использованием 4 потоков) на старом ноутбуке я вижу, что эти потоки захватывают более 4 ядер и полностью их используют, а общая загрузка ЦП составляет около 50%, поскольку ноутбук имеет 8 физических ядер. Пожалуйста, смотрите картинку ниже:

При запуске того же приложения с использованием одного и того же (точно того же) исполняемого двоичного файла я вижу, что только одно ядро полностью загружено, остальные находятся на уровне 10–20 %, а общая загрузка ЦП составляет менее 15 %. Пожалуйста, посмотрите на следующую картинку:

Есть ли объяснение, почему один и тот же двоичный файл запускается на одном компьютере и не запускается на другом?
Примечания:
[*]Я использую OpenMP для создания тредов. [*]Я пытался установить высокий приоритет тем, но это не помогло.
Примечание: На ноутбуке с процессором Intel(R) Core(TM) i9-12900H 12-го поколения я отключил ядра E в BIOS, чтобы потоки назначались только ядрам P, и это не устранило проблему. Пожалуйста, смотрите ниже:

На рисунке выше видно, что только поток 1 полностью использует свой процессор.
Я запускаю свои темы следующим образом:
CALL OMP_SET_NUM_THREADS(4) !$OMP PARALLEL DO PRIVATE(i) ДО я = 1, 4, 1 CALLsolve_axb_r_submat(n, A, line_A, X, B, flag, i, submatrix_number, Fkluunit(i)) КОНЕЦ ДЕЛАТЬ !$OMP END PARALLEL DO Приведенный выше код вызывается более 20 000 раз, поэтому каждая итерация вызывает функцию, имеющую фрагмент кода выше. Я работаю над окнами с Visual Studio 2022 и OpeApi 2023. Ниже приведены некоторые из свойств моего проекта:





Обратите внимание на командную строку, которую мы добавили для определения сходства потоков на последнем изображении. Добавив это, мы видим, что потоки закреплены на одном ядре и не перемещаются между ядрами.
Мобильная версия