_mm256_msubadd_pd
Требуется Visual Studio 2010 с пакетом обновления 1 (SP1).
Только для систем Microsoft
Формирует инструкцию vfmsubaddpd FMA4 YMM для выполнения операции попеременного умножения-сложения/вычитания с одним округлением значений двойной точности с плавающей запятой над своими источниками.
__m256d _mm256_msubadd_pd (
__m256d src1,
__m256d src2,
__m256d src3
);
Параметры
[входящий] src1
256-битный параметр, содержащий четыре 64-битных значения с плавающей запятой.[входящий] src2
256-битный параметр, содержащий четыре 64-битных значения с плавающей запятой.[входящий] src3
256-битный параметр, содержащий четыре 64-битных значения с плавающей запятой.
Возвращаемое значение
256-битный результат r, содержащий четыре 64-битных значения с плавающей запятой.
r[i] := src1[i] * src2[i] + src3[i]; // i even
r[i] := src1[i] * src2[i] - src3[i]; // i odd
Требования
Встроенный объект |
Архитектура |
---|---|
_mm256_msubadd_pd |
FMA4 |
Файл заголовка <intrin.h>
Заметки
Каждое из четырех значений двойной точности с плавающей запятой в параметре src1 умножается на соответствующее значение в параметре src2. Каждое значение-источник с четным номером в параметре src3 складывается с соответствующим ему произведением, каждое значение с нечетным номером вычитается из соответствующего ему произведения, после чего каждый результат сохраняется в виде соответствующего значения в целевом объекте. Каждая пара операций умножения-сложения/вычитания выполняется с одним округлением в конце, как если бы промежуточные результаты вычислялись с бесконечной точностью.
Инструкция vfmsubaddpd входит в состав семейства инструкций FMA4. Прежде чем использовать эту встроенную инструкцию, необходимо убедиться, что процессор ее поддерживает. Чтобы определить, имеется ли аппаратная поддержка этой инструкции, вызовите встроенную инструкцию __cpuid с InfoType = 0x80000001 и проверьте бит 16 в CPUInfo[2] (ECX). Этот бит равен 1, если инструкция поддерживается, и 0 в противном случае.
Пример
#include <stdio.h>
#include <intrin.h>
int main()
{
__m256d a, b, c, d;
int i;
for (i = 0; i < 4; i++) {
a.m256d_f64[i] = i;
b.m256d_f64[i] = 2.;
c.m256d_f64[i] = 3.;
}
d = _mm256_msubadd_pd(a, b, c);
for (i = 0; i < 4; i++) printf_s(" %.3lf", d.m256d_f64[i]);
printf_s("\n");
}
См. также
Ссылки
Другие ресурсы
Встроенные объекты FMA4, добавленные в Visual Studio 2010 с пакетом обновления 1 (SP1)
Журнал изменений
Дата |
Журнал |
Причина |
---|---|---|
Март 2011 |
Добавлено это содержимое. |
Изменение функции SP1. |