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

У серпні 2010 року оголошено, що підтримка 3DNow! буде відсутня у майбутніх процесорах AMD, за винятком двох інструкцій.

Історія 3DNow! спочатку було розроблено як розширення для команд MMX. Оригінальна ідея для створення розширення полягала в розширенні обробки із дійсних на всі математичні числа, а також прискорення розрахунків з рухомою комою.

Особливо необхідними для AMD стратегічною та маркетінговою ціллю було впровадження 3D розрахунків із рухомою комою. Тому, що процесори K6 були не дуже добре конкурентноздатними для обрахунків математичних даних із рухомою комою, в порівнянні з процесорами Intel Pentium II.

Набір команд 3DNow! було створено наприкінці 1990-х, коли набувала популярності 3D графіка в 3D-іграх, і саме 3D-ігри в значній мірі використовували обрахунки з рухомою комою.

На початку 1990-х переважна більшість програмного забезпечення використовували обрахунки на основі цілих чисел, і компанія AMD могли легко обійтися процесорами, обмежившись обрахунками з рухомою комою. Але такий процесор, як AMD K6, став значно кращим, зважаючи на значний розвиток 3D-ігор і прогресивного мультимедійного контенту, і досить швидко змінив перспективи ринку.

Версії

3DNow! Перша реалізація технології 3DNow! містила 21 нову інструкцію, які підтримують SIMD операції з рухомою комою. Набір команд 3DNow! включає також операції над цілими SIMD-наборами команд, попередню вибірку даних, та швидше перемикання між MMX та обрахунками з рухомою комою. Пізніше Intel хотіли додати аналогічні (але несумісні) команди до процесору Pentium III, нині відомі як набір інструкцій SSE, які надають потокового розширення SIMD.

Інструкції 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! Існує мало або взагалі немає доказів того, що друга версія 3DNow! колись офіційно мала свою торгову марку. Це призвело до деякої плутанини в документації, яка посилається на цей набір інструкцій. Найпоширеніші терміни — Extended 3DNow!(розширений 3DNow!), Enhanced 3DNow!(розширення 3DNow!) та 3DNow!+. Фразу «Enhanced 3DNow!» можна знайти в кількох місцях на сайті AMD, але узагальнення значення «розширеного» ні до чого не призводить, і, мабуть, використовуються виключно для виділення процесорів, які можуть мати або навіть не мати цього розширення (найпомітнішим з яких посилання вказується на сторінку процесору K6-III-P, який насправді не має цього розширення).

Це розширення набору команд 3DNow! було впроваджено в перше покоління процесорів Athlon. В Athlon додали 5 нових інструкцій 3DNow! і 19 MMX. Пізніше у процесори K6-2+ та K6-III+ (які орієнтовані на мобільний ринок) додали 5 нових інструкцій 3DNow!, залишивши 19 нових інструкцій MMX. Нові інструкції 3DNow! були додані для підвищення цифрової обробки сигналу. Нові інструкції MMX були додані до підвищення обробки потокового мультимедіа контенту.

Розширення до 3DNow! чи MMX?

19 нових інструкцій MMX, насправді є підмножиною набору інструкцій SSE1 для процесорів Intel. Але в технічному посібнику AMD, компанія відокремлює один від одного ці інструкції від розширень 3DNow!. У інструкції для споживача від AMD, цей поділ не настільки очевидний, тому що всі 24 нові інструкції, зараховуються на рахунок технології розширення 3DNow!. Це призвело до того, що програмісти придумували свою назву для 19 нових інструкцій MMX. Найчастіше вживається Integer SSE (ISSE). Також присутні назви SSEMMX і MMX2, які було знайдено у документації відеофільтрів. [Також варто зазначити, що назва ISSE могла мати відношення до терміну Internet SSE, рання назва SSE.]

Розширення інструкцій 3DNow! для DSP PF2IW () — Конверсія із знаком продовження упакованого цілого значення в число з рухомою комою PI2FW () — Конверсія упакованого цілого значення в число з рухомою комою PFNACC () — Обернене накопичення упакованих чисел із рухомою комою PFPNACC () — змішане прямо-обернене накопичення упакованих чисел із рухомою комою PSWAPD () — Подвоєний упакований своп

Розширення інструкцій MMX (Integer SSE)

