Forum: PC Hard- und Software AMD APU = CPU + GPU, GPU nimmt der CPU Arbeit ab, wie funktioniert das?


von Rolf R. (dankobum)


Lesenswert?

Ich habe das hier gelesen:

http://de.wikipedia.org/wiki/Accelerated_Processing_Unit

Nach dem Lesen frage ich mich, wie das konkret abläuft, wenn die GPU der 
CPU Arbeit abnimmt.

Ich stelle es mir so vor: Eine bestimmte Software auf einem 
Betriebssystem wie Windows oder Linux wird so eingestellt, dass sie zum 
Einen mehrere CUP-Kerne nutzten kann und zum Anderen Spezialaufgaben, 
für die die GPU der beste Rechenknecht ist, an die GPU übergibt. Ist das 
in der Realität so?

Oder wird eine solche Arbeitsverteilung auf der Ebene des 
Betriebssystems gemacht und die Software bemerkt das gar nicht?

Kann mir jemand einen typischen Fall beschreiben, wo die GPU Arbeiten 
erledigt, für die sie besser geeignet ist als die CPU, und wie genau die 
Verteilung der Arbeitspakete abläuft, also z.B. auf welcher Ebene in der 
ganzen Software bestehend aus Betriebssystem und Anwendungssoftware?

Was passiert, wenn die GPU durch ein Spiel mit anspruchsvoller Graphik 
schon genug zu tun hat und dann ein Programm Arbeitspakete hat, für die 
die GPU besser geeignet ist als die CPU?

von Christian R. (supachris)


Lesenswert?

Na das muss von den Entwicklern schon so programmiert sein. Z.B. per 
DirectX oder Mantle oder OpenCL. Damit lassen sich Funktionen bei denen 
es sinnvoll ist, auf die GPU auslagern. Von alleine nutzt das OS 
höchstens für sowas wie Windows Aero.

von Nanomaster (Gast)


Lesenswert?

Rolf R. schrieb:
> Nach dem Lesen frage ich mich, wie das konkret abläuft, wenn die GPU der
> CPU Arbeit abnimmt.

Na so wie bisher auch. Nur das man früher die GPU in Form einer 
Grafikkarte im PC hatte und sie jetzt in den Hauptprozessor integriert 
ist. Angesprochen wird das Ganze über CUDA, OpenCL oder ähnliche 
Schnittstellen.

von Christian V. (michse)


Lesenswert?

Sowas wird in OpenCL geschrieben. Dabei läuft auf der Mutter CPU ein 
Programm dass einzelne Funktionen an sogenannte Compute Devices 
übergeben kann. Das kann eine GPU, eine CPU, ein DSP, oder etwas ganz 
anderes sein.

Dabei kann der Programmier nach mehreren Kriterien Festlegen welches 
Gerät ausgewählt wird, vom OS kommt meistens nur die info was vorhanden 
ist.

Wenn gleichzeitig gespielt werden soll laggts halt, (und zwar ganz 
gewaltig) da GPUs (bei den neuesten bin ich mir nicht ganz sicher) kein 
Multithreading unterstützen und es dann solange kein neues Bild gibt bis 
die aktuelle Funktion fertig gerechnet hat(oder der ati treiber nach 3 
sec denkt die Gpu ist abgestürzt und einen Reset macht)

Typischer Anwendungsfall in diesem Board: Die Matlab FFT kann auf der 
GPU gerechnet werden.

von Achim (Gast)


Lesenswert?

Eine APU ist nicht nur eine GPU neben der CPU auf einem Chip, mit der 
neusten Entwicklungsstufen, ermöglichte AMD beiden Einheiten den Zugriff 
auf den selben logischen Speicher (Also müssen die Daten nicht erst vom 
"CPU-Speicher" in dem "Grafikspeicher" kopiert werden). Das ganze wird 
von AMD unter HSA (Heterogeneous System Architecture) Zusammengefasst 
und erlaubt den schnellen wechsel des Programms von GPU zu CPU und 
umgekehrt.

Dadurch hat man den Vorteil gegenüber den üblichen GPGPU Berechnungen, 
bei denen die Daten erst von einem Addressbereich des RAMs in einen 
anderen Kopiert werden oder sogar über den PCIe-Bus geschickt werden 
mussten.

