Добавление против производительности ORing - PullRequest
9 голосов
/ 04 апреля 2011

Я видел, как люди используют сложение, где побитовое ИЛИ было бы более концептуально подходящим, потому что они считают, что это быстрее. Это правда? Если да, все ли современные компиляторы знают этот трюк?

Ответы [ 4 ]

5 голосов
/ 04 апреля 2011

Как сложение, так и логическое ИЛИ, вероятно, выполняются в аналогичной части АЛУ ЦП.Маловероятно, что будет какая-либо измеримая разница в производительности, но это было бы измерено в вашей ситуации, чтобы быть уверенным.

Компиляторам не нужно будет беспокоиться об этом, потому что компилятор обычно может знать только это дополнение иORing даст тот же результат, если операнды константы , и в этом случае компилятор может просто выполнить арифметику во время компиляции и даже не генерировать для нее код.

3 голосов
/ 04 апреля 2011

«Концептуально уместно» и «быстрее» - это две разные вещи.Первый - это семантика, в то время как второй часто включает в себя разрыв семантики.

Что касается вопроса в заголовке, то очень мало (если есть) различий по скорости.Компилятор для процессора, где это действительно происходит, обычно все равно оптимизирует его - , если , это не приводит к разным результатам, что он вполне может и обычно .

Напишите свой код правильно - если вы хотите сказать ИЛИ, то ИЛИ.Если add-vs-OR заканчивается быстрее, либо ваш компилятор сделает это за вас, либо вы можете изменить его позже после , вы решили, стоит ли потенциальная дополнительная полсаносекунда за итерациюв удобочитаемости и ошибках, которые могут вызвать такие изменения.

2 голосов
/ 04 апреля 2011

На самом деле, компиляторы, как правило, достаточно умны, чтобы делать такую ​​замену, так или иначе. Термин для такого рода оптимизации - снижение прочности , и это самый старый трюк в книге.

0 голосов
/ 04 апреля 2011

Обычно это не быстрее и неправильно, если вы не знаете, что «добавляете» 1 к четному адресу или значению.

...