Warum haben GPUs noch Rasterizer?


14

Trotz der Fortschritte haben moderne GPUs immer noch feste Rasterizer. Sehr anpassbar, mit programmierbaren Shadern, aber dennoch nicht vollständig programmierbar.

Warum das?

Warum können GPUs nicht einfach massiv parallele Geräte mit universellen Recheneinheiten sein, bei denen Rasterizer nur eine vom Benutzer bereitgestellte Software für dieses Gerät ist?

Ist die Leistung einer Hardware mit festen Funktionen so günstig, dass ein solcher Ansatz nicht durchführbar ist?


1
"Warum ist ein Grafikprozessor kein Universalprozessor", ist das Ihre Frage?
Andreas

1
@ Andreas Nein, meine Frage ist wie in der Post angegeben. Warum sind Rasterizer immer noch ein Hardwareteil, obwohl sie in Software erstellt werden können (tatsächlich können sie bereits mit OpenCL oder Compute-Shadern erstellt werden)? Die Frage ist, warum es nicht üblich ist ... vielleicht ist es einfach Leistung, ich weiß nicht, deshalb
frage

Sie können die Rasterung umgehen und Ihren eigenen Rasterizer mit Recheneinheiten auf modernen GPUs implementieren, und ich kenne Leute, die dies für bestimmte Zwecke tun.
JarkkoL

Rasterizer konvertieren Vektor-Polys in eine Reihe von Pixeln, die wir beleuchten können. Wenn wir keine Pixel mehr haben oder keine Vektorgeometrie mehr verwenden, benötigen wir keine Rasterer mehr. Egal wie der Rest Ihrer Pipeline aussieht, am Ende des Tages (oder Rahmens) benötigen Sie Pixel. Der Rasterizer teilt uns nur mit, um welche Pixel es sich bei einem bestimmten Dreieck handelt. All dies ist programmierbar. Wenn Sie unterschiedliche Ausgaben vom Rasterizer erhalten möchten, senden Sie unterschiedliche Dreiecke. Oder zeichnen Sie einfach alles zu einer Rendertextur in einem Compute-Shader und teilen Sie es mit einem an der Ansicht ausgerichteten Quad auf den Bildschirm.
3Dave

Antworten:


15

Kurz gesagt, Leistungsgründe sind, warum sie nicht programmierbar sind.

Geschichte und Markt

In der Vergangenheit gab es separate Kerne für Vertex- und Fragment-Prozessoren, um aufgeblähte FPU-Designs zu vermeiden. Es gab einige mathematische Operationen, die Sie beispielsweise nur in Fragment-Shader-Code ausführen konnten (da sie meist nur für Fragment-Shader relevant waren). Dies würde zu schwerwiegenden Hardware-Engpässen bei Anwendungen führen, bei denen das Potenzial der einzelnen Kerntypen nicht ausgeschöpft wird.

Als programmierbare Shader immer beliebter wurden, wurden universelle Einheiten eingeführt. Immer mehr Stufen der Grafik-Pipeline wurden in Hardware implementiert, um die Skalierung zu erleichtern. In dieser Zeit wurde auch GPGPU immer beliebter, sodass die Anbieter einige dieser Funktionen einbauen mussten. Es bleibt jedoch zu beachten, dass der Großteil der Einnahmen aus GPUs immer noch Videospiele waren, sodass dies die Leistung nicht beeinträchtigen konnte.

Schließlich entschied sich ein großer Player, Intel, in programmierbare Rasterizer mit ihrer Larrabee-Architektur zu investieren . Dieses Projekt sollte wegweisend sein, aber die Leistung war anscheinend weniger als gewünscht . Es wurde heruntergefahren und Teile davon wurden für Xeon Phi-Prozessoren geborgen. Es ist jedoch erwähnenswert, dass die anderen Anbieter dies nicht implementiert haben.

Versuche an Software Rasterizers

Es gab einige Versuche zur Rasterung durch Software, aber alle scheinen Probleme mit der Leistung zu haben.

