Какова вычислительная стоимость умножения с плавающей запятой против сложения?

Игнорирование всех других проблем, таких как передача памяти и т. Д.

Я ищу некоторую меру "стоимости", которую, я думаю, я бы оценил как ожидаемое число переворачиваний битов для умножения двух случайных чисел с плавающей запятой (скажем, 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% больше времени.

Другие вопросы по тегам