Wofür genau können Shader verwendet werden?

8

Ich bin nicht wirklich eine 3D-Person, und ich habe in einigen Three.js-Beispielen nur ein wenig Shader verwendet, und bisher habe ich den Eindruck, dass sie nur für den grafischen Teil der Gleichung verwendet werden.

Der (ziemlich kryptische) Wikipedia-Artikel und einige andere Quellen lassen mich jedoch glauben, dass sie nicht nur für grafische Effekte verwendet werden können, dh zum Programmieren der GPU ( Wikipedia ).

Die GPU ist also immer noch ein Prozessor, oder? Mit einem größeren und einem anderen Befehlssatz für eine einfachere und schnellere Vektormanipulation, aber dennoch einem Prozessor. Kann ich Shader verwenden, um reguläre Programme zu erstellen (vorausgesetzt, ich habe Zugriff auf den Videospeicher, was wahrscheinlich ist)?

Bearbeiten: reguläre Programme == "Anwendungen", dh Windows- / Konsolenprogramme erstellen oder zumindest eine Möglichkeit haben, Dinge auf dem Bildschirm zu zeichnen, möglicherweise sogar Benutzereingaben zu übernehmen.

jcora
quelle
2
Was meinst du mit "regulären Programmen"
Kravemir
2
+1 Für die süßeste Frage zur Spieleentwicklung, die ich je gesehen habe und die es auch geschafft hat, meine Sicht auf die Welt zu überdenken.
Knight666
1
"==" ist Komparator, kein Zuweisungsoperator :)
Kravemir
2
Ja, ich weiß, es ist immer noch gültig zu verwenden. Ich wollte der Definition keine Erklärung "zuweisen", ich wollte sie gleichsetzen.
JCora

Antworten:

13

Ursprünglich verfügte dedizierte Grafikverarbeitungshardware über einen festen, festverdrahteten Funktionsumfang. Es würde Eingabegeometrie erfordern, sehr spezifische Dinge tun, um sie zu transformieren und zu rastern, und dann die Ergebnisse auf den Bildschirm übertragen. Im Laufe der Zeit wurde diese Funktionalität parametrisiert und schließlich programmierbar. "Shader" wurde der Begriff für die Programme, die auf der GPU ausgeführt wurden, da sie die Transformation und Schattierung der Geometrie kontrollierten.

Mit der Weiterentwicklung der GPU-Hardware ist immer mehr davon programmierbar geworden, sodass der Großteil der Arten von Shadern, die man schreiben kann, nur noch indirekt zur tatsächlichen Schattierung von irgendetwas auf dem Bildschirm beiträgt (ich beziehe mich hier auf Dinge wie Geometrie und Rumpf-Shader ). Damit einher ging die Verallgemeinerung der GPU als Gerät für die Verarbeitung von hochkonkurrierenden Streams in großem Maßstab, so dass die Absicht einer GPU und von Shadern im Allgemeinen darin besteht, eine Art ausgefallenen grafischen Effekt zu implementieren, dies aber auch sein kann wird verwendet, um bestimmte Arten von Allzweckberechnungen durchzuführen (insbesondere solche, die für die parallele Berechnung geeignet sind). Dies wird häufig als Allzweck-GPU-Programmierung oder "GPGPU" bezeichnet.

Die GPU ist jedoch immer noch hochspezialisiert und kann nicht viele Dinge tun, die eine CPU tun könnte. Die Konnektivität zum Rest der Hardware in einem System ist ebenfalls eingeschränkt, sodass Sie "normale" Programme (mit Konsolenausgabe oder Mauseingabe usw.) nicht vollständig auf die GPU schreiben können. Sie können Berechnungen auf der GPU durchführen, die nicht als Rendering interpretiert werden sollen, aber keine eigenständige CPU ist.


quelle
5

Die GPU kann der CPU nicht sagen, was zu tun ist. Es kann nur Ergebnisse in seinem Speicher liefern, die von der CPU gelesen werden.

Shader / GPGPU können nicht verwendet werden für :

  • wobei Benutzereingabe direkt ohne CPU , da sie als CPU - Interrupts implementiert werden
  • Erstellung einer Anwendung , da Anwendungen vom Kernel verwaltet und von der CPU ausgeführt werden
  • Erstellung eines beliebigen Fensters , da der Fenstermanager / Server in der CPU ausgeführt wird

