Производительность параллельного кода OpenMP с оптимизацией компилятора и без него (Sun CC)

Я работаю над проектом, в котором нас попросили написать простой код OpenMP для распараллеливания программы, работающей с дифференциальными уравнениями. Нас также попросили проверить производительность кода с оптимизацией компилятора и без нее. Я работаю с компилятором Sun CC, поэтому для оптимизированной версии я использовал параметры

-xopenmp -fast

и для неоптимизированных

-xopenmp=noopt

Не удивительно, что время работы с оптимизацией компилятора было намного меньше, чем в другом случае. Что меня удивляет, так это то, что показатели масштабирования намного лучше в неоптимизированной версии. Здесь под производительностью я подразумеваю коэффициент ускорения, то есть отношение времени выполнения программы на М процессорах и времени работы программы на 1 процессоре.

Намекнули, что это может зависеть от того факта, что оптимизированная версия связана с памятью, а неоптимизированная версия - с процессором. Я не уверен, как "ограниченность" может повлиять на масштабируемость моего кода. Есть ли у вас предложения?

1 ответ

В большинстве многопроцессорных систем несколько ядер ЦП имеют общий путь к памяти. У данного выходного двоичного файла будет определенная внутренняя вычислительная интенсивность (вычисления на доступ к байту) на поток. Когда количество ядер, на которых вы запускаете код, позволяет ему превысить скорость работы, превышающую необходимую пропускную способность памяти для его поддержки, он прекратит масштабирование с использованием дополнительных ядер. Чтобы получить четкое представление о том, как рассуждать об этой проблеме, посмотрите "модель крыши".

Есть два изменения, которые я ожидаю увидеть от включения оптимизации. Одним из них является то, что интенсивность вычислений должна несколько увеличиться, если оптимизация обеспечит какой-либо вид циклической блокировки для уменьшения доступа к памяти. Другое заключается в том, что необработанная скорость работы должна увеличиваться при лучшей идентификации возможностей векторизации и последующего выбора и планирования команд. Эти две вещи должны оказывать противоположное влияние на эффективность масштабирования, но последняя явно доминирует в вашем случае.

Другие вопросы по тегам