Производительность падает x64 с OpenMP - PullRequest
1 голос
/ 21 февраля 2012

Я заметил очень странное поведение при запуске моего кода в x64 «режиме» с VS 2008, в режиме Release.

Я стремлюсь к повышению производительности, поэтому я превратил свой проект на платформу x64 (мой оригинальныйПроект написан как консольное приложение Win32).

Я действительно добился некоторого улучшения, но также обнаружил очень странное поведение во время выполнения.Я использую прагмы OpenMP для распараллеливания циклов («для»).Поэтому, когда я запускаю свою программу (Win32) на четырехъядерном процессоре i5, я вижу 100% загрузки процессора и 4 потока.Это нормально.

Но когда я переключаюсь в режим x64 (в Projet Properties-> Configuration Manager -> ...), загрузка 100% падает (через 3-5 минут) до75%, 50% или даже 25%.Но все же, есть 4 (!) Потока, запущенных.(По данным Resource Monitor).

Как можно получить только 25% от общей производительности ЦП при всех 4-х ступенях?Предполагается, что каждый поток работает на своем отдельном ядре.

PS ОС Windows 7 x64 и VS 2008.

Заранее спасибо!Любые предложения приветствуются!

AK

1 Ответ

0 голосов
/ 23 февраля 2012

Решено:

Я думаю, что знаю ответ на свой вопрос: только 25% загрузки процессора, когда все 4 шага активны, означает, что 3 из 4 ядер завершили свою работу и ждут, пока последнее ядро ​​завершит свою работу. Вероятно, это ядро ​​застряло в вычислениях (есть интегральные вычисления, и если интеграл не сходится, он пытается уменьшить размер шага и продолжить вычисления).

Не знаю точно, это мое предположение.

...