Shader / GPGPU können verwendet werden für :

  • Zeichnen auf dem Bildschirm / Fenster, aber es muss von der CPU gesteuert werden
  • Videodekodierungs / Kodierung
  • Bildverarbeitung in professionellen Grafikeditoren - verschiedene Effekte parallel ausführbare Effekte wie Unschärfe, Kanten schärfen, ...
  • physikalische Berechnungen

Siehe OpenCL . Es kann Shader für nicht grafische Berechnungen verwenden.

Bearbeiten basierend auf Kommentaren:

Shader werden nur zum Rendern von Grafiken verwendet. Das Durchführen von Nicht-Grafik-Berechnungen in der GPU wird als GPGPU bezeichnet .

Kravemir
quelle
Der letzte Punkt ist nicht ganz richtig. Sie verwenden keine Shader zur Berechnung der Physik. Sie verwenden die GPGPU-API wie OpenCL und CUDA.
Dreta
@dreta Ja. Es ist wahr. Aufgrund seiner Frage meinte er Shader als Hardware-Verarbeitungseinheiten. Er sagte "aber immer noch ein Prozessor".
Kravemir
2
Nun, dann korrigieren Sie ihn dafür, dass er falsch liegt. Warum erkennen Sie sein Missverständnis an? Er sagte, er sei kein Rendering-Guru. Shader sind nicht mehrdeutig, sie haben eine bestimmte Rolle
Dreta
-4

Einfach. Die Grafikverarbeitungseinheit bekam schließlich Shader, was eine schicke Hose für die Schattierung bewirkt. Dies wurde programmierbar, so dass die Effekte immer ausgefallener wurden. Schließlich wurde die gesamte GPU zu einer SIMD-Einheit.

SIMD bedeutet Single Instrution Muliple Data. Derzeit sind die GPUs wie ein Baum. Es hat X viele Kerne, jeder hat Y viele Kerne, Z viele Kerne. Je weiter Sie den Baum hinuntergehen, desto schneller und kleiner der Speicher, desto paralleler und einfacher die Berechnungen.

Die GPU ist also zu einer Art General Purpuse GPU geworden. Es wird nicht als CPU bezeichnet, da es nicht die Zentraleinheit ist, obwohl es E / A, Speicherverwaltung und Zeitplanung verarbeiten kann.

Es ist unnötig zu erwähnen, dass die Leistung der GPGPU darin besteht, dass einige Daten gleichzeitig teilbar und parallel ausgeführt werden müssen. Während es daher für die meisten allgemeinen Software-Zwecke nutzlos ist, arbeitet nVidia daran, die GPGPU zu einer CPU zu machen. Sie glauben, dass sie die GPU als ARM-CPU verfügbar machen können. Diese Übersetzungstechnik befindet sich auch in x86-CPUs, die im Kern RISC sind.

OpenCL, CUDA und DirectX sind wie eine geteilte Persönlichkeitsprogrammiersprache. OpenCL läuft beispielsweise auf der CPU, verlagert jedoch "Bomben" ("Kernel"), die von SIMD profitieren, auf die GPU.

Es wird nicht lange dauern, bis alles im Fusion / Sandy Bridge-CPU-GPU-Stil ist.

Vincent
quelle
3
-1. Ihre Wortwahl verringert die Qualität dieser Antwort drastisch.
Bummzack
Die Wortwahl ist an sich bedeutungslos: en.wikipedia.org/wiki/On_Denoting Daher verringert es nicht die Qualität der Antwort, da Qualität nichts mit der Frage zu tun hat, sondern mit Logik. Es ist eigentlich die richtigste Antwort.
Vincent
2
Wortwahl ist sehr wichtig. Wenn Sie eine anstößige Sprache verwenden, wird Ihre Antwort nicht als gut angesehen. Jemand mit einer lohnenden Antwort wird Zeit damit verbringen, sicherzustellen, dass sie eloquent und elegant ist.
Jonathan Pitre
Wenn Sie ein Problem mit der Sprache haben, bearbeiten Sie die Antwort. Es liegt an allen, die Website besser zu machen.
Tetrad
Wenn die Bitte um logisches Verständnis von einem zweikammerigen philosophischen Zombie kommt, würde sie mich trotzdem befriedigen, denn Wissen ist gleich Macht. Ich mag es nicht, Wissen an Zweikammer zu übergeben, die Emotionen mehr schätzen als Logik. Es verbessert nur die Antwort.
Vincent