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.
Antworten:
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
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 :
Shader / GPGPU können verwendet werden für :
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 .
quelle
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.
quelle