3DNow!

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

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 — Перетворення запакованого 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, який насправді не має цього розширення).[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 — Конверсія із знаком продовження запакованого цілого значення в число з плаваючою комою
  • 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).[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 — Наближення взаємного квадратного кореня для пари 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 одночасно. Хоча і можна використовувати одночасно одні і ті ж функціональні блоки, і це могло б призвести до більш високої продуктивності уникаючи деякого тиску в розподілі регістрів, але виявилося, що на практиці це важко здійснити.[8]

Процесори, які підтримують технологію 3DNow![ред.ред. код]

  • Всі процесори AMD після K6-2 (включно)
  • Процесори 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. 2010-08-18. Архів оригіналу за 2013-07-07. Процитовано 2010-10-03. 
  2. а б «Керівництво по розширенням AMD для набору інструкцій 3DNow! та MMX» (PDF). Advanced Micro Devices, Inc. March 2000. Архів оригіналу за 2013-07-07. Процитовано 2008-06-07. 
  3. «Тестування ноутбука, основаного на процесорі Mobile AMD-K6-III-P : Ziff-Davis CPUmark 99». Архів оригіналу за 2013-07-07. Процитовано 2008-06-07. «Процесори Mobile AMD-K6-III+ та Mobile AMD-K6-2+ із розширенням 3DNow!» 
  4. «Попередній огляд процесору AMD Athlon». Advanced Micro Devices, Inc. Архів оригіналу за 2013-07-07. Процитовано 2008-06-08. 
  5. «ISSE». AviSynth. Архів оригіналу за 2013-07-07. Процитовано 2008-06-08. 
  6. «Пояснення особливостей нової технології 3DNow! Professional». Advanced Micro Devices, Inc. Архів оригіналу за 2013-07-07. Процитовано 2008-06-08. 
  7. «Особливості архітектури процесору AMD Athlon XP». Advanced Micro Devices, Inc. Архів оригіналу за 2013-07-07. Процитовано 2008-06-08. 
  8. http://groups.google.com/group/comp.sys.ibm.pc.hardware.chips/browse_thread/thread/9da2d940c5b69745

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

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