Оптимизация арифметики
Долгое время я просто имел не особо подкреплённое мнение, что нужно заменять деление умножением при возможности. Потом тесты показали, что смысла нет. А потом первый заплыв в тесты микропроцессоров и более тщательное показали, что нужно делать. И не только это.
В видео забыл упомянуть, что просто повторение одной и той же операции 10к раз не даёт видимого лага, а вот именно такое подключение: когда одно число всё время перезаписывается результатом вычисления, выявляет проблему. Файл прилагаю:
blend
mathTest.blend136.17 Kb
Таблица тестов микроконтроллеров взята отсюда: https://disk.yandex.ru/i/JquuObnQxRNJaw, она прилагалась к видео «Мегагерцы не решают»
Сложение и вычитание — примерно равные процедуры. Оптимизация может дать 1—5% разницы под конкретной процессорной архитектурой. Обычно смысла не имеет.
Умножение чуть медленнее сложения и вычитания. Обычно не имеет смысла оптимизировать, разве что вы число удваиваете. Тогда проще сложить с собой.
Деление. Может быть в 2—5 раз медленнее чем умножение. Если есть возможность заменить его на умножение с обратным числом (1/число), то обязательно сделайте при большом количестве операций (миллионы и больше).
Возведение в степень. Самая медленная операция! Может быть в десятки раз медленнее умножения, потому возведение в квадрат и куб лучше заменить на умножение на себя.
Взятие квадратного корня. Вторая по медлительности операция. Вдвое быстрее степени. Так что если ваша степень получилась 1/2, то заменяйте на корень квадратный.
Тригонометрические функции (синус) могут быть вдвое дольше чем умножение. По возможности и надобности лучше предрасчитать или взять значения из готовой таблицы.
математика
обучение
geometry nodes
шейдеры
blender3d