Суммирование быстрее, чем умножение?

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

В моем случае я хочу объединить два уровня шума и применить к ним пороговое значение. Я мог бы просто умножить их, так как они находятся в диапазоне от 0 в 1 и применить порог в том же диапазоне. Или я мог бы сложить их вместе и применить порог где-нибудь в диапазоне от 0 в 2, Я знаю, что алгоритмы не идентичны, но оба будут соответствовать моим требованиям.

-1

Решение

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

В этом случае нет существенной разницы. Какова разница между ними, зависит от фактического процессора, на котором выполняется код, точной последовательности операций (зависит ли одна операция от другой, где ответ не «готов», пока немного позже, и т. Д., Где другой алгоритм позволяет еще расчеты нужно делать параллельно). Таким образом, вам нужно будет реализовать две версии кода и измерить разницу в вашей системе. Если это что-то для запуска на разных машинах, вам нужно измерить это на нескольких типах машин с разными процессорами.

Это, конечно, предполагает, что очень важно быть «быстрым». Сколько времени это займет, и есть ли предел того, сколько времени вам «разрешено» принимать.

3

Другие решения

Стандартный ответ на вопросы оптимизации:

Сделайте вашу реализацию правильной и удобочитаемой в первую очередь. Затем проверьте, обеспечивает ли это приемлемую производительность. Если это не так, профилируйте свой код и проверьте, где вы теряете большую часть времени обработки. Тогда измените именно это.

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

2

Типичные (это зависит от процессора к процессору) номера для x86

        Latency 1/Throughput
fp add:    3         1
fp mul:    5         1-3
int add:   1         < 1
int mul:   3-7       1-4

Целые числа с большим количеством битов умножаются медленнее, а умножение двойной ширины (не выражаемое в C) еще медленнее.

Большая разница между int add и int mul не означает, что вы должны написать a+a (или же a << 1) вместо a*2источник не является (напрямую) определяющим производительность, а результирующий машинный код, и все серьезные компиляторы все равно будут снижать прочность.

2
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector