3DNow! ist eine veraltete Erweiterung des x86 -Befehlssatzes, entwickelt von Advanced Micro Devices (AMD). Sie fügt dem x86-Basisbefehlssatz SIMD-Befehle ( Single Instruction Multiple Data ) hinzu und ermöglicht so die Vektorverarbeitung von Gleitkomma- Vektoroperationen mithilfe von Vektorregistern . Diese Verbesserung steigert die Leistung vieler grafikintensiver Anwendungen. Der erste Mikroprozessor mit 3DNow! war der AMD K6-2 , der 1998 eingeführt wurde. In geeigneten Anwendungen erhöhte diese Erweiterung die Geschwindigkeit um das Zwei- bis Vierfache. [ 1 ]

Der Befehlssatz erlangte jedoch nie große Popularität, und AMD kündigte im August 2010 an, dass die Unterstützung für 3DNow! in zukünftigen AMD-Prozessoren bis auf zwei Befehle eingestellt würde PREFETCH. PREFETCHW[ 2 ] Diese beiden Befehle sind auch in Bay-Trail-Intel-Prozessoren verfügbar. [ 3 ]

Geschichte

3DNow! wurde zu einer Zeit entwickelt, als 3D-Grafiken in der PC-Multimedia und bei Spielen immer beliebter wurden. Die Echtzeitdarstellung von 3D-Grafiken war stark von der Gleitkommaeinheit (FPU) der Host-CPU abhängig, die Gleitkommaberechnungen durchführen musste – eine Aufgabe, bei der der AMD K6-Prozessor seinem Konkurrenten, dem Intel Pentium II, deutlich unterlegen war.

Als Erweiterung des MMX -Befehlssatzes erweiterte der 3DNow!-Befehlssatz die MMX-SIMD-Register, um gängige arithmetische Operationen (Addition/Subtraktion/Multiplikation) mit einfachgenauen (32-Bit-)Gleitkommazahlen zu unterstützen. Software, die AMDs 3DNow! anstelle der langsameren x87-FPU nutzte , konnte je nach Befehlskombination bis zu viermal schneller ausgeführt werden.

Versionen

3DNow!

Die erste Implementierung der 3DNow!-Technologie umfasste 21 neue Befehle zur Unterstützung von SIMD -Gleitkommaoperationen. Das 3DNow!-Datenformat ist gepacktes, einfachgenaues Gleitkommaformat. Der 3DNow!-Befehlssatz beinhaltete außerdem Operationen für SIMD-Ganzzahloperationen, Datenvorabruf und einen schnelleren Wechsel zwischen MMX- und Gleitkommaoperationen. Später fügte Intel dem Pentium III ähnliche (aber inkompatible) Befehle hinzu , die als SSE (Streaming SIMD Extensions) bekannt sind.

Die Gleitkomma-Befehle von 3DNow! lauten wie folgt:

  • PI2FD – Konvertierung von gepackten 32-Bit-Ganzzahlen in Gleitkommazahlen
  • PF2ID – Konvertierung von gepackten Gleitkommazahlen in 32-Bit-Ganzzahlen
  • PFCMPGE – Vergleich von gepackten Gleitkommazahlen, größer oder gleich
  • PFCMPGT – Vergleich von gepackten Gleitkommazahlen, größer
  • PFCMPEQ – Vergleich von gepackten Gleitkommazahlen, gleich
  • PFACC – Gepackte Gleitkomma-Akkumulation
  • PFADD – Addition von Gleitkommazahlen in gepackten Formaten
  • PFSUB – Subtraktion mit gepackten Gleitkommazahlen
  • PFSUBR – Gepackte Gleitkomma-Rückwärtssubtraktion
  • PFMIN – Gepackte Gleitkomma-Minimum
  • PFMAX – Maximalwert für gepackte Gleitkommazahlen
  • PFMUL – Multiplikation von gepackten Gleitkommazahlen
  • PFRCP – Gepackte Gleitkomma-Reziprokappung
  • PFRSQRT – Gepackte Gleitkomma-Reziprok-Quadratwurzelapproximation
  • PFRCPIT1 – Gepackter Gleitkomma-Reziprokwert, erster Iterationsschritt
  • PFRSQIT1 – Gepackte Gleitkomma-Kehrwert-Quadratwurzel, erster Iterationsschritt
  • PFRCPIT2 – Gepackte Gleitkomma-Reziprok-/Reziprok-Quadratwurzel, zweiter Iterationsschritt

