Tensor-Recheneinheiten in NVIDIA-GPUs

  • Ersteller Ersteller M1ximili1n
  • Erstellt am Erstellt am
M

M1ximili1n

Gast
Hallo,
eine Frage die ich mir seit geraumer Zeit stelle: Ist es möglich die RTX-Hardware / Tensoreinheiten per Treiber als reguläre CUDA-Einheiten nutzen zu können? Ich meine damit eine Programmierung seitens Nvidia, welche die verbaute Hardware auf die Verschiedenen Gruppen (Spieler, Forschung, Wirtschaft) mittels maßgeschneiderter Software optimiert. Ich könnte mir ebenso vorstellen, dass es theoretisch möglich Grafik-Engines so zu entwickeln, dass einige Anwendungen darin mit 16-Bit laufen, während andere weiterhin in 32-Bit laufen.

Im Grunde ist ein Tensor-Kern doch einem CUDA-Kern recht ähnlich, bzw. er könnte doch seine Rechenleistung nutzen, wenn die Anwendungen so programmiert werden, dass 16-Bit Genauigkeit ausreichend sind?
Beide Recheneinheiten führen doch im Grunde MAC-Operationen aus, was deren Ähnlichkeit doch im Grunde bestätigt (immer handelt es sich um Matrizenmultiplikationseinheiten)
 
scheint eine von CUDA separate API zu sein: NGX SDK

Die AI Kerne sind aber keine generischen Rechenkerne, damit ist ausser für AI wohl nix zu reissen.
Und die können auch nicht mal alles rund um AI, die sind nur auf das AI-Anwenden auf neue unbekannte Daten gedacht. Für AI Training sind die nicht geeignet, da muss zuvor auf anderer Hardware (die idealerweise für Training spezialisiert ist) mit Trainingsdaten das Netz trainiert werden.
(Is halt als Konsumentenhardware konzipiert)
 
tensor Kerne sind simple Recheneinheiten die eine Aufgabe haben und einen shader in nichts zu vergleiche sind
aktuell ist das mathematisch multiplizieren und Wurzel ziehen einfach ausgedrückt
bedeutet in Grafikaufgaben kann man nur das Bild glätten = ausfüllen
In mathe lässt sich das nutzen um Daten Parallel zu berechnen
In 4bit 8bit 16bit und 32bit
dafür sind diese Einheiten gedacht.
Komplexe shading aufgaben bekommen diese nicht hin
 
Also sind Shader sogar noch intelligenter? Krass. Ich dachte diese wären schon verhältnismäßig dumm (Im Vergleich zu Recheneinheiten einer CPU).
Möglicherweise weiß nur Nvidia selbst, warum diese Hardware-Einheiten verbaut wurden und nicht einfach "mehr Shader" stattdessen, denn so würde die Rechenleistung ebenfalls steigen und Chipfläche ist die Mangelware schlechthin...
(http://www.3dcenter.org/news/der-7n...die-fertigungskosten-auf-gleicher-chipflaeche).
Die kommenden Optimierungen werden mit Sicherheit nicht billiger.

Zu dem Punkt Glätten/Ausfüllen: Dann könnte man doch die Tensors für die Auflösungsskalierung nutzen. Das ist doch das Problem überhaupt aktuell (und in Zukunft). Die Displayauflösung wächst stärker als die benötigte Rechenleistung. Aktuell habe ich das Gefühl, dass der Weg zu 6K oder 8K noch sehr weit ist (die umfangreicheren Spiele brauchen ja auch bei gleicher Auflösung mit der Zeit mehr Power) bzw. niemals bis in die Mittelklasse/Einsteiger "wandern" werden.... mit einer gtx1060 z.B. , einem Chip der aktuell etwa so teuer wie eine 8800GT vor 12 Jahren ist, lässt es sich nur in FullHD (einem Uralten Standard) spielen... Bei dem Tempo wäre man dann mit dem Pendant der GTX1060 in 10 Jahren bei WQHD bis max. UHD.
 
Zuletzt bearbeitet von einem Moderator:
Wieder einmal hat NVIDIAs Marketingsbegriffswirwarr gewonnen. Tensor Cores sind genauso wie Cuda Cores oder Shader Cores keine Kerne (Fick dich NVIDIA mit dem Core Begriff), sondern nur Ausführungseinheiten für eine bestimmte Menge von Instruktionen. Aktuell besitzt ein Kern bzw. ein SM einer Volta oder Turing GPU folgende Ausführungseinheiten, die alle per SIMD arbeiten:
-ALUs für Ganzzahlinstruktionen
-FPUs (aka CUDA Cores) für Gleitkommainstruktionen (primär Addition, Multiplikation) mit FP_16 und FP_32 Genauigkeit
-FPUs für Gleitkommainstruktionen (primär Addition, Multiplikation) mit FP_64 Genauigkeit
-SFUs für Winkelfunktionen, Exponentialfunktion, Logarithmus und Division mit FP_32 Genauigkeit
-Tensor Cores
-Texture Units
-Load Store Units für Speicherzugriffe
Ein GPU-Kernel kann prinzipiell sämtliche vorhandenen Ausführungseinheiten verwenden, sofern die entsprechenden Instruktionen im Kernel vorhanden sind. Für das Vorhandensein muss jedoch letztendlich der Programmierer bzw. der Compiler sorgen. Auch muss natürlich die Struktur des zu berechnenden Problems eine (effiziente) Verwendung solcher Instruktionen erlauben. Aktuell wird auf NVIDIA GPUs in einem Kernel nur eine einzige Art von Instruktionen von den Tensor Cores abgearbeitet, nämlich eine 4x4 FP16 Matrizenmultiplikation gefolgt von einer 4x4 FP_16 oder FP_32 Matrizenaddition (siehe https://devblogs.nvidia.com/programming-tensor-cores-cuda-9/), während alle übrigen Instruktionen an die übrigen Ausführungseinheiten gehen. Um die Tensor Cores als Programmierer auszunutzen, muss man sich also fragen wo man im Endeffekt in einem GPU Kernel eine solche Instruktion bzw. Berechnung sinnvoll ausnutzen bzw. einbauen kann. So spontan fallen mir hierfür beispielhaft Koordinatensystemtransformationen in Spielen ein, die auch auf Multiplikation von 4x4 Matrizen basieren.

Im Gegensatz dazu sind RTX-Cores (*) keine Ausführungseinheiten für besondere Befehle innerhalb eines Kerns, sondern Fixed Function Einheiten für die Strahlenverfolgung innerhalb einer Pipeline, ähnlich wie die GPU auch Fixed Function Einheiten für die Rasterisierung innerhalb einer Pipeline enthält. Selbst wenn Fixed Funtion Hardware offensichtlich auch Berechnungen ausführt, so ist es doch sehr schwer diese Rechenleistung abseits der Rasterisierung bzw des Raytracings sinnvoll in einem Programm anzuzapfen.

(*): Sind zwar mehr ein Kern als ein CUDA Core, aber ich halte es ebenfalls für fraglich nicht programmierbare fixed Function Einheiten als Kern zu bezeichnen...
 
Zuletzt bearbeitet:
Zurück
Oben