Умножение с плавающей запятой не может быть выполнено с помощью сдвига битов.Однако теоретически умножение с плавающей запятой на 2 константы можно оптимизировать .Значение с плавающей запятой обычно хранится в виде S * M * 2 ^ E
, где S
- знак, M
- мантисса и E
- показатель степени.Умножение на степень 2 можно сделать, добавив / вычтя часть экспоненты float
, не изменяя другие части.Но на практике я бы поспорил, что на графических процессорах всегда используется общая команда умножения.
У меня было интересное наблюдение относительно мощности 2 констант при изучении вывода разборки PVRShaderEditor (графических процессоров PowerVR).Я заметил, что в определенном диапазоне мощностей 2 констант ([2 ^ (- 16), 2 ^ 10] в моем случае) используются специальные обозначения, например, C65, подразумевая, что они предопределены.Принимая во внимание, что произвольные константы, такие как 3.0 или 2.3, используют нотацию общего регистра (например, SH12), что подразумевает, что они хранятся как единое целое и, вероятно, требуют некоторой стоимости установки.Таким образом, использование мощности 2 констант может дать некоторую оптимизационную выгоду, по крайней мере, на некотором оборудовании.