Heterogene Systemarchitektur oder über das Treffen von CPU und GPU
Die Entwicklung der Mikroelektronik erfolgte lange Zeit unter dem Motto "weniger und schneller". Der technische Prozess wurde reduziert, neue Elemente der x86-Architektur wurden eingeführt (Sätze von Befehlserweiterungen), die Taktfrequenz des Rechenkerns wurde erhöht. Als das Wachstum der „rauen“ Produktivität auf wirtschaftlichen und physikalischen Faktoren beruhte, wurden verschiedene Methoden zur Parallelisierung von Berechnungen populär. Gleichzeitig entwickelten sich nicht nur CPUs, die bei Single-Threaded-Berechnungen und komplexen Berechnungen eine gute Leistung zeigten, sondern auch GPUs, die schnell eine große Anzahl ähnlicher und einfacher Aufgaben ausführen konnten, die herkömmlichen Prozessoren nur schwer zu übertragen waren.
Heute treten wir in eine neue Ära in der Entwicklung von Chips ein, die für das Rechnen im Herzen von Desktops, Servern, Mobilgeräten und tragbarer Elektronik verantwortlich sind. Durch die Kombination der Ansätze zur Informationsverarbeitung auf der CPU und der GPU haben wir eine neue, offene Architektur entwickelt, ohne die die weitere Implementierung des gleichen Moore'schen Gesetzes schwierig erscheint. Lernen Sie HSA - Heterogene Systemarchitektur kennen.Ein Moment der Geschichte
Um zu verstehen, wie nah HSA einerseits ist und andererseits die Architektur moderner Lösungen übertrifft, schauen wir uns die Geschichte an. Selbst wenn wir jahrzehntelange Lampentechnologie verwerfen und ab den 1950er Jahren von dem Moment an, als Transistoren in der Mikroelektronik auftauchten, ist die Geschichte so, dass Sie einen separaten Artikel schreiben können. Lassen Sie uns ganz kurz die wichtigsten "Meilensteine" der Prozessorindustrie und sehr wenig über die Geschichte der Grafikkarten durchgehen.Zu Beginn der Computertechnik waren CPUs recht einfach. Tatsächlich kam es bei allen Operationen darauf an, Zahlen in einem Binärsystem hinzuzufügen. Wenn es erforderlich war, zu subtrahieren, die sogenannten " Codes umkehren": Sie waren einfach und passten leicht zu" Eisen ", ohne die kompliziertesten architektonischen Freuden zu erfordern, die die" ehrliche "Subtraktion von Zahlen implementieren. Für jedes Computermodell wurden Programme bis 1964 separat geschrieben.
Ibm-System / 3601964 veröffentlichte IBM System / 360, einen Computer, der die Art und Weise, wie wir Prozessoren erstellen, veränderte. Höchstwahrscheinlich hatte er die Ehre, ein solches Konzept wie die Systemarchitektur einzuführen. Nur weil es vor ihm kein "System" gab. Tatsache ist, dass vor System / 360 alle Computer der 50er und 60er Jahre nur mit dem speziell für sie geschriebenen Programmcode arbeiteten. IBM hingegen entwickelte den ersten Befehlssatz, der in einer Vielzahl von Konfigurationen (und Leistungen) unterstützt wurde, jedoch dieselbe System / 360-Architektur. Auf demselben Computer wurde das Byte übrigens zum ersten Mal 8-Bit. Zuvor bestand es in fast allen gängigen Computern aus sechs Bits.Die zweite große Innovation in den 60er Jahren war die Entwicklung von DEC. In ihrem PDP-8-Computer verwendeten sie für diese Zeit eine äußerst einfache Architektur, die nur vier Register mit jeweils 12 Bit und etwas mehr als 500 CPU-Blöcke enthielt. Diese „Transistoren“, die bereits in den 1970er Jahren zu Tausenden und in den 2000er Jahren zu Milliarden gemessen wurden. Diese Einfachheit und die Erstellung eines solchen Konzepts als "Befehlssatz" durch IBM bestimmten die weitere Richtung für die Entwicklung der Computertechnologie.Der Boom der Mikroelektronik begann in den 70er Jahren. Alles begann mit der Produktion der ersten Single-Chip-Prozessoren: Viele Unternehmen produzierten Chips unter Lizenz und verbesserten sie dann, indem sie neue Anweisungen hinzufügten und die Funktionen erweiterten.Seit Mitte der 70er Jahre ist der Markt für 8-Bit-Prozessoren voll und gegen Ende des Jahrzehnts erschienen erschwingliche 16-Bit-Lösungen in Computern, die die x86-Architektur mit sich brachten, die (wenn auch mit erheblichen Verbesserungen) immer noch lebendig und gut ist. Die Hauptgeißel, die zu dieser Zeit die Entwicklung von 16-Bit-Prozessoren stoppte, war die „Beschränkung“ der Hersteller auf die Herstellung der sogenannten Support-Chips für 8-Bit-Architekturen. Zusammen bildeten sie die sogenannten Nord- und Südbrücken.In den frühen 80er Jahren haben viele Hersteller, die es satt haben, mit der Trägheit des Marktes zu kämpfen, einen Teil der Steuerungs- "Support-Chips" in den Prozessor selbst verschoben. Anschließend geht etwas vom Prozessor zu den Chipsätzen des Motherboards und kehrt dann zurück, aber selbst dann war eine solche Architektur modernen SoCs etwas ähnlich.Die Mitte und das Ende der 80er Jahre verliefen unter dem Banner des Übergangs zu 32-Bit-Speicheradressierung und 32-Bit-Prozessorkernen. Moores Gesetz funktionierte wie zuvor: Die Anzahl der Transistoren stieg, die Taktfrequenz und die „raue“ Prozessorleistung nahmen zu.Im Jahr 1991 erblickten die Prozessoren AMD Am386DX und Am386SX das Licht, dessen Leistung mit der der nächsten Systemgeneration vergleichbar war (486). Am386SX wird von vielen als die erste unabhängige Entwicklung des Unternehmens und als Ausgangspunkt für eine fast 15-jährige Dominanz auf dem Markt für Hochleistungs-Heim-PCs und Workstations angesehen. Ja, es war architektonisch ein Klon des i368SX-Chips, aber es hatte einen geringeren technischen Prozess, eine um 35% bessere Energieeffizienz und arbeitete gleichzeitig mit einer höheren Taktfrequenz als sein Vorläufer, aber es war billiger.
Die neunziger Jahre selbst waren sowohl reich an Ereignissen auf dem Gebiet der Mikroelektronik als auch an dem schnellen Wachstum des Marktes. In den 90er Jahren wurde AMD als einer der ernstzunehmenden Akteure auf dem Markt angesehen, da unsere Prozessoren in Bezug auf Preis und Leistungsverhältnis ihre Konkurrenten häufig vom Intel Pentium ausgeschlossen haben, insbesondere im Heimbereich. Ein erweiterter Befehlssatz (MMX / 3DNow!), Das Erscheinen eines Caches der zweiten Ebene, eine aggressive Abnahme der Prozesstechnologie, eine Erhöhung der Taktraten ... und jetzt ist das neue Jahrtausend bereits auf dem Hof.Im Jahr 2000 überquerten AMD-Prozessoren zum ersten Mal weltweit die Grenze bei 1 GHz, und wenig später nahm dieselbe K7-Architektur auch eine neue Höhe an - 1,4 GHz.Ende 2003 haben wir neue Prozessoren auf Basis der K8-Architektur veröffentlicht, die drei wichtige Neuerungen enthielten: 64-Bit-Speicheradressierung, einen integrierten Speichercontroller und den HyperTransport-Bus, der zu diesem Zeitpunkt eine erstaunliche Bandbreite bot (bis zu 3,2 GB / s).2005 erschienen die ersten Dual-Core-Prozessoren (Intel hat zwei separate Kristallkerne auf einem Substrat, AMD hat zwei Kerne in einem Kristall, aber mit einem separaten Cache-Speicher).Nach einigen Jahren natürlicher Entwicklung wurde die K8-Architektur durch eine neue (K10) ersetzt. Die Anzahl der Kerne auf einem Chip in der maximalen Konfiguration wurde auf sechs erhöht, ein allgemeiner Cache der dritten Ebene erschien. Und die Weiterentwicklung war eher quantitativ und qualitativ als revolutionär. Mehr Megahertz, mehr Kerne, bessere Optimierung, geringerer Stromverbrauch, feinerer Herstellungsprozess, verbesserte interne Einheiten wie ein Verzweigungsprädiktor, ein Speichercontroller und ein Befehlsdecoder.Was uns an der Entwicklung der GPU interessiert (als Teil des HSA-Artikels), kann sehr kurz beschrieben werden. Mit der Verbreitung von Computern als universelle Heimarbeits- und Unterhaltungslösungen sind Computerspiele immer beliebter geworden. Zusammen damit wuchsen die Möglichkeiten von 3D-Grafiken und erforderten angesichts von Videobeschleunigern immer mehr „Infusionen“ von Muskeln. Die Verwendung spezieller Mikroprogramme und Shader ermöglichte die Implementierung einer realistischen Beleuchtung mit relativ wenig Blut in 3D-Grafiken. Anfänglich wurden Shader-Prozessoren in Vertex- und Pixel-Prozessoren unterteilt (die ersteren waren für die Arbeit mit Geometrie verantwortlich, die letzteren für Texturen), später eine einheitliche Shader-Architektur und dementsprechend erschienen universelle Shader-Prozessoren, die Code sowohl für Vertex- als auch für Pixel-Shader ausführen konnten.GPGPU, Allzweck-Computing auf einem Grafikbeschleuniger, könnte mit Open Standard und OpenCL oder einem etwas vereinfachten Dialekt von C implementiert werden.Seitdem können wir von den wichtigsten Neuerungen in der GPU nur das Erscheinungsbild der Mantle-API auf niedriger Ebene erwähnen, mit der Sie auf AMD-Grafikkarten zugreifen können auf dem gleichen Niveau wie der Zugriff auf Grafikbeschleuniger in den PS4- und Xbox One-Konsolen) und die explosive Erhöhung der Speicherkapazität der GPU in den letzten zwei Jahren.
Dies ist das Ende der Geschichte, es ist Zeit, zum interessantesten überzugehen: HSA.Was ist HSA?
Ich möchte damit beginnen, dass HSA in erster Linie eine offene Plattform ist, auf deren Grundlage Mikroelektronikhersteller ihre Produkte (unabhängig von den verwendeten Anweisungen) bauen können, die bestimmten Grundsätzen und allgemeinen Regeln entsprechen.Gleichzeitig ist HSA eine Prozessorarchitektur, die skalare Berechnungen auf klassischen CPU-Kernen, massenparallele Berechnungen auf GPUs und die Signalverarbeitung auf DSP-Modulen kombiniert und diese über einen kohärenten Zugriff auf RAM verbindet. Das heißt, die gesamte Geschichte der Prozessor- und Videoproduktion in HSA konvergiert an einem Punkt: Fast 50 Jahre Fortschritt auf dem Gebiet der Mikroelektronik haben zur Schaffung einer logischen Kombination der besten Aspekte verschiedener Systeme geführt.Die Entwicklung der x86-Architektur und -Prozessoren ermöglichte die Erstellung hocheffizienter Prozessormodule, die gemeinsame Aufgaben und einen geringen Stromverbrauch bieten.Die Vereinheitlichung von Shader-Prozessoren innerhalb des GPU-Kerns und die allgemeine Vereinfachung der Programmierung für ein System mit einer großen Anzahl parallel ausführender Module haben der GPGPU die Möglichkeit gegeben, die Verarbeitungsleistung von Grafikkarten in den Bereichen zu nutzen, in denen zuvor separate Hardwarebeschleuniger verwendet wurden, die keinen konkreten Marktanteil gewonnen haben sich über Wasser halten.
Ein integrierter Speichercontroller, ein PCIe-Bus und ein E / A-System ermöglichten einen transparenten Speicherzugriff für verschiedene HSA-Module.Schließlich können Sie mit dem integrierten DSP die Last von der CPU und der GPU entfernen, wenn Sie mit Video- und Audioinhalten arbeiten, da er hardwarebasiert ist und die entsprechenden Signale codiert und decodiert.Alle diese Module zusammen decken das gesamte Spektrum moderner Aufgaben ab. Mit HSA können Sie Programmen transparent und einfach beibringen, mit klassischen Tools wie Java und C ++ mit allen verfügbaren Hardwarefunktionen zu arbeiten.Gründe für die Erstellung von HSA
Moderne Realitäten (die Verbreitung tragbarer und mobiler Elektronik, wirtschaftliche und ökologische Probleme) haben bestimmte Trends in der Entwicklung der Mikroelektronik hervorgebracht: Reduzierung des Energieverbrauchs aller Geräte, ob Smartphones oder Server, Steigerung der Produktivität, Verbesserung der Arbeit mit Mustererkennung.Das erste ist grundsätzlich verständlich. Jeder möchte, dass das Gerät länger funktioniert, das Gehäuse war nicht dick mit Big Mac und es wurde nicht wie eine Pfanne auf einem Herd erhitzt. Besitzer von Rechenzentren haben große Probleme, Wärme abzuleiten und eine unterbrechungsfreie Stromversorgung sicherzustellen. Wenn sie mit zusätzlichen Watt Wärmepaketpaketen beladen werden, erhöhen sich die Kosten für ihre Dienste. Teureres Hosting - mehr Werbung für Ihre Lieblingsressourcen, mehr CPU-Auslastung der Geräte, höherer Stromverbrauch, kürzere Akkulaufzeit.Eine Steigerung der Produktivität ist heute eine Selbstverständlichkeit. Die Menschen sind daran gewöhnt, dass Prozessoren seit den 70er Jahren jedes Jahr Leistungsrekorde brechen, Spiele immer schöner werden, Systeme und Software komplexer werden (und gleichzeitig ihre visuelle Geschwindigkeit nicht verlieren) und moderne Programmierwerkzeuge immer mehr Schichten der Eisenabstraktion enthalten , von denen jeder ein Stück echte Leistung nimmt.Nun, moderne Entwicklungen auf dem Gebiet der intelligenten Assistenten, virtuellen Assistenten und Entwicklungsperspektiven für künstliche Intelligenz erfordern einfach eine normale Erkennung menschlicher Sprache, Mimik und Gesten, was wiederum eine Steigerung der direkten Leistung und eine Optimierung der Audio- und Audio-Decodierungsvorgänge erfordert Videostream.All diese Probleme würden durch eine universelle Hardwarearchitektur gelöst, die in Form von SoC implementiert ist und die Reize klassischer CPUs und GPUs kombiniert, um serielle und parallele Operationen kompetent zwischen den Modulen zu verteilen, die die entsprechenden Aufgaben am effizientesten ausführen können.Aber wie kann man Software beibringen, mit all diesen großartigen Rechenfunktionen zu arbeiten?Hauptmerkmale eines heterogenen Systems
Programmierer sollten keine Probleme haben, auf die Rechenfähigkeiten eines solchen Systems zuzugreifen. Zu diesem Zweck verfügt die HSA über eine Reihe von Schlüsselfunktionen, die die Arbeit der Softwareentwickler vereinfachen und die HSA hinsichtlich der Entwicklung den klassischen Systemen näher bringen:- Einheitliche Adressierung für alle Prozessoren;
- Volle Gedächtniskohärenz;
- Operationen im Seitenspeichersystem;
- Benutzerdefinierter Sendemodus;
- Warteschlangenverwaltung auf Architekturebene;
- Hochsprachenunterstützung für Computerprozessoren - GPU;
- Kontextwechsel und präventives Multitasking.
Der Anwendungsentwickler muss keine einfachen Programmiersprachen verstehen: Standardkomponenten, eine einfache Zwischensprache, Interaktionsschnittstellen und Hardware stehen dem Entwickler zur Verfügung, und kohärenter Speicher und die Verteilung der Aufgaben zwischen den Computermodulen können leicht „unter der Haube“ verborgen werden.Die Rolle der einheitlichen Speicheradressierung kann kaum überschätzt werden. Formal würde es ohne sie keine HSA geben. Es spielt keine Rolle, wo sich die Daten im Speicher befinden, wie viele Kerne, Module und Recheneinheiten Sie haben. Sie bewegen den Zeiger und führen Berechnungen durch und "übertragen" keine Bytes von einem Aktuator zu einem anderen. Die Cache-Last wird reduziert und die Steuerung des Prozessors selbst wird vereinfacht. Die Abstraktion des Speichers auf Plattformebene ermöglicht die Verwendung des gleichen Codes für verschiedene Plattformen, was das Leben von Softwareentwicklern vereinfacht.Schwierigkeiten von OpenCL und C ++ AMP
Die Programmierung für parallele Systeme ist keine leichte Aufgabe. Um Entwicklern das Leben zu erleichtern, haben wir die Bolt-Bibliothek entwickelt, die effektive Muster für die am häufigsten verwendeten Vorlagen zum Sortieren, Verkleinern, Scannen und Transformieren von Daten mithilfe von Parallel Computing bietet.Um Java-Code zu beschleunigen, ohne ihn in OpenCL neu zu schreiben, wird eine spezielle AparApi-Bibliothek (Open Source) verwendet, mit der Sie Java-Bytecode in OpenCL konvertieren können, wobei paralleles Rechnen auf CPU- und GPU-Kernen unterstützt wird.In Zukunft ist geplant, Aparapi fertigzustellen, es zuerst mit HSAIL zu verknüpfen und dann einen speziellen Optimierer hinzuzufügen. Am Ende muss die HSA mit heterogener Beschleunigung direkt über die Java-Maschine arbeiten, die für den Benutzer und den Programmierer transparent ist.Wir haben bereits gesagt, dass HSA eine offene Plattform ist. APIs und Spezifikationen werden vom Entwickler kostenlos zur Verfügung gestellt, und die HSA selbst ist unabhängig vom Befehlssatz der CPU oder GPU.Um die Kompatibilität von Hardwarelösungen verschiedener Anbieter zu gewährleisten, haben wir unser eigenes ISA-Kit erstellt: HSAIL (HSA Intermediate Layer), das den Betrieb der Software unabhängig davon gewährleistet, was sich in der HSA-Lösung befindet. Intermediate Layer selbst unterstützt das Arbeiten mit Ausnahmen, virtuellen Funktionen und Speichermodellen moderner Sprachen. Daher sind keine Probleme mit der Unterstützung von C ++, Java und .Net zu erwarten, während Entwickler sowohl direkt auf die Hardware zugreifen als auch vorgefertigte Optimierungsbibliotheken verwenden können HSA, das Aufgaben unabhängig verteilt und die Kommunikation mit der Hardware rationalisiert, vereinfacht die Arbeit des Programmierers.
Hardwarekomponente
Nicht AMD allein lebt HSA. Für Entwickler ist es wichtig, dass einmal geschriebener Code auf verschiedenen Geräten gleich gut funktioniert. Jemand verwendet dafür Programmiersprachen auf hoher Ebene wie C ++ oder Java, aber wir empfehlen, auf einer niedrigeren Ebene zu arbeiten. Einerseits können klassische Anwendungen auf HSA-Geräten ausgeführt werden, als hätte sich nichts geändert. Betriebssysteme bieten alten Anwendungen einen klaren und einfachen Zugriff auf den Prozessor, den Speicher und den Videokern. Auf der anderen Seite können Sie mit HSAIL die gesamte Leistung aus dem neuen SoC extrahieren, und Entwickler können genauso einfach leistungsstarke und ressourcenschonende Anwendungen erstellen wie für die klassischen Betriebssystem- und Hardwarepakete.Jetzt HSA FoundationEs gibt sieben Unternehmen, die die Gründer dieser Organisation sind: AMD, ARM, Imagination Technologies, MediaTek, Texas Instruments, Samsung Electronics und Qualcomm®.Durch die Standardisierung im Bereich der Verteilung von Aufgaben auf Rechenkerne, der Übertragung von Daten- und Speicherzeigern und der Arbeit mit den Hauptelementen der Plattform mithilfe von HSAIL können Anbieter ihre Erfahrungen auf dem Gebiet des Eisens nutzen, und Entwickler müssen sich keine Gedanken darüber machen, was sich unter der Haube befindet. Unter HSAIL gemahlene Anwendungen funktionieren auf jeder Plattform.Vor- und Nachteile von HSA-basierten Hardwarelösungen
Die heterogene Architektur ermöglicht es Ihnen, die Funktionen der CPU und der GPU zu kombinieren. Dies ist der Hauptvorteil. Gleichzeitig kümmert sich HSA um den Energieverbrauch, ohne den Prozessor mit Berechnungen zu beladen, die auf der GPU wesentlich effizienter ausgeführt werden können.
Die Simulation der Festkörperphysik wird heute überall eingesetzt: von Computerspielen und 3D-Paketen bis hin zu CAD, Simulatoren für Ärzte, Militärs und Sportler. Die Arbeit an der CPU eines solchen Systems ist oft nicht optimal, weil erfordert zahlreiche, aber einfache Berechnungen. Und wenn die Anzahl der interagierenden Objekte Hunderte oder sogar Tausende überschreitet, können klassische CPUs einfach nicht die entsprechende Menge an Berechnungen bereitstellen. Die GPU-Architektur eignet sich jedoch so gut wie möglich für solche Berechnungen. Dank der einheitlichen Adressierung, des Seitenspeichers und der vollständigen Kohärenz können Sie die Berechnungen mit minimalen Ressourcen und Entwicklerressourcen auf die entsprechende Hardware übertragen.Die HSA-Leistung bei allgemeinen Aufgaben ist häufig höher als bei klassischen CPUs und höher als bei CPU + GPU-Bundles, da das Kopieren von Daten aus dem gemeinsam genutzten Speicher in den GPU-Speicher und das Zurücksenden von Berechnungsergebnissen unabhängig von der Größe der Treiber erforderlich ist mehr Zeit als die Berechnungen selbst.HSA ist bereits schneller als klassische Systeme, kann aber noch besser funktionieren. Tatsächlich ist das einzige aktuelle Minus des Systems, dass es neu ist. Die Popularität beginnt gerade zu wachsen, neue Eisenmodelle unter ungünstigsten wirtschaftlichen Bedingungen kommen langsamer auf den Markt, und die Popularität von HSA wächst nicht im gleichen Tempo, wie wir es uns alle wünschen. Sobald Entwickler einen Eindruck davon bekommen, die Vorteile von HSA und die einfache Entwicklung eines neuen Systems verstehen und beginnen, die heterogene Architektur in ihren Anwendungen nativ zu unterstützen, werden wir die Blütezeit neuer Hochleistungsanwendungen für Server, klassische Computer und mobile Geräte erleben. Source: https://habr.com/ru/post/de387439/
All Articles