Какова вычислительная стоимость умножения с плавающей запятой против сложения?
Игнорирование всех других проблем, таких как передача памяти и т. Д.
Я ищу некоторую меру "стоимости", которую, я думаю, я бы оценил как ожидаемое число переворачиваний битов для умножения двух случайных чисел с плавающей запятой (скажем, 32-битных) на стоимость добавления.
Я предполагаю, что могут быть некоторые важные вопросы (например, имеют ли числа одинаковый показатель степени и т. Д.), Которые стоит рассмотреть.
Редактировать: чтобы уточнить, меня интересует количество энергии, необходимое для выполнения этих операций, а не время или количество оборудования, поэтому я думаю, что "ожидаемое количество битовых переключений" - это количество интереса. Я думаю, что это четко определенный вопрос, и, безусловно, существует некоторое "ожидаемое количество битовых переворотов", требуемое данным алгоритмом для выполнения умножения с плавающей запятой... И я ищу минимум для всех алгоритмов.
Редактировать 2: Спасибо всем за ответы. Наиболее релевантный ответ, который я получил, был от Нюффы, который сослался на оценки Марка Горовица (см. Стр. 33). Более современная статья Горовица публикует несколько иные цифры, а именно:
Float32 Mult: 3.7pJ.
Float32 Add: 0.9pJ
Int32 Mult: 3.1pJ
Int32 Add: 0.1pJ
1 ответ
На современных процессорах умножение с плавающей запятой обычно немного дороже, чем сложение (это одна из причин, по которой компиляторы обычно заменяют 2*x
от x+x
).
На x86 и x86_64 операции с плавающей запятой почти всегда выполняются с использованием инструкций SSE (ADDSS, MULSS и т. Д.), Для которых сложение и умножение являются постоянным временем без "ранних выходов" (что упрощает конвейеризацию).
Фактическую относительную стоимость определить труднее, и она будет зависеть от многих факторов. Каноническая ссылка здесь - "Списки задержек инструкций, пропускной способности и сбоев микроопераций" Агнера Фога: http://www.agner.org/optimize/
Одна грубая эвристика, о которой я слышал (хотя у меня нет ссылок), заключается в том, что умножение занимает примерно 50% больше времени.