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