Jump to content

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

(Перенаправлено с Умножить-аккумулировать )

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

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

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

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

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

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

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

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

Объединенное умножение-сложение ( FMA или fmadd ) [7] — операция умножения-сложения чисел с плавающей запятой, выполняемая за один шаг ( слитная операция ) с одним округлением. То есть, если неслитое умножение-сложение вычисляет произведение b × c , округляет его до N значащих битов, добавляет результат к a и округляет обратно до N значимых битов, объединенное умножение-сложение вычисляет все выражение a + ( b × c ) до полной точности перед округлением окончательного результата до N значащих битов.

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

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

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

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

Инструкция скалярного произведения

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

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

Поддерживать

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

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

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

Стандарт 1999 года языка программирования C поддерживает операцию FMA через fma() стандартная функция математической библиотеки и автоматическое преобразование умножения с последующим сложением (сокращением выражений с плавающей запятой), которое можно явно включить или отключить с помощью стандартных прагм ( #pragma STDC FP_CONTRACT). Компиляторы GCC и Clang C по умолчанию выполняют такие преобразования для процессорных архитектур, поддерживающих инструкции FMA. С GCC, который не поддерживает вышеупомянутую прагму, [12] этим можно глобально управлять с помощью -ffp-contract опция командной строки. [13]

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

См. также

[ редактировать ]
  1. ^ «Возможность создания аналитической машины Ладгейта» . Архивировано из оригинала 7 августа 2019 г. Проверено 30 августа 2020 г.
  2. ^ Ляхов, Павел; Валуева, Мария; Валуев Георгий; Нагорнов, Николай (январь 2020 г.). «Метод повышения производительности цифрового фильтра на основе усеченных многократно-накопительных единиц» . Прикладные науки . 10 (24): 9052. дои : 10.3390/app10249052 .
  3. ^ Тунг Тхань Хоанг; Сьяландер, М.; Ларссон-Эдефорс, П. (май 2009 г.). «Умножение-накопление двойной пропускной способности для усовершенствований процессора FlexCore» . 2009 Международный симпозиум IEEE по параллельной и распределенной обработке . стр. 1–7. дои : 10.1109/IPDPS.2009.5161212 . ISBN  978-1-4244-3751-1 . S2CID   14535090 .
  4. ^ Кан, Чонсон; Ким, Тэван (01 марта 2020 г.). «PV-MAC: единичная структура умножения и накопления, использующая изменчивость точности в сверточных нейронных сетях на устройстве» . Интеграция . 71 : 76–85. дои : 10.1016/j.vlsi.2019.11.003 . ISSN   0167-9260 . S2CID   211264132 .
  5. ^ "безумный - пс" . 20 ноября 2019 г. Проверено 14 августа 2021 г.
  6. ^ Уайтхед, Натан; Фит-Флоря, Алекс (2011). «Точность и производительность: числа с плавающей запятой и соответствие стандарту IEEE 754 для графических процессоров NVIDIA» (PDF) . нвидиа . Проверено 31 августа 2013 г.
  7. ^ "fmadd инструкции" . ИБМ .
  8. ^ Кахан, Уильям (31 мая 1996 г.). «Стандарт IEEE 754 для двоичной арифметики с плавающей запятой» .
  9. ^ Куиннелл, Эрик (май 2007 г.). Архитектуры смешанного умножения-сложения с плавающей запятой (PDF) (кандидатская диссертация) . Проверено 28 марта 2011 г.
  10. ^ Маркштейн, Питер (ноябрь 2004 г.). Деление программного обеспечения и квадратный корень с использованием алгоритмов Гольдшмидта (PDF) . 6-я конференция «Действительные числа и компьютеры». CiteSeerX   10.1.1.85.9648 .
  11. ^ «VAX-инструкция недели: POLY» . Архивировано из оригинала 13 февраля 2020 г.
  12. ^ «Ошибка 20785 — Pragma STDC * (C99 FP) не реализована» . gcc.gnu.org . Проверено 2 февраля 2022 г.
  13. ^ «Параметры оптимизации (с использованием коллекции компиляторов GNU (GCC))» . gcc.gnu.org . Проверено 2 февраля 2022 г.
  14. ^ Монтойе, РК; Хокенек, Э.; Руньон, СЛ (январь 1990 г.). «Проектирование исполнительного блока IBM RISC System/6000 с плавающей запятой». Журнал исследований и разработок IBM . 34 (1): 59–70. дои : 10.1147/rd.341.0059 . Значок закрытого доступа
  15. ^ «Godson-3 эмулирует x86: новый китайский процессор, совместимый с MIPS, имеет расширения для трансляции x86» .
  16. ^ Холлингсворт, Брент (октябрь 2012 г.). «Новые инструкции для «Бульдозера» и «Сваебойщика» . Центр разработчиков AMD.
  17. ^ «Intel добавляет 22-нм восьмиядерный процессор Haswell в план разработки процессоров» . Регистр . Архивировано из оригинала 17 февраля 2012 г. Проверено 19 августа 2008 г.
  18. ^ «Руководство по программированию микроконтроллеров STM32 Cortex-M33» (PDF) . СТ . Проверено 6 мая 2024 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: f91f368aea3f9f4f32fac3319bdaaed9__1720751820
URL1:https://arc.ask3.ru/arc/aa/f9/d9/f91f368aea3f9f4f32fac3319bdaaed9.html
Заголовок, (Title) документа по адресу, URL1:
Multiply–accumulate operation - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)