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

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

Історія ред.

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 (англ. Packed 32-bit integer to floating-point conversion) — Перетворення упакованого 32-бітного цілого числа в число з рухомою комою
  • PF2ID (англ. Packed floating-point to 32-bit integer conversion) — Перетворення упакованого числа з рухомою комою в 32-бітне ціле
  • PFCMPGE (англ. Packed floating-point comparison, greater or equal) — Порівняння упакованих чисел з рухомою комою, більше або дорівнює
  • PFCMPGT (англ. Packed floating-point comparison, greater) — Порівняння упакованих чисел з рухомою комою, більше
  • PFCMPEQ (англ. Packed floating-point comparison, equal) — Порівняння упакованих чисел з рухомою комою, рівні
  • PFACC (англ. Packed floating-point accumulate) — Накопичення упакованих чисел з рухомою комою
  • PFADD (англ. Packed floating-point addition) — Додавання упакованих чисел з рухомою комою
  • PFSUB (англ. Packed floating-point subtraction) — Віднімання упакованих чисел з рухомою комою
  • PFSUBR (англ. Packed floating-point reverse subtraction) — Зворотне віднімання упакованих чисел з рухомою комою
  • PFMIN (англ. Packed floating-point minimum) — Мінімум упакованих чисел з рухомою комою
  • PFMAX (англ. Packed floating-point maximum) — Максимум упакованих чисел з рухомою комою
  • PFMUL (англ. Packed floating-point multiplication) — Множення упакованих чисел з рухомою комою
  • PFRCP (англ. Packed floating-point reciprocal approximation) — Апроксимація упакованих чисел з рухомою комою
  • PFRSQRT (англ. Packed floating-point reciprocal square root approximation) — Апроксимація взаємних квадратних коренів упакованих чисел з рухомою комою
  • PFRCPIT1 (англ. Packed floating-point reciprocal, first iteration step) — Оберненість упакованих чисел з рухомою комою, перший повторний крок
  • PFRSQIT1 (англ. Packed floating-point reciprocal square root, first iteration step) — Оберненість квадратного кореня упакованих чисел з рухомою комою, перший повторний крок
  • PFRCPIT2 (англ. Packed floating-point reciprocal/reciprocal square root, second iteration step) — Оберненість звичайна/квадратного кореня упакованих чисел з рухомою комою, другий повторний крок

Цілочисельні інструкції 3DNow!

  • PAVGUSB (англ. Packed 8-bit unsigned integer averaging) — Усереднення цілого упакованого 8-бітного числа
  • PMULHRW (англ. Packed 16-bit integer multiply with rounding) — Множення цілого упакованого 16-бітного числа з округленням

Інструкції підвищення продуктивності 3DNow!

  • FEMMS (англ. Faster entry/exit of the MMX or floating-point state) — Швидке завантаження/вивантаження MMX інструкцій чи стану значення з рухомою комою
  • PREFETCH/PREFETCHW (англ. Prefetch at least a 32-byte line into L1 data cache (this is the non-deprecated instruction)) — Видобування як мінімум 32-байтового черги в кеш даних L1

Розширений 3DNow! ред.

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

Це розширення набору команд 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!.[2] У інструкції для споживача від AMD, цей поділ не настільки очевидний, тому що всі 24 нові інструкції, зараховуються на рахунок технології розширення 3DNow!.[4] Це призвело до того, що програмісти придумували свою назву для 19 нових інструкцій MMX. Найчастіше вживається Integer SSE (ISSE).[5] Також присутні назви SSEMMX і MMX2, які було знайдено у документації відеофільтрів. [Також варто зазначити, що назва ISSE могла мати відношення до терміну Internet SSE, рання назва SSE.]

