News Xeon Phi „Knights Landing“ mit 72 Kernen und On-Package DRAM

Krethi&Plethi schrieb:
ums gleiche geld bekomtm man bei AMD/Nvidia jedenfalls deutlich emrh Gflops und deutlich weniger verbrauch.

Hast du Nai auf deiner Ignoreliste oder ignorierst du schlicht sachliche Beiträge, weil du keine Lust hast etwas Neues zu lernen? Sehr viel besser als in den Beiträgen von Nai kann man es hier eigentlich nicht erklären. Und wir haben genau darüber schon damals beim ersten Xeon Phi diskutiert...
 
Nai schrieb:
Das gesamte Scheduling auf der GPU wird von der Hardware übernommen, da kann man als Programmierer oder als Compiler nichts dran ändern.

Das kann man so pauschal nicht sagen. Fermi hat einen Hardware-Scheduler, bei Kepler hingegegen ist der Scheduler in die Software gewandert.

Zur Latenz: Die wird versteckt, indem man nicht nur 1.000 Threads startet, sondern, sagen wir mal, 500.000 Threads. Intern werden diese Threads dann mit unterschiedlichen States versehen, um zu entscheiden, welche Threads denn nun auf den ALUs arbeiten sollen.
 
das sollte aber an der Latenz nichts ändern. Und siehe auch viele Threads = viele Zwischenergebnisse = extremer Speicherzugriff und Verbrauch wenn ich Nai richtig verstanden habe.
 
Was sind genau die Unterschiede zwischen Unified Memory und HUMA?

HUMA ist bzw. soll allgemeiner werden, als Unified Memory von NVIDIA im Moment ist, wobei NVIDIA ebenfalls sein Unified Memory ausbauen will.

HUMA soll meines Wissenstands nach in der fertigen Version bewirken, dass sowohl GPU und CPU gegenseitig jederzeit auf ihren gesamten Hauptspeicher (auch den ausgelagerten auf der Festplatte) zugreifen können, und dass deshalb sämtliche Cache untereinander cohärent gehalten werden.

Unified Memory in NVIDIA ist momentan etwas eingeschränkter. Es gibt zwei Möglichkeiten wie sich GPU und CPU einen Speicherbereich teilen können: Über pinned Memory und über Managed Memory. Versucht man andersweitig von der GPU aus auf den CPU-Speicher zuzugreifen oder Vize-Versa kommt es zu einem Programmabsturz per Segfault.

Bei Pinned Memory handelt es sich um Speicher im DRAM der CPU, welcher nicht auf die Festplatte ausgelagert werden darf und auf welchen PCI-E-Geräte schnell per DMA zugreifen können. Dieser Speicher ist in CUDA sowohl von der CPU als auch von der GPU aus über die selben virtuellen Addressen ansteuerbar, muss aber extra über einen extra Befehl alloziert werden. Dadurch kann man eine zeigerbasierte Datenstruktur, welche man im Pinned Memory im Host baut, ebenfalls auf der GPU verwenden und Vize-Versa.

Ein ähnlicher pinned Memory existiert ebenfalls bei AMD, wobei es mir hier etwas unklar ist ob die Radeon GPUs ebenfalls die selben virtuellen Addressen wie der Host verwenden, da man für deren Programmierung nur OpenCL verwenden kann, und OpenCL Kernels "keine Zeiger" sondern nur Buffer unterstützen.


Managed Memory ist ebenfalls sehr eingeschränkt im Vergleich zu HUMA. Hier hat es jemand mal beschrieben, wie es genau funktioniert, und was für Nachteile es hat:
https://devtalk.nvidia.com/default/topic/695408/first-impressions-of-cuda-6-managed-memory/

Eben deshalb gilt, dass der gemeinsame Speicherzugriff bei CUDA momentan im Vergleich zur finalen Version von HUMA etwas eingeschränkt ist.



Das kann man so pauschal nicht sagen. Fermi hat einen Hardware-Scheduler, bei Kepler hingegegen ist der Scheduler in die Software gewandert.

Da ich von offizieller Seite dazu nie etwas gelesen habe und es mir gemäß meines Wissenstands nicht plausibel erscheint, handelt es sich bei dieser Aussage vermutlich um ein Grücht.