Die 3DNow!-Integer-Befehle lauten wie folgt:

  • PAVGUSB – Gepackte 8-Bit-Ganzzahlmittelung ohne Vorzeichen
  • PMULHRW – Multiplikation einer gepackten 16-Bit-Ganzzahl mit Rundung

Die Anweisungen zur Leistungssteigerung von 3DNow! lauten wie folgt:

  • FEMMS – Schnellerer Eintritt in/Austritt aus dem MMX- oder Gleitkomma-Zustand
  • PREFETCH/PREFETCHW – Mindestens eine 32-Byte-Zeile in den L1-Datencache vorladen (dies ist die einzige nicht veraltete Anweisung)

3DNow!-Erweiterungen

Es gibt kaum oder gar keine Hinweise darauf, dass die zweite Version von 3DNow! jemals einen offiziellen Markennamen erhalten hat. Dies hat in der Dokumentation zu diesem neuen Befehlssatz zu Verwirrung geführt. Die gebräuchlichsten Bezeichnungen sind Extended 3DNow!, Enhanced 3DNow! und 3DNow!+ . Der Ausdruck „Enhanced 3DNow!“ findet sich an einigen Stellen auf der AMD-Website, wobei die Großschreibung von „Enhanced“ entweder rein grammatikalisch bedingt ist oder zur Hervorhebung von Prozessoren dient, die diese Erweiterungen möglicherweise nicht besitzen (beispielsweise verweist eine Benchmark-Seite auf den K6-III-P, der diese Erweiterungen nicht aufweist). [ 4 ] [ 5 ]

Diese Erweiterung des 3DNow!-Befehlssatzes wurde mit den Athlon -Prozessoren der ersten Generation eingeführt. Der Athlon enthielt fünf neue 3DNow!-Befehle und 19 neue MMX-Befehle. Später enthielten die K6-2+ und K6-III+ (beide für den Mobilmarkt konzipiert) die fünf neuen 3DNow!-Befehle, jedoch nicht die 19 neuen MMX-Befehle. Die neuen 3DNow!-Befehle wurden zur Verbesserung der digitalen Signalverarbeitung (DSP) hinzugefügt . Die neuen MMX-Befehle dienten der Verbesserung des Streaming-Medien-Verhaltens .

Die 19 neuen MMX-Befehle sind eine Teilmenge des SSE-Befehlssatzes von Intel. In den technischen Handbüchern von AMD werden diese Befehle von den 3DNow!-Erweiterungen getrennt aufgeführt. [ 4 ] In der Produktliteratur für AMD-Kunden ist diese Trennung jedoch weniger deutlich, da die Vorteile aller 24 neuen Befehle der verbesserten 3DNow!-Technologie zugeschrieben werden. [ 6 ] Dies hat dazu geführt, dass Programmierer eigene Bezeichnungen für die 19 neuen MMX-Befehle entwickelt haben. Die gebräuchlichste scheint Integer SSE ( ISSE ) zu sein. [ 7 ] SSEMMX und MMX2 finden sich auch in der Dokumentation von Videofiltern aus dem öffentlichen Bereich. ISSE könnte sich auch auf Internet SSE beziehen, eine frühere Bezeichnung für SSE.