Voraussetzung damit das alles genutzt wird ist allerdings die Software 
und hier sieht es leider noch mau aus. Die neuste OpenGL-Version müsste 
das Konstrukt theoretisch unterstützen, wird aber noch nicht verwendet, 
JAVA 7 wird mit HSA-Support 2015 erwartet, ...
Aktuell gibt es ein ein paar Techdemos, wie eine beschleunigte 
Libreoffice Calc Simulation/Berechnung (5x so schnell), einen 
umgeschirebenen Jpeg-Encoder für Windows (2x schnell), ...

Der Vorteil der GPU liegt darin, dass sie viele Hundert Kerne besitzt, 
die alle parallel rechnen können. So hat bei den Kaveri APUs zB. die CPU 
nur 60GFlops (single precision) die GPU das über zehnfache. Vorteile 
bringt das ganze also bei Workloads, die sich stark parallelisieren 
lassen. Im Prinzip die selben Anwendungen, in denen GPGPU auch jetzt 
schon genutzt wird: Photo und Videobearbeitung, Rendering, 
Physikberechnung, Physik Simulationen, Gesichts-/Objekterkennung müsste 
auch gut klappen, ...

Für das Spielen ist das ganze im Prinzip auch was, denn es ist zB. 
möglich die komplette Physikberechnung in Spielen und die KI auf der GPU 
der APU zu berechnen und die externe Grafikkarte für die Bildausgabe zu 
nutzen. Es wurde aber leider noch keine Grafikengine angekündigt, die 
das kann. Das dürfte aber nur eine Frage der Zeit sein, denn zumindest 
die PS4 besitzt auch vollen HSA Support und für die Konsolen wird idr. 
Entwickelt.

Achso, zum Spielen ist der Grafikteil aber nur bedingt geeignet (er ist 
schneller als alles was Intel hat (außer die Iris Pro, aber die kostet 
auch das 4-fache) und vergleichbar mit einer Nvidia GT640) und reicht 
auch locker für ältere Spiele, aber bei neueren Titeln fehlt doch noch 
etwas Leistung.

Im Prinzip beschränkt sich das ganze auch nicht nur auf die CPU und GPU, 
es können auch noch weitere Module mit dazu geholt werden, DSPs (Hat AMD 
mit TrueAudio zB. schon in Kaveri drin), FPGAs, spezielle De-/Encoder, 
... Also wie der Name schon sagt, alles was das System beschleunigen 
kann.

Ach und noch was, aktuell werden die APUs sehr stark vom Arbeitsspeicher 
beschränkt, mit DDR4 dürfte sich noch mal ein großer Schritt nach vorne 
ergeben.

Eine GPU müsst meines Wissens zumindest pro Compute Unit einen eigenen 
"Thread" abarbeiten können, also müsste die Software sich einen Teil der 
Rechenleistung in form einer CU "reservieren" können. Die GPU von Kaveri 
hat im Maximalausbau meines Wissens 8CUs mit je 64 "Kernen"

von Axel S. (a-za-z0-9)


Lesenswert?

Achim schrieb:
> Eine APU ist nicht nur eine GPU neben der CPU auf einem Chip, mit
> der
> neusten Entwicklungsstufen, ermöglichte AMD beiden Einheiten den Zugriff
> auf den selben logischen Speicher (Also müssen die Daten nicht erst vom
> "CPU-Speicher" in dem "Grafikspeicher" kopiert werden). Das ganze wird
> von AMD unter HSA (Heterogeneous System Architecture) Zusammengefasst

Ich enttäusche dich nur ungern, aber das Konzept, den Grafikspeicher in 
den Adreßbereich der CPU einzublenden (oder, vielleicht richtiger: ihn 
sich von dort zu "klauen"), ist so alt wie (vermutlich) du selber. Das 
mach(t)en schon der ZX Spectrum und C64 so.


XL

von Axel S. (a-za-z0-9)


Lesenswert?

Rolf R. schrieb:
> Nach dem Lesen frage ich mich, wie das konkret abläuft, wenn die GPU der
> CPU Arbeit abnimmt.