Denn das Thread-Scheduling auf GPUs findet auf zwei Ebenen statt: Dem Thread-Block-Scheduling und dem Warp-Scheduling. Dabei ist ein Thread-Block eine Gruppe von N Warps, welche immer von einem Multiprozessor abgearbeitet wird. Will man auf der GPU etwas berechnen so startet man eigentlich viele Threadblocks (auch ein Gitter an Thread-Blocks genannt). Ein Thread-Block wird von dem Thread-Block-Scheduler der GPU einem Multiprozessor zugewiesen, sofern dort ein freier Platz für ihn ist. Der Thread-Block bleibt so lange auf diesem Multiprozessor bis alle seine Threads fertig sind. Jeden Takt wählt nun ein Multiprozessor mehrere Warps von den Thread-Blocks, die er gerade beherbergt aus, und gibt deren nächsten Befehl in Auftrag (Warp-Scheduling). Da insbesondere das Warp-Scheduling aber auch das Thread-Block-Scheduling sehr schnell gehen müssen, ist da keine Zeit etwas per Software (außer evtl in der Form von Mikrocode) zu bestimmen; zumal es äußerst ineffizient wäre solche häufigen Berechnungen per Software durchzuführen. Deshalb ist das in Hardware implementiert (siehe zum Beispiel GK 110 Whitepaper über die entsprechende Scheduling-Hardware). Dies äußert sich auch in den Hardwarelimitierungen von GPUs, wie der maximalen Occupancy oder der maximalen Größe des Thread-Block-Gitters.

das sollte aber an der Latenz nichts ändern. Und siehe auch viele Threads = viele Zwischenergebnisse = extremer Speicherzugriff und Verbrauch wenn ich Nai richtig verstanden habe.

Das ist korrekt.
 
Zuletzt bearbeitet:
Nai schrieb:
Da ich von offizieller Seite dazu nie etwas gelesen habe und es mir gemäß meines Wissenstands nicht plausibel erscheint, handelt es sich bei dieser Aussage vermutlich um ein Grücht.

Simplified Instruction Scheduler

Additional die spaces are acquired by replacing the complex hardware scheduler with simple software scheduler. With software scheduling, warps scheduling was moved to Nvidia's compiler and as the GPU math pipeline now has a fixed latency, it introduced instruction level parallelism in addition to thread level parallelism. As instructions are statically scheduled, consistency is introduced by moving to fixed latency instructions and a static scheduled compiler removed a level of complexity.[5][2][3][6]

Quellen stehen bei Wikipedia.
Ergänzung ()

Krautmaster schrieb:
das sollte aber an der Latenz nichts ändern. Und siehe auch viele Threads = viele Zwischenergebnisse = extremer Speicherzugriff und Verbrauch wenn ich Nai richtig verstanden habe.

Eigentlich ist es noch etwas anders: Du startest zwar hunderttausende von Threads, aber von diesen sind nicht alle gleichzeitig aktiv. Bei Kepler sind zB "nur" 2048 pro Multiprozessor aktiv, wenn ich es richtig im Kopf habe (bei Fermi 30% weniger). Durch das Starten von vielen Threads wird also der langsame Speicherzugriff verdeckt ("Latency Hidding").
 
der einzelne Speicherzugriff wird dadurch doch nicht schneller, und ich denke darum gings - vielleicht irr ich mich da aber auch. Prinzipiell würde ich eher von ausgehen, dass ich hohen IO auf den Speicher vermeiden will, sei es durch viele Threads oder was auch immer.
 
Nein, der einzelne Zugriff wird nicht schneller. Für viele Algorithmen ist deswegen auch die Speicherbandbreite der Flaschenhals. Die vielen Cores auf den Karten verhungern ansonsten ohne Daten. Am Besten geeignet für GPGPU sind deswegen Programme, die rechenintensiv sind (und nicht speicher(zugriffs)intensiv). Das gleiche Problem hat man aber noch viel mehr :D bei CPUs, denn hier stehen gerade mal 50 GB/s zur Verfügung. Bei Kepler zB mehr als 300 GB/s. Speicherzugriffsmuster und Datenstrukturierung sind deswegen für GPGPU sehr bedeutsam (für gute 'serielle' CPU Berechnungen allerdings auch:rolleyes:).
 
Was bringt diese Virtuelle Threads?
 
Ich nehme an die Sekundärquellen verwenden alle das als Primärquelle:

Fermi’s scheduler also contains a complex
hardware stage to prevent data hazards in the math datapath itself. A multi-port register scoreboard
keeps track of any registers that are not yet ready with valid data, and a dependency checker block
analyzes register usage across a multitude of fully decoded warp instructions against the scoreboard, to
determine which are eligible to issue.
For Kepler, we realized that since this information is deterministic (the math pipeline latencies are not
variable), it is possible for the compiler to determine up front when instructions will be ready to issue,
and provide this information in the instruction itself. This allowed us to replace several complex and
power-expensive blocks with a simple hardware block that extracts the pre-determined latency
information and uses it to mask out warps from eligibility at the inter-warp scheduler stage.

