3DNow! — устаревшее расширение набора инструкций x86 , разработанное Advanced Micro Devices (AMD). Оно добавляет инструкции SIMD ( одиночная инструкция множественных данных ) к базовому набору инструкций x86, позволяя выполнять векторную обработку векторных операций с плавающей точкой с использованием векторных регистров . Это улучшение повышает производительность многих графически интенсивных приложений. Первым микропроцессором, реализовавшим 3DNow!, был AMD K6-2 , представленный в 1998 году. В соответствующих приложениях это улучшение увеличило скорость примерно в 2–4 раза. [1]
Однако набор инструкций так и не получил большой популярности, и в августе 2010 года AMD объявила, что поддержка 3DNow! будет прекращена в будущих процессорах AMD, за исключением двух инструкций PREFETCH
и PREFETCHW
. [2] Эти две инструкции также доступны в процессорах Bay-Trail Intel. [3]
3DNow! был разработан в то время, когда 3D-графика становилась мейнстримом в мультимедиа и играх для ПК. Отображение 3D-графики в реальном времени сильно зависело от блока обработки плавающей точки (FPU) центрального процессора для выполнения вычислений с плавающей точкой , задача, в которой процессор AMD K6 легко уступал своему конкуренту Intel Pentium II.
В качестве усовершенствования набора инструкций MMX набор инструкций 3DNow! дополнил регистры MMX SIMD для поддержки общих арифметических операций (сложение/вычитание/умножение) с данными с плавающей точкой одинарной точности (32 бита). Программное обеспечение, написанное для использования 3DNow! AMD вместо более медленного x87 FPU, могло выполняться до четырех раз быстрее, в зависимости от набора инструкций.
Первая реализация технологии 3DNow! содержит 21 новую инструкцию, поддерживающую операции с плавающей точкой SIMD . Формат данных 3DNow! — упакованный, с одинарной точностью , с плавающей точкой. Набор инструкций 3DNow! также включает операции для целочисленных операций SIMD, предварительную выборку данных и более быстрое переключение MMX-в-плавающую точку. Позже Intel добавила аналогичные (но несовместимые) инструкции в Pentium III , известные как SSE (Streaming SIMD Extensions).
Инструкции 3DNow! с плавающей точкой следующие:
PI2FD
– Упакованное преобразование 32-битного целого числа в число с плавающей точкойPF2ID
– Преобразование упакованного числа с плавающей точкой в 32-битное целое числоPFCMPGE
– Упакованное сравнение с плавающей точкой, больше или равноPFCMPGT
– Упакованное сравнение с плавающей точкой, большеPFCMPEQ
– Упакованное сравнение с плавающей точкой, равноPFACC
– Упакованное накопление с плавающей точкойPFADD
– Упакованное сложение с плавающей точкойPFSUB
– Упакованное вычитание с плавающей точкойPFSUBR
– Упакованное обратное вычитание с плавающей точкойPFMIN
– Минимальный упакованный с плавающей точкойPFMAX
– Упакованный максимум с плавающей точкойPFMUL
– Упакованное умножение чисел с плавающей точкойPFRCP
– Упакованная обратная аппроксимация с плавающей точкойPFRSQRT
– Упакованная аппроксимация обратного квадратного корня с плавающей точкойPFRCPIT1
– Упакованная обратная плавающая точка, первый шаг итерацииPFRSQIT1
– Упакованный обратный квадратный корень с плавающей точкой, первый шаг итерацииPFRCPIT2
– Упакованная плавающая точка, обратная/обратная квадратная корень, второй шаг итерацииЦелочисленные инструкции 3DNow! следующие:
PAVGUSB
– Усреднение упакованных 8-битных беззнаковых целых чиселPMULHRW
– Упакованное 16-битное целочисленное умножение с округлениемИнструкции по повышению производительности 3DNow! следующие:
FEMMS
– Более быстрый вход/выход из состояния MMX или с плавающей точкойPREFETCH/PREFETCHW
– Предварительная выборка как минимум 32-байтовой строки в кэш данных L1 (это единственная не устаревшая инструкция)Мало или совсем нет доказательств того, что вторая версия 3DNow! когда-либо официально получила собственное торговое название. Это привело к некоторой путанице в документации, которая ссылается на этот новый набор инструкций. Наиболее распространенными терминами являются Extended 3DNow! , Enhanced 3DNow! и 3DNow!+ . Фразу "Enhanced 3DNow!" можно найти в нескольких местах на веб-сайте AMD, но использование заглавных букв в слове "Enhanced" кажется либо чисто грамматическим, либо используется для акцента на процессорах, которые могут иметь или не иметь эти расширения (наиболее заметный из которых ссылается на страницу с результатами тестов для K6-III-P, которая не имеет этих расширений). [4] [5]
Это расширение набора инструкций 3DNow! было представлено в процессорах Athlon первого поколения . Athlon добавил пять новых инструкций 3DNow! и 19 новых инструкций MMX. Позже K6-2+ и K6-III+ (обе были нацелены на мобильный рынок) включили пять новых инструкций 3DNow!, исключив 19 новых инструкций MMX. Новые инструкции 3DNow! были добавлены для ускорения DSP . Новые инструкции MMX были добавлены для ускорения потокового мультимедиа .
19 новых инструкций MMX являются подмножеством набора инструкций SSE компании Intel. В технических руководствах AMD AMD выделяет эти инструкции отдельно от расширений 3DNow!. [4] Однако в литературе по продуктам клиентов AMD это выделение менее очевидно, поскольку преимущества всех 24 новых инструкций приписываются усовершенствованной технологии 3DNow!. [6] Это привело к тому, что программисты придумали собственное название для 19 новых инструкций MMX. Наиболее распространенным, по-видимому, является Integer SSE ( ISSE ). [7] SSEMMX и MMX2 также встречаются в документации по видеофильтрам из сектора общественного достояния. ISSE также может относиться к Internet SSE, раннему названию SSE.
Инструкции DSP расширения 3DNow! следующие:
PF2IW
– Упакованное преобразование числа с плавающей точкой в целое слово с расширением знакаPI2FW
– Преобразование упакованного целого слова в число с плавающей точкойPFNACC
– Упакованное с плавающей точкой отрицательное накоплениеPFPNACC
– Упакованная плавающая точка смешанного положительно-отрицательного накопленияPSWAPD
– Упакованный своп-двойникИнструкции расширения MMX (Integer SSE) следующие:
MASKMOVQ
– Потоковое (обход кэша) хранилище с использованием байтовой маскиMOVNTQ
– Потоковое хранилище (обход кэша)PAVGB
– Упакованное среднее значение беззнакового байтаPAVGW
– Упакованное среднее беззнакового словаPMAXSW
– Упакованное максимальное знаковое словоPMAXUB
– Упакованный максимальный беззнаковый байтPMINSW
– Упакованное минимальное знаковое словоPMINUB
– Упакованный минимальный беззнаковый байтPMULHUW
– Упакованное умноженное высокое беззнаковое словоPSADBW
– Упакованная сумма абсолютных разностей байтовPSHUFW
– Упакованное перетасованное словоPEXTRW
– Извлечь слово в целочисленный регистрPINSRW
– Вставить слово из целочисленного регистраPMOVMSKB
– Переместить байтовую маску в целочисленный регистрPREFETCHNTA
– Предварительная выборка с использованием ссылки NTAPREFETCHT0
– Предварительная выборка с использованием ссылки T0PREFETCHT1
– Предварительная выборка с использованием ссылки T1PREFETCHT2
– Предварительная выборка с использованием эталона T2SFENCE
– Забор магазина3DNow! Professional — это торговое название, используемое для обозначения процессоров, которые объединяют технологию 3DNow! с полным набором инструкций SSE (таким как SSE, SSE2 или SSE3). [8] Athlon XP был первым процессором, носившим торговое название 3DNow! Professional, и был первым продуктом в семействе Athlon, который поддерживал полный набор инструкций SSE (всего: 21 оригинальная инструкция 3DNow!; пять инструкций 3DNow! расширения DSP; 19 инструкций расширения MMX; и 52 дополнительные инструкции SSE для полной совместимости с SSE). [9]
В Geode GX и Geode LX добавлены две новые инструкции 3DNow!, которые отсутствуют во всех других процессорах.
«Профессиональные» инструкции 3DNow!, уникальные для Geode GX/LX, следующие:
PFRSQRTV
– Аппроксимация обратного квадратного корня для пары 32-битных чисел с плавающей точкойPFRCPV
– Взаимное приближение для пары 32-битных чисел с плавающей точкойОдним из преимуществ 3DNow! является возможность складывать или умножать два числа, хранящихся в одном регистре . С SSE каждое число может быть объединено только с числом в той же позиции в другом регистре. Эта возможность, известная как горизонтальная в терминологии Intel, была основным дополнением к набору инструкций SSE3 .
Недостатком 3DNow! является то, что инструкции 3DNow! и инструкции MMX используют один и тот же файл регистров, тогда как SSE добавляет 8 новых независимых регистров ( XMM0
– XMM7
).
Поскольку регистры MMX/3DNow! являются общими для стандартного x87 FPU, инструкции 3DNow! и инструкции x87 не могут выполняться одновременно. Однако, поскольку они являются псевдонимами для x87 FPU, состояния регистров 3DNow! и MMX могут быть сохранены и восстановлены традиционными инструкциями x87 F(N)SAVE
и F(N)RSTOR
. Такая компоновка позволила операционным системам поддерживать 3DNow! без явных изменений, тогда как регистры SSE требовали явной поддержки операционной системы для правильного сохранения и восстановления новых регистров XMM (через добавленные инструкции FXSAVE
и FXRSTOR
).
Инструкции FX* из SSE предоставляют функциональное расширение старых инструкций сохранения и восстановления x87. Они могут сохранять не только состояния регистров SSE, но и состояния регистров x87 (следовательно, применимы также для операций MMX и 3DNow!, где они поддерживаются).
На ядрах AMD Athlon XP и K8 (т. е. Athlon 64 ) программисты ассемблера отметили, что можно объединить инструкции 3DNow! и SSE для снижения нагрузки на регистры , но на практике сложно повысить производительность из-за выполнения инструкций на общих функциональных блоках. [10]
Неправильное название на странице: Mobile AMD-K6-III+ и Mobile AMD-K6-2+ Processors with Enchanced [
sic
] 3DNow! Technology