Повышение производительности за счет быстрого умножения со сдвигом битов - PullRequest
2 голосов
/ 11 октября 2011

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

Пример, о котором я читал, вдохновлял реализациюx * 320 as (x << 8 + x << 6) для часто используемой подпрограммы. </p>

Насколько это актуально в современных компиляторах?Если существует значительный прирост производительности, могут ли компиляторы автоматически не преобразовывать эти «простые умножения» в сдвиги битов по мере необходимости?

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

1 Ответ

3 голосов
/ 11 октября 2011

Да, компиляторы сделают большинство из них для вас. Они тоже довольно агрессивны. Так что редко нужно делать это самостоятельно. (особенно за счет читабельности)

Однако на современных машинах умножение не «намного» медленнее, чем сдвиги. Таким образом, любое число, для которого требуется более двух смен, лучше сделать с помощью умножения. Компиляторы знают это и будут выбирать соответственно.

EDIT:

Исходя из моего опыта, я никогда не мог превзойти компилятор в этой области, если код не был векторизован с помощью встроенных функций SSE (которые компиляторы на самом деле не пытаются оптимизировать).

...