Несколько способов оптимизации сложных алгоритмов с несколькими ветвлениями:
- Устранение ветвления. 1 Например, замена на условное присваивание или выбор из таблицы. 1
- Вынос ветвления за пределы цикла (loop unswitching — размыкание цикла). 1
- Оптимизация вызовов подпрограмм. 1 Например, подстановка функций в код, передача параметров через регистры, использование парных команд call/ret. 1
- Использование беззнаковых переменных. 2 Они легче оптимизируются, особенно когда компилятор пытается избавиться от ветвлений. 2
- Замена ветвлений математическими операциями. 2 Например, компилятор msvc поддерживает замену ветвлений математическими операциями. 2
- Изменение порядка ветвлений. 3 Например, можно поддерживать набор очередей заданий, а затем на основе инструкций if назначать их правильной очереди заданий, прежде чем выполнять их одно за другим. 3
Для выбора оптимального способа оптимизации рекомендуется использовать профилирование. 3