Ist die Texelfüllrate, die den rohen Zahlen nach niedriger ist als bei einer GTX770, dank der Architektur/Effizienz der GTX970 doch gleichwertig oder gar höher?
Ich weiß leider nicht, ob NVIDIA die innere Architektur der Texture-Units so überarbeitet hat, dass sie eine höhere Effizienz besitzen.
Was ist der Hintergrund Deiner Frage? Stell Dir vor. Die 900er Serie ist nicht nur da schlechter. Auch ihre CUDA Leistung hingt der ihrer Vorgänger hinter her. Aber ob es eine Rolle für Dein Anwendungsszenario spielt, das lässt sich in Deiner Frage nicht erkennen.
Es gibt keine "CUDA-Leistung" in dem Sinne . . . .
Die Texelfüllrate beschreibt die Fähigkeit einer GPU, Pixel oder sichtbare Polygone mit Textur-Informationen zu füllen
Das ist m.E. falsch. Die Texelfüllrate beschreibt wie oft die Texture-Units pro Sekunde eine Textur samplen können. Das Sampling kann an vielen verschiedenen Stellen für viele unterschiedliche Zwecke geschehen. Es kann beispielhaft nicht nur dazu dienen um im Fragmentshader einen Pixel einzufärben oder im Vertexshader den Eckpunkt eines Dreiecks gemäß einer Textur zu bewegen (Displacement-Mapping), sondern auch dafür um in CUDA oder OpenCL ein Bild per Gaussian-Blur zu glätten bzw. verschwimmen zu lassen.
Da dies idR. nur einen recht geringen Anteil der eigentlichen GPU-Arbeit ausmacht sondern mehr Zeit für Transformationen, Beleuchtungen, Schatten und Reflexionen aufgewendet wird, ist eine enorm hohe Texelfüllrate gar nicht notwendig.
Das ist auch irgendwo falsch. Die GPU kann *gleichzeitig* mit den Textur-Units und mit den übrigen Rechenkernen wie den CUDA-Cores (ALUs FPUs, wie auch immer NVIDIAs und cos. Marketinggeblubber sie jetzt nennen mag) rechnen. Dementsprechend kosten die Zugriffe auf Texturen keine Rechenzeit der CUDA-Cores. Jedoch dienen in den Shadern Texturen relativ oft bei vielen Verfahren als "Eingangsdaten" für die Berechnungen der CUDA-Cores. Kommen die Textur-Units nicht hinterher, so bleiben auch die CUDA-Cores untätig. Ein gutes Beispiel sind die von der genannten Punkte wie Schatten oder Reflexionen. Schatten werden über Shadow-Maps erzeugt. Für sanfte Schatten muss die GPU die Shadow-Map-Textur extrem oft samplen. Dadurch ist das ganze wieder Texelfüllratenintensiv. Reflexionen werden über das Sampling von Cube-Maps erzeugt, wodurch sie auch (wenige) Texturzugriffe benötigen. Alternativ kann man Verfahren wie SSAO betrachten. Um die Umgebungsverdeckung per SSAO in einem Bild zu berechnen muss im Shader ermittelt werden, wie die Tiefenwerte um den entsprechenden Pixel aussehen. Dafür muss der Shader sehr oft eine Tiefentextur samplen. Dadurch ist SSAO beispielhaft texelfüllratenlimitiert.
Wählt man die Texturen groß genug, so bremst die Texelfüllrate die Bildwiederholrate tatsächlich. Praktisch ist das aber ein eher unrealistisches Szenario, welches selbst diverse Texture-Mods für bekannte Spiele kaum nachbilden können.
Das ist wieder falsch. Die Texturauflösung ist unabhängig von derjenigen Texelfüllrate, welche man benötigt um sie zu zeichnen. Die benötigte Texelfüllrate ist primär abhängig von:
-Der Zahl der Texturzugriffe im Shader. So brauchen qualitativ hochwertige Shader in der Regel mehr Texturzugriffe.
-Die Qualität der Interpolation des Texturzugriffs: Nearest billiger als linear, linear billiger als triliniar, trilinear billiger als anisotrop
-Die Genauigkeit des Datentyps der Textur: FP32-Texturen sind teurer als FP16-Texturen, welche wieder teuer als INT8-Texturen sind.
-Der Zahl der Kanäle der Textur: Eine vierkanälige Textur kann teurer sein als eine einkanälige Textur (sogar wenn ich bei NVIDIA-Karten bei selbst geschriebenen Benchmarks keine Unterschiede gemerkt habe)
-Der Zahl der Primtive, die der Shader verarbeitet. Also Pixel oder in der Regel Vertexe, sofern man im Vertex-Shader Geometry-Shader oder Tess-Shader ebenfalls Texturzugriffe verwendet.
Ist dieses nur ein theoretischer Wert, der in der Praxis keine Relevanz hat?
Die Rohleistung auf diesem Gebiet ist noch immer über alle Szenarien erhaben, sodass du dieses "Manko" nicht in absehbarer Zeit erleben wirst.
Dann noch hierzu oder wie sich eine niedrigere Texelfüllrate allgemein auf die Performance auswirkt: Der Zeichenprozess bei Spielen ist nicht *homogen*, sonden er besteht aus einer Folge von stark unterschiedlichen Algorithmen beziehungsweise Pässen. Dadurch kann es vorkommen, dass der Shader bei einem ersten Pass gar keine Texturzugriffe tätigt, wodurch die Textur-Units untätig sind. Im nächsten Pass wird ein Shader verwendet, welcher viele Texturzugriffe tätigt. Dadurch ist die Performance in diesem Zeitraum nur durch die Texture-Units limitiert. Je nachdem wie viele texturzugriffslästige Pässe es gibt und wie viel sie von der Gesamtlaufzeit ausmachen, kann die Performance mal stärker mal weniger stark durch eine zu niedrige Texelfüllrate limitiert sein. Wie viel das genau ausmacht, ist, da Spiele extrem unterschiedlich sind, wohl von Spiel zu Spiel und von Einstellung zu Einstellung verschieden. Interessanterweise schreibt NVIDIA im GTX 980 Whitepaper dazu:
Based on efficiency and workload analysis, and math vs texture processing requirements of modern
games, NVIDIA engineers determined that eight texture units per SMM is the best architectural balancefor Maxwell therefore the total number of texture units is the same as Kepler, 128 (Anmerkung: 770 GTX meinen sie hier). However, thanks to GeForce GTX 980’s higher clocks, texture fill rate improves by 12% from one generation to the next.
Somit glauben die NVIDIA-Ingenieure, dass sie durch weniger Texture-Units und mehr übrigen Zeugs wie mehr CUDA-Cores, die Performance der GPU insgesamt in der Mehrheit der Anwendungsfälle steigern kann.
Fazit: Je nachdem wie das Spiel aufgebaut ist, könnte die GPU die Rechenleistung ihrer CUDA-Cores insgesamt etwas besser auslasten, wenn sie eine höhere Texturfüllrate hätte. Ob die GPU dadurch in Zukunft im Vergleich zu anderen GPUs deutlich schlechter wird, ist davon abhängig wie sehr sich in zukünftigen Spielen das Verhältnis zwischen Textur-Samples und Textur-Qualität zur übrigen Rechenlast ändern wird.