Das ist kein Software-Scheduling im dem Sinne wo ein Software-Programm oder ein Thread das Scheduling bestimmt wie "wähle hier Warp 2 aus falls. . . .ansonten Warp 3", wie es zum Beispiel Betriebssysteme machen (Eben das meinte ich mit Software-Scheduling; ich weiß leider nicht 100 Prozentig ob es noch andere Definitionen für den Begriff gibt). Sondern es verursacht lediglich, dass man Abhängigkeiten bei den Arithmetischen-Instruktionen in der Software hinterlegt, damit die GPU sie nicht selbst on the fly ermitteln muss. Diese Modellierungen haben vermutlich die Form wie "Du darfst die Nächste Instruktion erst in 2 Takten ausführen", was der Warp-Scheduler, welcher selbst eine Hardware ist, relativ leicht überwachen kann.

Solche Abhängigkeiten im Programmcode zu hinterlegen ist nicht unüblich. So gibt es beispielhaft sowohl bei NVIDA als auch bei AMD Synchronisationsinstruktionen, welche bewirken, dass die nächste Instruktion erst ausgeführt werden kann, wenn der zuvor folgende Speicherzugriff fertig ist.

Des Weiteren sind die Sekundärquellen m.E. teilweise relativ schlecht. Insbesondere Wikipedia hat den Absatz relativ schlecht wiedergegeben.
 
Zuletzt bearbeitet:
Artikel-Update: Am heutigen Abend hat Intel weitere kleine Details der Xeon Phi x200 als Nachfolger der aktuellen Xeon Phi 7100 offenbart. Dabei betonte der Hersteller, dass die genutzten „Silvermont“-Cores nicht mehr viel mit dem gemein haben werden, was aktuell bei „Bay Trail“ & Co zum Einsatz kommt. Dies beginnt bei einer überarbeiteten Sprungvorhersage und geht über die zusätzlichen Threads pro Kern bis hin zur neuen Cache-Hierarchie. Dabei bestätigte Intel, was Micron gestern bereits bekannt gab: Der On-Package DRAM kann mittel „Cache Mode“ so konfiguriert werden, dass er quasi als L3-Cache funktioniert.

[Bilder: Zum Betrachten bitte den Artikel aufrufen.]

Am Ende wird auch das neue Package eine Rolle spielen. Denn im sockelbaren Design wie die klassischen Xeon-Prozessoren werden sich Platzvorteile ergeben, sodass statt bisher maximal zwei „Knights Corner“-Lösungen in einem schmalen 1U-Rack drei oder noch mehr Lösungen verbaut werden können. Zusammen mit der deutlich gesteigerten Leistung soll der Weg zum Exascale-Supercomputer zum neuen Jahrzehnt einen großen Schritt vorangehen. Der nächste ist bereits geplant.

[Bilder: Zum Betrachten bitte den Artikel aufrufen.]
 
Der On-Package DRAM kann mittel „Cache Mode“ so konfiguriert werden, dass er quasi als L3-Cache funktioniert.

Klingt ja stark nachdem, was man schon oft bei IBM PPC gelesen hat. Da wird ja eDRAm auch als "L3 Cache" angesprochen.
Das kann übrigens die WiiU auch schon, dessen Prozessor L2 Cache eDRAM ist, ebenso den 32MB eDRAM auch als L3 Cache ansprechen kann.

Aber das zeigt auch ein wenig wo AMD hinwill. Falls ich mich nicht täusche arbeiten die doch auch mit Micron zam, das würde also bedeuten, dass wir sicherlich APUs sehen werden, die auch so einen eDRAM nützten, die dann ebenso von CPU als auch IGP (HSA) verwendet werden soll.
So kann man für Intel Iris-Pro auch als Weg dorthin deuten. (Krautmaster würde es als "dirty-Way" oder so bezeichnen. Glaub er weiß was ich meine).
 
@pipip

AMD arbeitet mit SK Hynix zusammen an multi-layer Speicher.
 
Im HPC Bereich sollte diese Entwicklungsrichtung nicht überraschen. Alle Halbleiterhersteller arbeiten an solchen Techniken. Wie sonst soll man die riesigen Datenmengen schnell aus den Registern raus und wieder rein bekommen?
 
Zurück
Oben