Розширення інструкцій 3DNow! для DSP

  • PF2IW (англ. Packed floating-point to integer word conversion with sign extend) — Конверсія із знаком продовження упакованого цілого значення в число з рухомою комою
  • PI2FW (англ. Packed integer word to floating-point conversion) — Конверсія упакованого цілого значення в число з рухомою комою
  • PFNACC (англ. Packed floating-point negative accumulate) — Обернене накопичення упакованих чисел із рухомою комою
  • PFPNACC (англ. Packed floating-point mixed positive-negative accumulate) — змішане прямо-обернене накопичення упакованих чисел із рухомою комою
  • PSWAPD (англ. Packed swap doubleword) — Подвоєний упакований своп

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

  • MASKMOVQ (англ. Streaming (cache bypass) store using byte mask) — Потокове (в обхід кешу) сховище з використанням байтового маскування
  • MOVNTQ (англ. Streaming (cache bypass) store) — Потокове (в обхід кешу) сховище
  • PAVGB (англ. Packed average of unsigned byte) — упаковане усереднене непідписаних байтів
  • PAVGW (англ. Packed average of unsigned word) — упаковане усереднене непідписаних слів
  • PMAXSW (англ. Packed maximum signed word) — упакований максимум підписаних слів
  • PMAXUB (англ. Packed maximum unsigned byte) — упакований максимум непідписаних байтів
  • PMINSW (англ. Packed minimum signed word) — упакований мінімум підписаних слів
  • PMINUB (англ. Packed minimum unsigned byte) — упакований мінімум непідписаних байтів
  • PMULHUW (англ. Packed multiply high unsigned word) — упакований множник високоневпорядкованих значень
  • PSADBW (англ. Packed sum of absolute byte differences) — упакована сума абсолютної байтової різниці
  • PSHUFW (англ. Packed shuffle word) — Запакувати випадкове значення
  • PEXTRW (англ. Extract word into integer register) — Видобути значення з цілого регістра
  • PINSRW (англ. Insert word from integer register) — Поміщення значення з цілого регістра
  • PMOVMSKB (англ. Move byte mask to integer register) — Переміщення байтової маски на цілий регістр
  • PREFETCHNTA (англ. Prefetch using the NTA reference) — Попереднє видобування інструкцій із використанням NTA посилань
  • PREFETCHT0 (англ. Prefetch using the T0 reference) — Попереднє видобування інструкцій із використанням T0 посилань
  • PREFETCHT1 (англ. Prefetch using the T1 reference) — Попереднє видобування інструкцій із використанням T1 посилань
  • PREFETCHT2 (англ. Prefetch using the T2 reference) — Попереднє видобування інструкцій із використанням T2 посилань
  • SFENCE (англ. Store fence) — Обмеження сховища

3DNow! Professional ред.

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

3DNow! та процесори AMD Geode GX/LX ред.

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

Унікальні інструкції 3DNow! Professional для процесорів AMD Geode GX/LX

  • PFRSQRTV (англ. Reciprocal square root approximation for a pair of 32-bit floats) — Наближення взаємного квадратного кореня для пари 32-бітних чисел із рухомою комою
  • PFRCPV (англ. Reciprocal approximation for a pair of 32-bit floats) — Наближення взаємного числа для пари 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 одночасно. Хоча і можна використовувати одночасно одні і ті ж функціональні блоки, і це могло б призвести до більш високої продуктивності уникаючи деякого тиску в розподілі регістрів, але виявилося, що на практиці це важко здійснити.[8]

Процесори, які підтримують технологію 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

Посилання ред.

  1. 3DNow! Instructions are Being Deprecated | AMD Developer Central. Blogs.amd.com. 18 серпня 2010. Архів оригіналу за 7 липня 2013. Процитовано 3 жовтня 2010. 
  2. а б Керівництво по розширенням AMD для набору інструкцій 3DNow! та MMX (PDF). Advanced Micro Devices, Inc. March 2000. Архів оригіналу за 7 липня 2013. Процитовано 7 червня 2008. 
  3. Тестування ноутбука, основаного на процесорі Mobile AMD-K6-III-P : Ziff-Davis CPUmark 99. Архів оригіналу за 7 липня 2013. Процитовано 7 червня 2008. «Процесори Mobile AMD-K6-III+ та Mobile AMD-K6-2+ із розширенням 3DNow!» 
  4. Попередній огляд процесору AMD Athlon. Advanced Micro Devices, Inc. Архів оригіналу за 7 липня 2013. Процитовано 8 червня 2008. 
  5. ISSE. AviSynth. Архів оригіналу за 7 липня 2013. Процитовано 8 червня 2008. 
  6. Пояснення особливостей нової технології 3DNow! Professional. Advanced Micro Devices, Inc. Архів оригіналу за 7 липня 2013. Процитовано 8 червня 2008. 
  7. Особливості архітектури процесору AMD Athlon XP. Advanced Micro Devices, Inc. Архів оригіналу за 7 липня 2013. Процитовано 8 червня 2008. 
  8. Архівована копія. Архів оригіналу за 28 січня 2010. Процитовано 17 травня 2010. 

Додаткова література ред.

Посилання ред.