Оптимизация компилятора для максимально быстрого кода - PullRequest
1 голос
/ 14 января 2010

Я бы хотел выбрать оптимизацию компилятора для создания максимально быстрого приложения.

Какие из следующих настроек я должен установить в значение true?

  • Уничтожение мертвых магазинов
  • Устранить повторяющиеся выражения в основных блоках и функциях
  • Включить переменную индукции контура и снижение прочности
  • Включить планирование инструкций Pentium
  • Расширение общих встроенных функций
  • Оптимизация прыжков
  • Использовать переменные регистра

Существует также опция «Сгенерировать максимально быстрый код», которую я, очевидно, установил в true. Однако, когда я устанавливаю это в true, все вышеупомянутые параметры все еще устанавливаются в false.

Итак, я хотел бы знать, ускорит ли приложение какие-либо из перечисленных выше параметров, если я установлю их в значение true?

Ответы [ 3 ]

4 голосов
/ 14 января 2010

Итак, я хотел бы знать, ускорят ли какие-либо из перечисленных выше вариантов приложение, если я установлю их в значение true?

Я знаю, что некоторые будут ненавидеть меня за это, но никто здесь не может ответить вам правдиво . Вы должны попробовать свою программу с ними и без них, и профиль каждой сборки и посмотреть, каковы результаты. Угадай работу никого не застанет.

Компиляторы уже делают тонны (!) Большой оптимизации, с вашего разрешения или без него. Лучше всего написать код в чистом и организованном виде и беспокоиться о его удобстве обслуживания и расширяемости. Как я хотел бы сказать: код сейчас, потом оптимизировать.

1 голос
/ 14 января 2010

Не занимайтесь микроуправлением вплоть до индивидуальной оптимизации. Авторы компиляторов - очень умные люди - просто включите их все, если вы не видите особой необходимости. Ваше время лучше потратить на оптимизацию кода (улучшение алгоритмической сложности ваших функций и т. Д.), А не на настройку параметров компилятора.

Мой другой совет, используйте другой компилятор. Intel имеет отличную репутацию оптимизирующего компилятора. VC и GCC, конечно, также являются отличным выбором.

0 голосов
/ 14 января 2010

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

Поэтому было бы полезно профилировать приложение. Если есть очевидная часть, требующая скорости, добавьте некоторый код, чтобы выполнить его тысячу или десять миллионов раз, и время, используя utime(), если он доступен. Цикл должен выполняться достаточно долго, чтобы другие процессы, работающие периодически, не влияли на результат - от десяти до двадцати секунд - популярный диапазон тестов. Или запустить несколько испытаний времени. Скомпилируйте разные тесты и запустите их, чтобы увидеть, что работает лучше.

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

...