3DNow! — устаревшее расширение набора инструкций x86, разработанное компанией Advanced Micro Devices. Оно добавляет дополнительные SIMD-инструкции к базовому набору инструкций x86, позволяя выполнять обработку векторных операций с плавающей точкой с использованием векторных регистров, что повышает производительность многих приложений с интенсивной графикой. Первым микропроцессором, реализовавшим 3DNow, стал AMD K6-2, который был представлен в 1998 году. При использовании инструкций в подходящих задачах скорость обработки повышалась в 2-4 раза.

Технология 3DNow! ввела 21 новую команду процессора и возможность оперировать 32-битными вещественными типами в стандартных MMX-регистрах. Также были добавлены специальные инструкции, оптимизирующие переключение в режим MMX/3DNow! (femms, которая заменяла стандартную инструкцию emms) и работу с кэшем процессора. Таким образом технология 3DNow! расширяла возможности технологии MMX, не требуя введения новых режимов работы процессора и новых регистров.

Начиная с микроархитектуры Bulldozer расширение не поддерживается (за исключением команды prefetch). page 207: «19 AMD Bulldozer, Piledriver, Steamroller and Excavator pipeline: The 3DNow instructions are no longer supported, except for the prefetch instructions.»

Проверка поддержки 3DNow! процессором Перед началом работы с расширением 3DNow! следует убедиться, что ЦП их поддерживает. Для этого используется инструкция CPUID. Общий порядок действий при проверке выглядит следующим образом:

Убедиться, что процессор поддерживает инструкцию CPUID. Если нет, то ЦП не поддерживает и 3DNow!. Выполнить инструкцию cpuid со значением EAX = 0 — это необходимо для следующего шага. Выполнить CPUID со значением EAX = 80000000h. Если после выполнения инструкции в EAX будет значение меньше 1, то 3DNow! не поддерживается. Выполнить CPUID с EAX = 80000001h. Если после выполнения бит 31 регистра EDX будет установлен в 1, то 3DNow! поддерживается. Иначе — нет.

Инструкции 3DNow!

PAVGUSB — вычисление среднего 8-битовых целых значений PI2FD — перевод 32-битных целых в вещественные числа PF2ID — перевод вещественных в 32-битные целые числа PFCMPGE — сравнение вещественных чисел, больше или равно PFCMPGT — сравнение вещественных чисел, больше PFCMPEQ — сравнение вещественных чисел, равно PFACC — накопление суммы вещественных чисел PFADD — сложение вещественных чисел PFSUB — вычитание вещественных чисел PFSUBR — обратное вычитание вещественных чисел PFMIN — нахождение минимума вещественных чисел PFMAX — нахождение максимума вещественных чисел PFMUL — умножение вещественных чисел PFRCP — нахождение приближённого значения обратной величины вещественных чисел (1/x) PFRSQRT — нахождение приближённого значения, обратного от квадратного корня (1/sqrt(x)) вещественных чисел PFRCPIT1 — первый шаг вычисления значения, обратного (1/x) вещественных чисел PFRSQIT1 — первый шаг вычисления значения, обратного от квадратного корня (1/sqrt(x)) вещественных чисел PFRCPIT2 — второй шаr вычисления значения, обратного или обратного от квадратного корня вещественных чисел PMULHRW — умножение 16-битных целых чисел с округлением FEMMS — быстрое переключение состояния FPU/MMX PREFETCH/PREFETCHW — предвыборка строки кэша процессора из памяти FEMCA — нахождение интегрального вектора

Процессоры, поддерживающие 3DNow! начиная с AMD K6-2 и до Phenom X6 включительно; из современных процессоров AMD инструкции 3DNow! не поддерживают процессоры с архитектурой Bulldozer, AMD Fusion и Zen. National Semiconductor Geode GX2, AMD Geode GX/LX/NX VIA C3/CoreFusion/Eden IDT WinChip 2

См. также Инструкция CPUID.

Примечания

Ссылки Будущие процессоры AMD лишатся поддержки инструкций 3DNow 3DNow! Instructions are Being Deprecated | AMD Developer

Категория:Инструкции x86 Категория:Расширения архитектуры x86