Planet 3DNow! Logo  
  Fantastic Zero Logo
English Français ??????? ???? Español Italiano Japanese Chinese

   

AMDs Bulldozer-Architektur - ein Puzzle zusammengesetzt

Von: Dresdenboy, 18.08.2010
Artikel-Index: 
Floating Point Unit



Floating Point Unit


Die FPU wird ebenfalls ein gänzlich neues Design aufweisen. Was anhand von Patenten und offiziellen Informationen erfahren werden konnte, ist im Folgenden dargestellt, kombiniert mit Spekulationen über den genaueren Aufbau. Leider reicht auch dies nicht für eine vollständig exakte Darstellung. Es fehlen z.B. Hinweise auf die Verarbeitung von Integer-SIMD-Befehlen oder z.B. die Division.



Floating Point Scheduler

Floating Point Scheduler
Für die Floating-Point-Befehle, welche in der gemeinsam genutzten Floating Point Unit (FPU) ausgeführt werden, existiert ein eigener Scheduler, welcher die Ausführung koordiniert. Schon bei früheren Designs (K7, K8, K10) existierte ein solcher Scheduler. Dieser nahm die Befehlscodes für Floating-Point-Befehle auf, um sie entsprechend der Verfügbarkeit der Eingabedaten und Ausführungseinheiten an diese zu übergeben.

Vom Analyst Day ist von Chuck Moore aus der Fragenrunde bekannt, dass die FPU ein 4-Issue-Design ist, wonach also pro Takt bis zu vier Befehle ausgeführt werden können. Da die FPU von beiden Integer Cores gemeinsam genutzt wird, enthält der Scheduler auch die Befehle der maximal zwei ausgeführten Threads. Aus diesen werden pro Takt die ausführbaren Befehle ähnlich wie beim Integer Scheduler ausgewählt. Die Floating-Point-Register der beiden Threads könnten in einem gemeinsamen Registerfile liegen, während threadspezifische Informationen wie das Mapping vermutlich in getrennten Speichern gehalten werden. Insgesamt ist die Ausführung von Floating Point Code mit SMT in anderen Prozessorarchitekturen (z.B. Nehalem) vergleichbar. Während AMD für Integer Code Probleme bei der Doppelbelastung der Einheiten und Caches sah, bietet eine FPU viel mehr Potenzial für die Ausführung eines zweiten Threads, da allein schon durch die Latenzen von mehreren Takten der FP-Befehle diese oft genug auf Ergebnisse der vorhergehenden Befehle warten müssen. Dadurch gibt es viele Taktzyklen, wo in einer oder mehreren der FP-Einheiten kein Befehl ausgeführt wird. Dank eines zweiten Threads mit explizit unabhängigen Befehlen können diese Lücken effizient genutzt werden. Durch eine Erhöhung der vorhandenen Ressourcen beim Bulldozer gegenüber dem K10 wurden nicht nur mögliche leichte Einschränkungen durch die Parallelausführung reduziert, sondern noch Spielraum nach oben geschaffen.

Die Steuerung der Ausführung und Koordination mit der Ausführung des Codes auf den Integer Cores erfolgt wahrscheinlich über Tags und Signale zwischen den Integer Schedulern bzw. der angenommenen ICU.

FMAC-Einheiten
Die FPU enthält laut den offiziellen Informatoinen zwei 128-bit-FMAC-Einheiten. FMAC-Befehle (Fused-Multiply-Accumulate) ermöglichen die Berechnung von Gleichungen der Grundform D=A+B*C mit einem einzigen Befehl. Da viele Berechnungen auf dieses Muster abgebildet werden können, wurden solche Befehle schon früh in nicht x86-kompatiblen Prozessorarchitekturen für die Erhöhung des Durchsatzes eingeführt. Diesen hohen Durchsatz erreicht man aber auch nur mit den FMAC-Befehlen.

