Потоки OpenMP не полностью используют ядра ЦП на новой машинеC++

Программы на C++. Форум разработчиков
Ответить
Гость
 Потоки OpenMP не полностью используют ядра ЦП на новой машине

Сообщение Гость »


У меня есть многопоточное приложение, которое параллельно решает огромную матрицу. Недавно я сменил свой ноутбук, и на новом ноутбуке началось странное поведение. В старом ноутбуке использовался процессор 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. Ниже приведены некоторые из свойств моего проекта:
Изображение

Изображение

Изображение

Изображение

Изображение


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

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»