Здравствуйте!
Есть курсовая, а в ней программа, выполняющая несколько алгоритмов: умножение матриц, сортировки, поворот изображения и кодирование видео(не спрашивайте зачем этот зоопарк ). Очень важна производительность. Так как программа будет тестироваться на разных процессорах(старшие модели i-серии, Core2 Duo и Quadro, AMD Turion), то не хотелось бы, что бы программа из-за оптимизации на одном CPU летала, а на другом безбожно тормозила.
Компилятор GCC 4.5.
Система Windows 7 x64.
Процессор: Intel i5 2410M
Вопросы:
Какие флаги оптимизации выставлять?
Использовать ли -О-сколько-нибудь, -march?
Как в целом влияет -OX на производительность на разных CPU?
Нужно ли выставить значение -march на какой-нибудь i686 или core2(тестирование на более ранних CPU не предполагается)?
Помогите кто чем сможет Заранее благодарен.
Re: Влияние оптимизации на выполнение программы на разных ти
Здравствуйте, alex.mironochev, Вы писали:
AM>Есть курсовая... AM>Какие флаги оптимизации выставлять? AM>Использовать ли -О-сколько-нибудь, -march? AM>Как в целом влияет -OX на производительность на разных CPU?
Ну вот и исследуй, курсовая же, используй свой шанс
Потом напиши статью в RSDN Mag по результатам — будет публикация в ваковском журнале заодно.
Здравствуйте, alex.mironochev, Вы писали:
AM>Здравствуйте! AM>Есть курсовая, а в ней программа, выполняющая несколько алгоритмов: умножение матриц, сортировки, поворот изображения и кодирование видео(не спрашивайте зачем этот зоопарк ). Очень важна производительность. Так как программа будет тестироваться на разных процессорах(старшие модели i-серии, Core2 Duo и Quadro, AMD Turion), то не хотелось бы, что бы программа из-за оптимизации на одном CPU летала, а на другом безбожно тормозила. AM>Компилятор GCC 4.5. AM>Система Windows 7 x64. AM>Процессор: Intel i5 2410M AM>Вопросы: AM>Какие флаги оптимизации выставлять? AM>Использовать ли -О-сколько-нибудь, -march? AM>Как в целом влияет -OX на производительность на разных CPU? AM>Нужно ли выставить значение -march на какой-нибудь i686 или core2(тестирование на более ранних CPU не предполагается)? AM>Помогите кто чем сможет Заранее благодарен.
Я для gcc использую следующие параметры: -O3 -funroll-loops -ffast-math -ftree-vectorize -DNDEBUG
Как видите, ничего не привязано к процессору.
На данный момент gcc с этими параметрами в моей ЧМ программе быстрее intel 12.1 компилятора с параметрами -fast -parallel -unroll-aggressive -opt-prefetch -fp-model fast -DNDEBUG в полтора раза.
Приложение однопоточное, процессор Intel(R) Core(TM)2 Quad CPU Q9450 @ 2.66GHz памяти 4 гига, система 64 бита.
Я пытался играться с процессор-спесифик параметрами для интел, но они ни сколько не уменьшили отставание от gcc.
Есть подозрение, что интел отстает потому, что в моем коде очень много всего завязано на шаблонах. Но с параметрами раскрутки шаблонов я еще не экспериментировал.
я не знаю генерирует ли по умолчанию gcc код, оптимальный для того процессора, на котором он запущен...
думаю, никогда не помешает пересобрать свой код перед запуском там, где собираешься его тестировать.
Re[2]: Влияние оптимизации на выполнение программы на разных
Здравствуйте, Андрюха, Вы писали: А>Я для gcc использую следующие параметры: -O3 -funroll-loops -ffast-math -ftree-vectorize -DNDEBUG
Вы забыли про Graphite и LTO.
Здравствуйте, alex.mironochev, Вы писали:
AM>Здравствуйте! AM>Есть курсовая, а в ней программа, выполняющая несколько алгоритмов: умножение матриц, сортировки, поворот изображения и кодирование видео(не спрашивайте зачем этот зоопарк ).
Linpack'а не хватает. Хотя вопрос, не он ли скрывается под "умножением матриц".
AM> Очень важна производительность. Так как программа будет тестироваться на разных процессорах(старшие модели i-серии, Core2 Duo и Quadro, AMD Turion), то не хотелось бы, что бы программа из-за оптимизации на одном CPU летала, а на другом безбожно тормозила.
На самом деле таких жёстких различий уже не будет. Обычно это до полутора раз в зависимости от оптимизации под процессор неподходящего формата.
AM>Какие флаги оптимизации выставлять? AM>Использовать ли -О-сколько-нибудь, -march? AM>Как в целом влияет -OX на производительность на разных CPU? AM>Нужно ли выставить значение -march на какой-нибудь i686 или core2(тестирование на более ранних CPU не предполагается)?
Вы же сказали "x64"? Это автоматом предполагает соответствующий уровень (i686, MMX, SSE1-3, и прочие вкусности, которые гарантированно есть в этой линейке). Поставить i686 уже просто не получится.
Общий уровень оптимизации — да, не менее -O2.
Далее уже играться.