Оптимизация компилятора для максимально быстрого кода

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

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

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

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

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

3 ответа

Решение

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

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

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

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

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

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

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

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

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