Die Anweisungen für die 3DNow!-Erweiterungs-DSP lauten wie folgt:

  • PF2IW – Konvertierung von gepackten Gleitkommazahlen in Ganzzahlen mit Vorzeichenerweiterung
  • PI2FW – Umwandlung von gepackten Ganzzahlwörtern in Gleitkommazahlen
  • PFNACC – Akkumulation von Gleitkommazahlen mit negativen Werten
  • PFPNACC – Gepackte Gleitkommazahlen gemischt positiv-negativ akkumulieren
  • PSWAPD – Packed swap doubleword

Die MMX-Erweiterungsbefehle (Integer SSE) lauten wie folgt:

  • MASKMOVQ – Streaming (Cache-Umgehung) Speichern mit Byte-Maske
  • MOVNTQ – Streaming-Speicher (Cache-Umgehung)
  • PAVGB – Gepackter Durchschnitt von vorzeichenlosen Bytes
  • PAVGW – Gepackter Durchschnitt von vorzeichenlosen Wörtern
  • PMAXSW – Maximal gepacktes signiertes Wort
  • PMAXUB – Gepacktes maximales vorzeichenloses Byte
  • PMINSW – Mindestanzahl an Unterschriften
  • PMINUB – Gepacktes minimales unsigniertes Byte
  • PMULHUW – Gepacktes mehrfach hohes vorzeichenloses Wort
  • PSADBW – Gepackte Summe der absoluten Byte-Differenzen
  • PSHUFW – Gepacktes Shuffle-Wort
  • PEXTRW – Wort in Integer-Register extrahieren
  • PINSRW – Wort aus dem Integer-Register einfügen
  • PMOVMSKB – Bytemaske in Integer-Register verschieben
  • PREFETCHNTA – Vorabruf mithilfe der NTA-Referenz
  • PREFETCHT0 – Vorabruf unter Verwendung der T0-Referenz
  • PREFETCHT1 – Vorabruf unter Verwendung der T1-Referenz
  • PREFETCHT2 – Vorabruf unter Verwendung der T2-Referenz
  • SFENCE – Zaun

3DNow! Professional

3DNow! Professional ist eine Markenbezeichnung für Prozessoren, die die 3DNow!-Technologie mit einem vollständigen SSE-Befehlssatz (z. B. SSE, SSE2 oder SSE3) kombinieren. [ 8 ] Der Athlon XP war der erste Prozessor mit der Markenbezeichnung 3DNow! Professional und das erste Produkt der Athlon-Familie, das den vollständigen SSE-Befehlssatz unterstützte (insgesamt: 21 ursprüngliche 3DNow!-Befehle; fünf 3DNow!-Erweiterungs-DSP-Befehle; 19 MMX-Erweiterungsbefehle; und 52 zusätzliche SSE-Befehle für vollständige SSE-Kompatibilität). [ 9 ]

3DNow! und die Geode GX/LX

Die Geode GX und Geode LX verfügen über zwei neue 3DNow!-Befehle, die bei allen anderen Prozessoren fehlen.

Die speziell für die Geode GX/LX entwickelten „professionellen“ Anweisungen von 3DNow! lauten wie folgt:

  • PFRSQRTV – Näherung der reziproken Quadratwurzel für ein Paar von 32-Bit-Gleitkommazahlen
  • PFRCPV – Reziproke Approximation für ein Paar von 32-Bit-Gleitkommazahlen

Vor- und Nachteile

Ein Vorteil von 3DNow! besteht darin, dass sich zwei Zahlen, die im selben Register gespeichert sind, addieren oder multiplizieren lassen. Mit SSE kann jede Zahl nur mit einer Zahl an derselben Position in einem anderen Register kombiniert werden. Diese in der Intel-Terminologie als „horizontal“ bezeichnete Funktionalität war die wichtigste Neuerung des SSE3 -Befehlssatzes.

Ein Nachteil von 3DNow! ist, dass sich 3DNow!-Befehle und MMX-Befehle denselben Registersatz teilen, während SSE 8 neue unabhängige Register hinzufügt ( XMM0– XMM7).