Eine bemerkenswerte Anstrengung war ein Versuch von Nvidia im Jahr 2011 in diesem Papier . Dies wurde kurz vor der Kündigung von Larrabee veröffentlicht, daher ist es sehr wahrscheinlich, dass dies eine Reaktion darauf war. Unabhängig davon gibt es einige Leistungsangaben, von denen die meisten eine um ein Vielfaches langsamere Leistung als Hardware-Rasterizer aufweisen.

Technische Probleme mit der Software-Rasterisierung

In der Nvidia-Veröffentlichung wurden viele Probleme angesprochen. Hier sind jedoch einige der wichtigsten Probleme mit Software-Rastern:

Große Probleme

  • Interpolation: Die Hardware-Implementierung generiert Interpolationsgleichungen in spezialisierter Hardware. Dies ist für den Software-Renderer langsam, da dies im Fragment-Shader durchgeführt werden musste.

  • Anti-Aliasing: Es gab auch Leistungsprobleme beim Anti-Aliasing (speziell beim Speicher). Informationen zu den Subpixel-Samples müssen auf dem Chip gespeichert werden, was nicht ausreicht, um dies zu speichern. Julien Guertault wies darauf hin, dass der Textur-Cache / Cache mit Software möglicherweise langsamer ist. MSAA hat hier sicherlich Probleme, da es den Cache (die Nicht-Textur-Caches) überläuft und außerhalb des Chips in den Speicher gelangt. Rasterizer komprimieren Daten, die in diesem Speicher gespeichert sind, was hier auch für die Leistung hilfreich ist.

  • Stromverbrauch: Simon F wies darauf hin, dass der Stromverbrauch geringer sein würde. In dem Artikel wurde erwähnt, dass benutzerdefinierte ALUs in Rastern enthalten sind (was den Stromverbrauch reduzieren würde), und dies wäre sinnvoll, da Fragment- und Vertex-Verarbeitungseinheiten in der Vergangenheit benutzerdefinierte Befehlssätze verwendeten (also wahrscheinlich auch benutzerdefinierte ALUs). Dies wäre sicherlich ein Engpass in vielen Systemen (z. B. mobil), obwohl dies Auswirkungen über die Leistung hinaus hat.

Zusammenfassung

TL; DR: Es gibt zu viele Ineffizienzen, die beim Rendern von Software nicht behoben werden können, und diese Dinge summieren sich. Es gibt auch viele größere Einschränkungen, insbesondere wenn Sie sich mit VRAM-Bandbreite, Synchronisationsproblemen und zusätzlichen Berechnungen befassen.


Ich glaube nicht, dass Sie die Subpixel-Samples speichern müssen, wenn das Filtern von Boxen ausreicht, dann können Sie einfach laufende Durchschnittswerte berechnen.
Joojaa

2
Ich vermute, dass Texturabtastung und Cache wahrscheinlich auch Bereiche sind, in denen Hardware-Implementierungen eine Leistung ermöglichen, die mit Software-Implementierungen ansonsten unmöglich zu erreichen ist.
Julien Guertault

3
@aces Ein weiteres erwähnenswertes Element ist die Leistung. Dedizierte Hardware erledigt die gleiche Aufgabe in der Regel mit einem Bruchteil des Strombudgets, und wenn die Stromeinsparung bereits ein Problem darstellt, insbesondere bei Mobilgeräten, würde eine vollständige Programmierbarkeit die Leistung erheblich verschlechtern.
Simon F

@ JulienGuertault Fairer Punkt, aber ich würde denken, dass dies hauptsächlich für MSAA gilt. Die Testergebnisse scheinen darauf hinzudeuten, dass dies kein großes Problem ist, wenn alles auf den On-Chip-Speicher passt (auch wenn dies eine gewisse Auswirkung auf die Leistung haben könnte).
Asse

@ SimonF Ich denke, das ist auch ein großartiger Punkt. Ich habe es in die Antwort aufgenommen.
Asse
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.