Sieh es einfach als eine Neuauflage des Coprozessor-Konzeptes an, wie es 
historisch mit dem 80x87 entstanden ist.

Der Unterschied ist, daß es nur eine 8087 Implementierung gab, aber 
einige Dutzend verschiedene Shader-Implementierungen. CUDA & Co. 
abstrahieren das (oder versuchen es zumindest), so daß aus Sicht des 
Programms verschiedene Grafikeinheiten wieder relativ ähnlich aussehen. 
Auf jeden Fall muß das Programm von vornherein so geschrieben sein, daß 
es von den "Coprozessoren" überhaupt Gebrauch macht. Automatisch geht da 
nix.

Früher<tm> hat man auch mal einen Coprozessor emuliert. Heutzutage ist 
es gebräuchlicher, daß die Software sich auf dem System erst mal 
umschaut, welche Möglichkeiten es denn gibt (nicht nur CUDA, auch SSE & 
Co) und dann aus verschiedenen Implementierungen (die alle eingebaut 
sind) diejenige auswählt, die auf der gerade verwendeten Hardware am 
schnellsten läuft.


XL

von (prx) A. K. (prx)


Lesenswert?

Axel Schwenke schrieb:
> Ich enttäusche dich nur ungern, aber das Konzept, den Grafikspeicher in
> den Adreßbereich der CPU einzublenden (oder, vielleicht richtiger: ihn
> sich von dort zu "klauen"), ist so alt wie (vermutlich) du selber. Das
> mach(t)en schon der ZX Spectrum und C64 so.

Allerdings leiden die bisher in PCs gängigen Verfahren zur Kooperation 
zwischen CPU und GPU trotz gemeinsamen Speichers mitunter an Ineffizienz 
beim Datenaustausch, wenn die GPU nicht in das Cache-Kohärenzverfahren 
der CPUs integriert ist.

: Bearbeitet durch User
von Achim (Gast)


Lesenswert?

Axel Schwenke schrieb:
> Ich enttäusche dich nur ungern, aber das Konzept, den Grafikspeicher in
> den Adreßbereich der CPU einzublenden (oder, vielleicht richtiger: ihn
> sich von dort zu "klauen"), ist so alt wie (vermutlich) du selber. Das
> mach(t)en schon der ZX Spectrum und C64 so.

Das Konzept, den selben physischen Speicher für die GPU und CPU zu 
nutzen ist alt, diese hatten aber dann meines Wissens immer ihre eigenen 
logischen Speicherbereiche auf die nur sie Zugriff hatten. Bzw. hatte 
die CPU die Hoheit über den gesamten RAM und musste der GPU die Daten 
erst zuschaufeln. Das hat man dann Shared-Memory oder sonst wie genannt.
Aber das beide Recheneinheiten einen Vollzugriff auf den gesamten 
Arbeitsspeicher haben, ist auf Grund der über mir erwähnten 
Kohärenz-Probleme so weit ich weiß noch nicht umgesetzt worden, außer 
eben bei den APUs. 100% festlegen will ich mich hier aber nicht, könnte 
nämlich sein, dass ich da vllt. doch was verpasst habe. Aber zumindest 
im Consumer Bereich dürfte das neu sein.

Die C64 GPU konnte zB. nur 16kB Adressieren, reicht also nicht für die 
vollen 64k des C64. (Quelle: Wikipedia) GPGPU, also Berechnungne auf der 
GPU und eben nicht nur Bilder Anzeigen, für das HSA ja am 
interessantesten ist, da man ja so schnell an die Ergebnisse der GPU 
kommt, kannte man damals auch noch nicht.

Der C64 war übrigens noch nicht vor meiner Zeit, sondern eher der Erste 
Kontakt zu Computern (genauso wie ein Amiga 500). Damals hat mich die 
Hardware aber leider nicht wirklich erklärt.

von Axel S. (a-za-z0-9)


Lesenswert?

Achim schrieb:
> Axel Schwenke schrieb ...

> Das Konzept, den selben physischen Speicher für die GPU und CPU zu
> nutzen ist alt, diese hatten aber dann meines Wissens immer ihre eigenen
> logischen Speicherbereiche auf die nur sie Zugriff hatten.

