Операция умножения-накопления

редактировать

В вычислениях, особенно при цифровой обработке сигналов, операция умножения-накопления ( MAC) или умножения-сложения ( MAD) является обычным шагом, на котором вычисляется произведение двух чисел и складывается это произведение в сумматор. Аппаратный блок, выполняющий операцию, известен как умножитель-накопитель ( блок MAC); сама операция также часто называется операцией MAC или MAC. Операция MAC изменяет аккумулятор a:

  а а + ( б × c ) {\ Displaystyle \ а \ leftarrow а + (Ь \ раз с)}

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

Современные компьютеры могут содержать выделенный MAC, состоящий из умножителя, реализованного в комбинационной логике, за которым следует сумматор и регистр накопителя, в котором хранится результат. Выходной сигнал регистра возвращается на один вход сумматора, так что в каждом тактовом цикле выход умножителя добавляется к регистру. Комбинационные множители требуют большого количества логики, но могут вычислить произведение намного быстрее, чем метод сдвига и сложения, типичный для более ранних компьютеров. Перси Ладгейт был первым, кто задумал MAC в своей Аналитической машине 1909 года, и первым, кто использовал MAC для деления (используя умножение с засеваемым на обратное, через сходящийся ряд (1+ x) -1). Первыми современными процессорами, оснащенными блоками MAC, были цифровые сигнальные процессоры, но теперь этот метод также широко используется в процессорах общего назначения.

СОДЕРЖАНИЕ

  • 1 В арифметике с плавающей запятой
  • 2 Слитное умножение – сложение
    • 2.1 инструкция по продукту
    • 2.2 Поддержка
  • 3 ссылки

В арифметике с плавающей запятой

Когда выполняется с целыми числами, операция обычно точная (вычисляется по модулю некоторой степени двойки ). Однако числа с плавающей запятой обладают лишь определенной математической точностью. То есть цифровая арифметика с плавающей запятой обычно не является ассоциативной или распределительной. (См. Плавающая точка § Проблемы точности. ) Следовательно, для результата имеет значение, выполняется ли умножение-сложение с двумя округлениями или с одной операцией с одним округлением (объединенное умножение-сложение). IEEE 754-2008 указывает, что это должно выполняться с одним округлением, что дает более точный результат.

Слитное умножение – сложение

Слиты умножения-сложения ( ФМА или fmadd) является плавающей точкой умножения-сложения операция, выполняемая на одном этапе, с одним округлением. То есть, если несвязанное умножение – сложение будет вычислять произведение b × c, округлить его до N значащих битов, добавить результат к a и округлить обратно до N значащих битов, объединенное умножение – сложение вычислит все выражение a + ( b × c) до полной точности перед округлением конечного результата до N значащих битов.

Быстрая FMA может ускорить и повысить точность многих вычислений, связанных с накоплением продуктов:

Обычно для получения более точных результатов можно положиться на объединенное умножение – сложение. Однако Уильям Кахан указал, что при бездумном использовании он может вызвать проблемы. Если x 2 - y 2 оценивается как (( x × x) - y × y) (следуя предложенной Каханом нотации, в которой избыточные круглые скобки предписывают компилятору сначала округлить член ( x × x)) с использованием слитного умножения – сложения, тогда результат может быть отрицательным, даже если x = y из-за того, что первое умножение отбрасывает биты с низкой значимостью. Это может привести к ошибке, если, например, вычисляется квадратный корень из результата.

При реализации внутри микропроцессора FMA может быть быстрее, чем операция умножения, за которой следует сложение. Однако стандартные промышленные реализации, основанные на оригинальной конструкции IBM RS / 6000, требуют 2 N- битного сумматора для правильного вычисления суммы.

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

Инструкция по продукту Dot

Некоторые машины объединяют несколько слитных операций умножения и сложения в один шаг, например, выполнение скалярного произведения из четырех элементов на двух 128-битных регистрах SIMD a0×b0 + a1×b1 + a2×b2 + a3×b3 с пропускной способностью за один цикл.

Служба поддержки

Операция FMA включена в IEEE 754-2008.

Digital Equipment Corporation (DEC) VAX «s POLYинструкция используется для вычисления полиномов с правилом Горнера, используя последовательность умножения и добавить шаги. В описаниях инструкций не указывается, выполняются ли умножение и сложение с использованием одного шага FMA. Эта инструкция была частью набора инструкций VAX с момента его первоначальной реализации 11/780 в 1977 году.

Стандарт +1999 на языке программирования Си поддерживает операцию FMA через fma()стандартную функцию математической библиотеки, и стандартные псевдокомментарии ( #pragma STDC FP_CONTRACT), управляющие оптимизации на основе FMA.

Операция слитного умножения-сложения была введена как «слияние умножения-сложения» в процессоре IBM POWER1 (1990), но с тех пор была добавлена ​​во многие другие процессоры:

  • Векторные процессоры:
  • использованная литература

    Последняя правка сделана 2023-03-20 09:59:30
    Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
    Обратная связь: support@alphapedia.ru
    Соглашение
    О проекте