Da die MMX/3DNow!-Register von der Standard- x87- FPU gemeinsam genutzt werden, können 3DNow!-Befehle und x87-Befehle nicht gleichzeitig ausgeführt werden. Da die 3DNow!- und MMX-Register jedoch der x87-FPU zugeordnet sind, können die Zustände der 3DNow!- und MMX-Register mithilfe der herkömmlichen x87-Befehle gesichert und wiederhergestellt werden F(N)SAVE. F(N)RSTORDiese Anordnung ermöglichte es Betriebssystemen, 3DNow! ohne explizite Änderungen zu unterstützen, wohingegen für SSE-Register explizite Unterstützung durch das Betriebssystem erforderlich war, um die neuen XMM-Register korrekt zu speichern und wiederherzustellen (mittels der hinzugefügten FXSAVEBefehle FXRSTOR).

Die FX*-Befehle von SSE bieten eine funktionale Erweiterung der älteren x87-Speicher- und Wiederherstellungsbefehle. Sie können nicht nur SSE-Registerzustände, sondern auch x87-Registerzustände speichern (und sind daher auch für MMX- und 3DNow!-Operationen anwendbar, sofern diese unterstützt werden).

Bei AMD Athlon XP- und K8-basierten Kernen (d. h. Athlon 64 ) haben Assembler-Programmierer festgestellt, dass es möglich ist, 3DNow!- und SSE-Befehle zu kombinieren, um den Registerdruck zu reduzieren . In der Praxis ist es jedoch schwierig, die Leistung zu verbessern, da die Befehle auf gemeinsam genutzten Funktionseinheiten ausgeführt werden. [ 10 ]

Prozessoren, die 3DNow! unterstützen.

Referenzen

  1. ^ „Effektive Nutzung von 3DNow unter Linux“ . Linux Journal. 1. Dezember 1999. Archiviert vom Original am 7. Juni 2011. Abgerufen am 3. Oktober 2010 .
  2. ^ „3DNow-Befehle werden eingestellt | AMD Developer Central“ . Blogs.amd.com. 18.08.2010. Archiviert vom Original am 24.10.2010 . Abgerufen am 03.10.2010 .
  3. ^ „IntelE38xx - MinnowBoard Wiki“ . Archiviert vom Original am 11. Februar 2017. Abgerufen am 13. Februar 2017 .
  4. ^ a b „AMD Extensions to the 3DNow and MMX Instruction Sets Manual“ (PDF) . Advanced Micro Devices, Inc. März 2000. Archiviert (PDF) vom Original am 17.05.2008 . Abgerufen am 07.06.2008 .
  5. ^ „Mobiles Notebook mit AMD-K6-III-P-Prozessor: Ziff-Davis CPUmark 99“ . Archiviert vom Original am 24.07.2008 . Abgerufen am 07.06.2008 . Falscher Seitentitel: Mobile AMD-K6-III+ und Mobile AMD-K6-2+ Prozessoren mit verbesserter 3DNow !-Technologie
  6. ^ „AMD Athlon Prozessor – Produktübersicht“ . Advanced Micro Devices, Inc. Archiviert vom Original am 25.02.2008 . Abgerufen am 08.06.2008 .
  7. ^ "ISSE" . AviSynth . Archiviert vom Original am 02.07.2017 . Abgerufen am 19.07.2017 .
  8. ^ „Erklärung der neuen 3DNow! Professional-Technologie“ . Advanced Micro Devices, Inc. Archiviert vom Original am 21.01.2009 . Abgerufen am 08.06.2008 .
  9. ^ „Architektonische Merkmale des AMD Athlon XP“ . Advanced Micro Devices, Inc. Archiviert vom Original am 25.02.2008 . Abgerufen am 08.06.2008 .
  10. ^ Larry Lewis (9. Juli 2003). „3DNow+ vs SSE auf Athlon XP“ . Newsgroup :  comp.sys.ibm.pc.hardware.chips . Usenet: ad82cd69.0307090931.25391323@posting.google.com . Archiviert vom Original am 3. Oktober 2012. Abgerufen am 4. Januar 2023 – via Google Groups. 

Weiterführende Literatur