Оптимизация компилятора для максимально быстрого кода
Я хотел бы выбрать оптимизацию компилятора для создания максимально быстрого приложения.
Какие из следующих настроек я должен установить в true?
- Устранение мертвых магазинов
- Устранить повторяющиеся выражения в основных блоках и функциях
- Включить переменную индукции контура и снижение прочности
- Включить планирование команд Pentium
- Раскройте общие встроенные функции
- Оптимизировать прыжки
- Используйте переменные регистра
Существует также опция "Сгенерировать максимально быстрый код", которую я, очевидно, установил в true. Однако, когда я устанавливаю это в true, все вышеупомянутые параметры все еще устанавливаются в false.
Поэтому я хотел бы знать, ускорит ли какой-либо из перечисленных выше вариантов приложение, если я установлю их в значение true?
3 ответа
Поэтому я хотел бы знать, ускорит ли какой-либо из перечисленных выше вариантов приложение, если я установлю их в значение true?
Я знаю, что некоторые будут ненавидеть меня за это, но никто здесь не может ответить вам правдиво. Вы должны попробовать свою программу с и без них, и профилировать каждую сборку и посмотреть, каковы результаты. Угадайка никуда не денется.
Компиляторы уже делают тонны (!) Большой оптимизации, с вашего разрешения или без него. Лучше всего написать свой код в чистом и организованном виде, а также позаботиться о удобстве обслуживания и расширяемости. Как я хотел бы сказать: код сейчас оптимизировать позже.
Не занимайтесь микроуправлением вплоть до индивидуальной оптимизации. Авторы компиляторов - очень умные люди - просто включите их все, если вы не видите особой необходимости. Ваше время лучше тратить на оптимизацию кода (улучшение алгоритмической сложности ваших функций и т. Д.), А не на настройку параметров компилятора.
Мой другой совет, используйте другой компилятор. Intel имеет отличную репутацию оптимизирующего компилятора. VC и GCC, конечно, также являются отличным выбором.
Вы можете посмотреть на сгенерированный код с различными скомпилированными опциями, чтобы увидеть, какой из них самый быстрый, но я понимаю, что в настоящее время многие люди не имеют опыта в этом.
Поэтому было бы полезно профилировать приложение. Если есть очевидная часть, требующая скорости, добавьте некоторый код, чтобы выполнить его тысячу или десять миллионов раз и время, используя utime()
если это доступно. Цикл должен работать достаточно долго, чтобы другие процессы, работающие периодически, не влияли на результат - от десяти до двадцати секунд - популярный диапазон тестов. Или запустить несколько испытаний времени. Скомпилируйте разные тесты и запустите их, чтобы увидеть, что работает лучше всего.
Потратив час или два на игру с опциями оптимизации, вы быстро обнаружите, что большинство из них имеют незначительный эффект. Однако то же самое время, потраченное на размышления о сути алгоритма и внесение небольших изменений (удаление кода особенно эффективно), часто может значительно сократить время выполнения.