Die oft genutzten Standardoperationen FADD (Floating Point Addition) und FMUL (Floating Point Multiplikatoin) wurden in einer FMAC-Einheit als D=A+B*1 bzw. D=0+B*C ausgeführt. Das bedeutete auch, dass diese Befehle nicht mehr ganz so schnell und energieeffizient ausgeführt wurden wie in dedizierten FADD- bzw. FMUL-Einheiten. Solche wären aber besser für die gesamte vorhandene x86-Codebasis ohne FMA-Befehle geeignet. Eine Möglichkeit, diese verschiedenen Implementationen miteinander zu verheiraten, entwickelte ein Doktorand an der University of Texas in Austin mit Unterstützung durch AMD. Sein Ergebnis ist eine Bridged-Fused-Multiply-Add-Unit, welche bisherige FMUL- und FADD-Einheiten miteinander über ein einigermaßen komplexes Brückenelement verbindet, um sowohl einzelne FMA-Operationen oder FADD- und FMUL-Operationen (sogar gleichzeitig) durchzuführen. Der grobe Aufbau der Einheit ist in folgender Abbildung dargestellt:


Diese Einheit böte eine bessere Energieeffizienz bei den häufigen FADD- und FMUL-Befehlen und gleichzeitig die gewünschte FMA-Funktionalität. Damit ließe sich auch die 4-Issue-Fähigkeit der FPU erklären, indem dann je ein FADD- und ein FMUL-Befehl pro FMAC-Einheit gezählt werden. Ob so eine Einheit wirklich im Bulldozer eingesetzt wird, ist noch fraglich.

Eine alternative Erklärung ist ein flexibles Ausführen von Befehlen, die entweder nur skalare Zahlenwerte (z.B. ein 32-bit-Floating-Point-Wert) oder Zahlenvektoren (z.B. 128-bit SSE-Register mit zwei 64-bit-Floating-Point-Werten) bearbeiten. Laut einem schon älteren US-Patent mit der Nummer 6944744 könnte es auf Bulldozer angewendet pro 128-bit-FMAC-Einheit zwei 80-bit (wegen x87-Kompatibilität) breite Untereinheiten geben, die unabhängig voneinander Befehle ausführen können. Das würde eine hohe Flexibilität bei der Ausführung erlauben, da somit Floating-Point-Code relativ unabhängig von seiner Zusammensetzung (mehr FADD, mehr FMUL oder mehr FMAC-Befehle – natürlich neben weiteren von anderem Typ) mit maximalem Durchsatz bearbeitet werden könnte. Einen solchen Aufbau suggerieren auch zwei neuere Patente zu FMAC-Einheiten. Auf weitere Details zu dem Thema geht ein Citavia-Blogeintrag ein.

Ähnlich, wie es Spekulationen zu einer möglichen „double pumped“ FPU im Sandy Bridge Prozessor gibt, kann man auf Grund der Argumente pro niedrigeren Energieverbrauch (hier speziell Leckströme) beim Bulldozer ein entsprechendes Design vermuten. „Double pumped“ bedeutet, dass die FPU-Pipelines deutlich verlängert wurden, um sie mit einer höheren – vorzugsweise doppelten – Taktfrequenz im Vergleich zum Rest der CPU zu betreiben. Das würde erlauben, 256-bit-Operationen schnell als zwei 128-bit-Operationen hintereinander (back to back) auszuführen. Sofern es sich nicht um horizontale oder andere hälftenübergreifende Operationen handelt, ist das auch kein Problem. So wurde u.a. SSEn-Code auf dem K8 ausgeführt – allerdings mit einer normal getakteten FPU. Für weitere Hintergründe und Spekulationen verweise ich auch hier auf folgende Links:
http://aceshardware.freeforums.org/i...-t538-150.html
http://aceshardware.freeforums.org/t...d-t860-60.html