MASKMOVQ () — Потокове (в обхід кешу) сховище з використанням байтового маскування MOVNTQ () — Потокове (в обхід кешу) сховище PAVGB () — упаковане усереднене непідписаних байтів PAVGW () — упаковане усереднене непідписаних слів PMAXSW () — упакований максимум підписаних слів PMAXUB () — упакований максимум непідписаних байтів PMINSW () — упакований мінімум підписаних слів PMINUB () — упакований мінімум непідписаних байтів PMULHUW () — упакований множник високоневпорядкованих значень PSADBW () — упакована сума абсолютної байтової різниці PSHUFW () — Запакувати випадкове значення PEXTRW () — Видобути значення з цілого регістра PINSRW () — Поміщення значення з цілого регістра PMOVMSKB () — Переміщення байтової маски на цілий регістр PREFETCHNTA () — Попереднє видобування інструкцій із використанням NTA посилань PREFETCHT0 () — Попереднє видобування інструкцій із використанням T0 посилань PREFETCHT1 () — Попереднє видобування інструкцій із використанням T1 посилань PREFETCHT2 () — Попереднє видобування інструкцій із використанням T2 посилань SFENCE () — Обмеження сховища

3DNow! Professional 3DNow! Professional насправді не є розширенням набіру інструкцій 3DNow!, а фірмовою назвою технології, створеної для позначення процесорів, які поєднують технології 3DNow! з повними наборами інструкцій SSE (наприклад SSE1, SSE2 та SSE3). Перший процесор, який відповідає цьому опису був Athlon XP. До Athlon XP додали інструкції, до повного набору SSE1, які були відсутні в ранніх процесорах Athlon (загальна кількість: 21 оригінальні інструкцій 3DNow!; 5 наборів 3DNow! інструкцій для розширення DSP функціональності; 19 інструкцій для розширення MMX; а також 52 додаткових інструкцій SSE для повної сумісності із SSE1).

3DNow! та процесори AMD Geode GX/LX У процесори Geode GX і Geode LX додані дві нові інструкції 3DNow!, які зараз відсутні у всіх інших процесорах.

Унікальні інструкції 3DNow! Professional для процесорів AMD Geode GX/LX PFRSQRTV () — Наближення взаємного квадратного кореня для пари 32-бітних чисел із рухомою комою PFRCPV () — Наближення взаємного числа для пари 32-бітних чисел із рухомою комою

Переваги та недоліки Однією з переваг 3DNow! є те, що можна додати або помножити два числа, які зберігаються в тому ж регістрі. У SSE кожне число може бути поєднаним з іншим, яке розташоване в тому ж положенні іншого реєстру. Ця здатність, відома як горизонталь в термінології Intel, була важливим доповненням до набору інструкцій SSE3.

Недолік 3DNow! в порівнянні з SSE, є те, що вона зберігає тільки два номери в регістрі, на відміну від чотирьох в SSE. 3DNow! також поділяє ті ж фізичні регістри, що і MMX, в той час як SSE має свій власний незалежний регістр. Оскільки обидва набори регістрів, MMX і 3DNow!, також використовують стандартні значення x87 FPU, то інструкції 3DNow! та x87 не можуть бути виконані одночасно. Тим не менше 3DNow! і MMX регістри можуть бути збережені і відновлені традиційними інструкціями x87: F(N)SAVE і F(N)RSTOR. Використання вже існуючих регістрів x87 означає, що будь-які зміни в сучасних операційних систем спрямовуватимуться на підтримку 3DNow!.

З іншого боку, для збереження і відновлення стану SSE регістрів потрібно використання нових додаткових інструкцій FXSAVE та FXRSTOR; використання інструкцій FX*, які були оновленням до старішого x87 — збереження та відновлення. Тому інструкції могли зберігатися не тільки для станів SSE, а і для x87 станів регістра (а звідси випливало, що могли зберегтися регістри MMX та 3DNow! також).

На процесорах AMD Athlon XP, та подальших процесорах, основаних на ядрі K8 (наприклад Athlon 64), програмісти асемблеру помітили, що можна реально використовувати як 3DNow!, так і SSE одночасно. Хоча і можна використовувати одночасно одні і ті ж функціональні блоки, і це могло б призвести до більш високої продуктивності уникаючи деякого тиску в розподілі регістрів, але виявилося, що на практиці це важко здійснити.

Процесори, які підтримують технологію 3DNow! Наступні сімейства процесорів AMD засновані на K6-2, Athlon, Athlon 64 та Phenom. Відсутні в Bulldozer, Bobcat та Zen. Процесори Geode від National Semiconductor, а потім і процесори AMD Geode. Процесори VIA C3 (також відомі як Cyrix III) на ядрі «Samuel», «Ezra» та «Eden». IDT Winchip 2

Посилання

Додаткова література Case, Brian (1 June 1998). «3DNow Boosts Non-Intel 3D Performance». Microprocessor Report. Oberman, S.; Favor, G.; Weber, F. (March 1999). «AMD 3DNow! technology: architecture and implementations». IEEE Micro.

Посилання Гід інструкції портування AMD 3DNow! (PDF) Керівництво по 3DNow! Керівництво AMD для розширення 3DNow! та набору інструкцій MMX Книга даних процесору AMD Geode LX Роз'яснення до нової технології 3DNow! Professional Technology