Nun, eine logische Aufteilung muß es auch bei der APU geben (und gibt 
es). OK, die Aufteilung ist heute komplett durch Software gesteuert und 
nicht wie früher zumindest teilweise durch Hardware.

Richtig ist, daß z.B. der VIC des C64 nicht selber in den Speicher 
geschrieben hat. Die diversen Coprozessoren im Amiga allerdings schon.

> Aber das beide Recheneinheiten einen Vollzugriff auf den gesamten
> Arbeitsspeicher haben, ist auf Grund der über mir erwähnten
> Kohärenz-Probleme so weit ich weiß noch nicht umgesetzt worden, außer
> eben bei den APUs.

Cache-Dekohärenz ist ebenfalls ein sehr altes Phänomen. Das kennt man 
seit den ersten Multiprozessorsystemen (dürfte IBM gewesen sein) wo die 
Prozessoren jeweils eigene Caches hatten.

Ich zweifle auch, daß die APU da groß Gedöhns machen. Die GPU selber hat 
wahrscheinlich gar keinen Cache. Und die CPU schaltet den Cache einfach 
ab, wenn sie auf Speicher zugreift, der der GPU zugeteilt ist.

Das ist auch nicht weiter tragisch, weil es keinen Grund gibt, warum CPU 
und GPU wirklich konkurrent auf den gleichen Speicherbereich zugreifen 
müßten. Das ist ein reines Producer-Consumer Setup. In einen 
Speicherbereich schreibt die CPU Aufgaben für die GPU, in einem anderen 
schreibt die GPU Ergebnisse für die CPU. Ein Cache nutzt da gar nix.

> Die C64 GPU konnte zB. nur 16kB Adressieren, reicht also nicht für die
> vollen 64k des C64. (Quelle: Wikipedia)

Nur halb richtig. Der VIC im C64 hat in der Tat nur 14 Adreßleitungen, 
kann also nur 16KB am Stück ansprechen. Allerdings hat eine CIA die 
anderen beiden Adreßbits geliefert (Bankswitching, eine noch ältere 
Technik) so daß am Ende die vollen 64K zumindest im Prinzip nutzbar 
waren.

Wie gesagt: die Technik die in aktuellen APU steckt (egal ob AMD oder 
Intel) ist nur dahingehend neu, daß sie viele, teilweise steinalte 
Konzepte auf einem Chip vereint. Das ist keine Revolution, sondern nur 
Evolution; im wesentlichen gedankt der Tatsache daß man die 
Halbleiterprozesse besser im Griff hat als früher und so größere Chips 
machen kann ohne daß der Yield in den Keller fällt.


XL

von (prx) A. K. (prx)


Lesenswert?

Axel Schwenke schrieb:
> Cache-Dekohärenz ist ebenfalls ein sehr altes Phänomen. Das kennt man
> seit den ersten Multiprozessorsystemen (dürfte IBM gewesen sein) wo die
> Prozessoren jeweils eigene Caches hatten.

Je mehr die GPUs in eine CPU-artige Rolle (=APU) gedrückt werden, desto 
mehr Features von CPUs kommen zu ihnen hinzu. Dazu gehört die genannte 
cache coherency, aber auch paging und context switches.

> Wie gesagt: die Technik die in aktuellen APU steckt (egal ob AMD oder
> Intel) ist nur dahingehend neu, daß sie viele, teilweise steinalte
> Konzepte auf einem Chip vereint. Das ist keine Revolution, sondern nur
> Evolution;

Richtig. Nichts davon ist grundlegend neu. Man muss es nur tun.

> Ich zweifle auch, daß die APU da groß Gedöhns machen. Die GPU selber hat
> wahrscheinlich gar keinen Cache.

GPUs mit Caches sind nicht ungewöhnlich (z.B. NVidia Fermi, 2 Levels).

> Und die CPU schaltet den Cache einfach
> ab, wenn sie auf Speicher zugreift, der der GPU zugeteilt ist.

