Влияние оптимизации на выполнение программы на разных типах
От: alex.mironochev  
Дата: 01.03.12 16:10
Оценка:
Здравствуйте!
Есть курсовая, а в ней программа, выполняющая несколько алгоритмов: умножение матриц, сортировки, поворот изображения и кодирование видео(не спрашивайте зачем этот зоопарк ). Очень важна производительность. Так как программа будет тестироваться на разных процессорах(старшие модели i-серии, Core2 Duo и Quadro, AMD Turion), то не хотелось бы, что бы программа из-за оптимизации на одном CPU летала, а на другом безбожно тормозила.
Компилятор GCC 4.5.
Система Windows 7 x64.
Процессор: Intel i5 2410M
Вопросы:
Какие флаги оптимизации выставлять?
Использовать ли -О-сколько-нибудь, -march?
Как в целом влияет -OX на производительность на разных CPU?
Нужно ли выставить значение -march на какой-нибудь i686 или core2(тестирование на более ранних CPU не предполагается)?
Помогите кто чем сможет Заранее благодарен.
Re: Влияние оптимизации на выполнение программы на разных ти
От: jazzer Россия Skype: enerjazzer
Дата: 02.03.12 01:30
Оценка: +2
Здравствуйте, alex.mironochev, Вы писали:

AM>Есть курсовая...

AM>Какие флаги оптимизации выставлять?
AM>Использовать ли -О-сколько-нибудь, -march?
AM>Как в целом влияет -OX на производительность на разных CPU?

Ну вот и исследуй, курсовая же, используй свой шанс

Потом напиши статью в RSDN Mag по результатам — будет публикация в ваковском журнале заодно.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: Влияние оптимизации на выполнение программы на разных ти
От: Андрюха  
Дата: 02.03.12 03:27
Оценка:
Здравствуйте, 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]: Влияние оптимизации на выполнение программы на разных
От: Андрюха  
Дата: 02.03.12 03:28
Оценка:
А>Я для gcc использую следующие параметры: -O3 -funroll-loops -ffast-math -ftree-vectorize -DNDEBUG

Забыл указать:
Ubuntu 11.10 64-bit
gcc version 4.6.1
Re[2]: Влияние оптимизации на выполнение программы на разных
От: niXman Ниоткуда https://github.com/niXman
Дата: 02.03.12 05:02
Оценка:
Здравствуйте, Андрюха, Вы писали:
А>Я для gcc использую следующие параметры: -O3 -funroll-loops -ffast-math -ftree-vectorize -DNDEBUG
Вы забыли про Graphite и LTO.

http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re: Влияние оптимизации на выполнение программы на разных ти
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 17.03.12 11:22
Оценка:
Здравствуйте, 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.
Далее уже играться.
The God is real, unless declared integer.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.