Speicheroperationen der FP-Befehle werden in den entsprechenden Integer Cores ausgeführt. Dazu werden die jeweiligen AGUs und LSUs genutzt. Vermutlich kann die FPU pro Thread bis auf die volle Load/Store-Bandbreite des jeweiligen Integer Cores zurückgreifen (natürlich in Konkurrenz zu Speicheroperationen im Integer Code). Das hieße entsprechend der bei der LSU genannten Daten, dass die FPU kombiniert bis zu vier Loads (je 128 bit) und zwei Stores (je 128 bit) für den Datentransfer nutzen könnte. Aber hier könnte auch eine Limitierung existieren, da nach derzeitigem Stand die zwei 128-bit FMACs zusammen pro Takt nur zwei Loads ausnutzen könnten. Falls aber doch die getrennte parallele Ausführung von FADDs und FMULs in den FMAC-Einheiten möglich ist, dann könnten die vier Loads pro Takt öfters ausgereizt werden.

Falls in der ersten Version der Bulldozer-Architektur die Bridged-FMA-Unit zum Einsatz kommt, könnte später dennoch auf normale FMA-Einheiten umgestiegen werden, da zukünftig der neuere Code vermehrt schon FMA-Befehle nutzen wird. Das ermöglicht wiederum einen reduzierten Energieverbrauch bei FMAC-Operationen (aber erhöhten bei FADD und FMUL) und auch kleinere FMAC-Einheiten. Natürlich könnte man sich aus diesen Gründen auch schon im ersten Bulldozer entsprechend entschieden haben. Die Auswahlmöglichkeiten standen auf jeden Fall zur Verfügung.

Das Retirement der FP-Operationen erfolgt schließlich ebenfalls über die Integer Cores.


Die folgenden 12 Benutzer sagen Danke zu Dresdenboy für diesen nützlichen Beitrag:
aylano (27.01.2011), camo (07.09.2010), Dr@ (28.08.2010), erde-m (15.06.2011), held2000 (05.10.2011), Locuza (13.01.2013), lurks (14.01.2011), mtb][sledgehammer (28.02.2011), Opteron (13.01.2011), S.I. (14.06.2011), TAL9000 (23.08.2010), Wishes (11.01.2011)
Planet 3DNow! Forum RSS XML Newsfeed Planet 3DNow! Forum Newsfeed bei iGoogle-Seite hinzufügen Planet 3DNow! Forum Newsfeed bei My Yahoo! hinzufügen Planet 3DNow! Forum Newsfeed bei Microsoft Live hinzufügen Planet 3DNow! Forum Newsfeed bei My AOL hinzufügen

Weitere Meldungen:
Neuer Artikel: mITX-Gehäuse - Cooltek Coolcube Mini
Neuer Artikel: Dell XPS 10 – Mal Tablet, mal Netbook
Never Settle Reloaded: AMD erweitert Spielebündel erneut unter dem Motto Level Up
Intern: BOINC Pentathlon 2013 - Unser Team benötigt jeden verfügbaren CPU-Kern bei Yoyo@home
Sockelchaos reloaded: FM2+ für Kaveri nötig?
Radeon HD 8970M: AMD stellt neues Spitzenmodell für Notebooks vor
Microsoft Patchday Mai 2013
Der Partner-Webwatch von Planet 3DNow! (14.05.2013)
Kühler- und Gehäuse-Webwatch (12.05.2013)
Ankündigung Microsoft Patchday Mai 2013
AMD in Zukunft mit 256-Bit-FPU-Pipelines
NZXT stellt neues Silent-Gehäuse vor - NZXT H630
Der Partner-Webwatch von Planet 3DNow! (07.05.2013)
Intern: BOINC Pentathlon 2013 - Projekt zwei hat begonnen und Projekt vier ist bekannt
Neuer Artikel: SilverStone Nitrogon NT06-PRO & Argon AR01
Kühler- und Gehäuse-Webwatch (05.05.2013)

Alle Zeitangaben in WEZ +1. Es ist jetzt 21:05 Uhr.


Powered by vBulletin® Version 3.8.7 (Deutsch)
Copyright ©2000 - 2013, vBulletin Solutions, Inc.
Inhalte und Bilder - Copyright ©1999 - 2013 - Planet 3DNow!
Artikel powered by GARS 2.1.8c ©2005-2006