Das genau ist ja das Problem. Wenn die CPU auf allen Speicher, den sie 
mit der GPU teilt, grundsätzlich non-cachable zugreifen muss, dann ist 
das ziemlich ineffizient und Massnahmen zur Effizienzsteigerung sind 
programmtechnisch umständlich.

Der Sinn dieser Entwicklung besteht gerade darin, dass bisherige Konzept 
einer völlig separat vor sich hin werkelnden und nur durch device driver 
kontrollierten GPU durch eines abzulösen, in der eine GPU funktional wie 
eine weitere CPU arbeitet, nur mit anderem Befehlssatz und anderen 
Möglichkeiten.

Bei Programmen mit mehreren x86 Threads geht man ja auch davon aus, dass 
sie kohärent auf den Speicher zugreifen können. Der Programmierer also 
nicht selber für Kohärenz sorgen muss, und keinen Speicher eigens 
deshalb im RAM festpinnen muss, damit das Paging nichts zerhagelt.

> Das ist auch nicht weiter tragisch, weil es keinen Grund gibt, warum CPU
> und GPU wirklich konkurrent auf den gleichen Speicherbereich zugreifen
> müßten.

Je kleinräumiger die Zusammenarbeit zwischen CPU und GPU wird, desto 
wichtiger wird das. In diese Richtung zielen auch Massnahmen zur 
Reduktion der Latenzzeit der APIs.

: Bearbeitet durch User
von MCUA (Gast)


Lesenswert?

> Ich enttäusche dich nur ungern, aber das Konzept, den Grafikspeicher in
> den Adreßbereich der CPU einzublenden (oder, vielleicht richtiger: ihn
> sich von dort zu "klauen"), ist so alt wie (vermutlich) du selber. Das
> mach(t)en schon der ZX Spectrum und C64 so.
Bloss, dass bei diesen Systemen nur entweder CPU oder GPU Zugriff auf 
den Speicher hatte.

von (prx) A. K. (prx)


Lesenswert?

MCUA schrieb:
> Bloss, dass bei diesen Systemen nur entweder CPU oder GPU Zugriff auf
> den Speicher hatte.

C64 ist nicht meine Welt, aber das gabs damals schon mit gemeinsamem 
Zugriff. Beispielsweise ein 6809 System mit Display-Controller als 
TTL-Grab (Eurocom, oder so ähnlich). Bei 65xx/68xx lag es ja nahe, in Φ1 
das Display und in Φ2 den Prozessor ran zu lassen.

Auch Sinclair ZX80 und ZX81 verwendeten das normale RAM als 
Display-Speicher. Und das ausserdem in sehr kreativer Weise, mit dem 
Prozessor als Display-Controller.

: Bearbeitet durch User
von MCUA (Gast)


Lesenswert?

bei diesen bisherigen Systemen (zB bei HCs oder auch bei STPC) wird (aus 
Kostengründen) nicht nur Speicher, sondern auch Speicher-Bandbreite 
abgezwackt. CPU u GPU müssen sich also die Bandbreite teilen.

von (prx) A. K. (prx)


Lesenswert?

MCUA schrieb:
> bei diesen bisherigen Systemen (zB bei HCs oder auch bei STPC) wird (aus
> Kostengründen) nicht nur Speicher, sondern auch Speicher-Bandbreite
> abgezwackt. CPU u GPU müssen sich also die Bandbreite teilen.

Richtig. Aber das tun 2 Cores einer CPU auch. Getrennter Speicher und 
unterschiedliche Vorgehensweise bei Cache-Kohärenz erschweren die 
Programmierung kooperierender Programme. Sowohl bei klassischen 
homogenen CPUs als auch bei heterogenen Gebilden aus CPU und GPU. Ist 
halt die Frage, was man erreichen will.

von MCUA (Gast)


Lesenswert?

>Aber das tun 2 Cores einer CPU auch.
Nö. Es kommt (immer) auf die Verschaltung an.

von (prx) A. K. (prx)


Lesenswert?

MCUA schrieb:
>>Aber das tun 2 Cores einer CPU auch.
> Nö. Es kommt (immer) auf die Verschaltung an.

Deshalb hatte der Cell Prozessor ja auch so durchschlagenden Erfolg im 
Markt, jenseits der Playstation.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.