Techn.Umsetzung Grafikarten-Treiber

  • Ersteller Ersteller atlas77
  • Erstellt am Erstellt am
A

atlas77

Gast
Hallo,

ich frage mich immer mehr wie es zb AMD und Nvidia technisch in ihren Treibern bewerkstelligen, das die Treiber ständig auf Geschwindigkeit optimiert werden zb für bestimmte Spiele..,

warum ist das nicht immer gleich im Treiber, bzw welche Bibliotheken werden da angepasst die es auch nicht schon vorher geben würde?`
Was hat zb Spiel xy für andere Bibliotheken, die dann erst optimiert werden müssen im Treiber?Ansich ist doch vieles genormt(Direkt X, Api's, OpenGL)

Was passiert da technisch?Und warum kommt ein neuer Treiber und macht spiel xy schneller und kann aber auch die geschwindigkeit für das ältere spiel ab beibehalten?da muss doch der treiber immer größer werden rein theoretisch, oder?

welcher Programmcode/pfad ist denn da überhaupt zuständig?es müssen ja noch andere dinge im treiber sein..

freue mich auf verständliche ''fachaussagen''

mfg
 
vielleicht bauen sie auch nur irgendwelche effekte aus in bestimmten spielen, oder wie will AMD sonst eine steigerung >10% erreichen.

bzw. sichweite, detailreichung ect. anpassen.
 
Ganz sicher nicht. Es werden nur gewisse Routinen vereinfacht oder effizienter abgearbeitet.

Vielleicht gab es auch einfach Bugs bei denen eine Recheneinheit auf eine andere gewartet hat obwohl das garnicht nötig war. etc.

schloddabrodda schrieb:
vielleicht bauen sie auch nur irgendwelche effekte aus in bestimmten spielen, oder wie will AMD sonst eine steigerung >10% erreichen.
Aber natürlich macht das wieder mal nur AMD so. :lol:

Auf deine früheren Posts will ich damit garnicht eingehen:
https://www.computerbase.de/forum/t...ishera-basis-vor.1203545/page-5#post-13878333
https://www.computerbase.de/forum/threads/amd-radeon-hd-7990-im-test.1201640/page-3#post-13848408
 
Zuletzt bearbeitet:
Der Treiber kümmert sich einfach um die richtige Verständigung und Kompatibilität zwischen Software und Hardware.
APIs sind auch nur Software, auf Hardwareebene ist da das wenigste genormt ;)
 
Ich denke ein großer Bereich ist das weglassen von Berechnungen die man nicht sieht.

Insgesamt kann man sagen, daß bei 200MB Datenwust der Optimierungbedarf schlichtweg gigantisch ist.
Sieht man ja schon wieviel bei einem vergleichsweise simplen Browser möglich ist und wie schwierig es anscheinend ist, daß in jedem Browser alles so aussieht wie gedacht. :)
 
Naja, bis man von "Hochsprachenbibliotheken" auf Maschinencodeniveau ist,
dauert es entsprechend. Dazwischen ist überall Optimierungsspielraum. =)
Die Verteileung der Aufgaben über die gesamte GPU wird wohl auch von Hand nachkorrigiert,
bin ich mir aber nicht ganz sicher.
 
Dann ist das ganze ''Optimieren'' wohl etwas Marketing?

Weil es eigentlich garnicht geht ohne den Treiber riesig aufzublähen oder andere Routinen dafür zu vernachlässigen?

Mich würde interessieren wie das bei einem Treiber so grob abläuft, das muss ja irgendwie doch komplizierter sein.
 
Generell lässt sich das ganze wohl aufteilen in:
  • Optimierungen der "Runtime" des Treibers. Dies beinhaltet vermutlich unter anderem:
    • Der CPU-Overhead von diversen Befehlen wird verringert.
    • Eventuell Verbesserung des Managements des VRAMs.
    • Des Weiteren werden eventuell Programm spezifische Optimierungen ausgeführt. Diese analysieren die eingehenden Befehle abhängig vom ausgeführten Programm und führen sie anders aus als man erwarten würde.

  • Optimierungen des Shadercompilers des Treiber: Jeder Treiber besitzt einen Compiler, welcher die Hochsprache der Shaderprogramme der API (zb HLSL bei Direct3D) in eine GPU-spezifische Maschinensprache übersetzt. Diesen Compiler kann man ersteinmal programmunspezifisch optimieren, so dass er performanteren Code für seine GPUs erzeugt. Allerdings werden auch sicherlich programmspezifische Optimierungen vorgenommen. Bei diesen überprüft der GPU-Hersteller zuerst einmal welche Shaderprogramme während einer Programmausführung auftauchen. Diese werden dann per Hand optimiert und kompiliert im Treiber abgespeichert. Soll nun der Shadercompiler ein gegebenes Shaderprogramm während einer Programmausführung kompilieren, so schlägt er ersteinmal im Treiber nach, ob für dieses Shaderprogramm eine optimierte Version vorliegt. Wenn ja so findet keine Compilierung an sich statt, sondern es wird einfach das optimierte Shaderprogramm geladen.

Sowohl bei den programmspezifischen Optimierungen der Runtime als auch bei den programmspezifischen Optimierungen des Shadercompilers ist es afaik nicht unüblich, dass die GPU-Hersteller tricksen und hierbei die Performance oft auf Kosten der Korrektheit oder schlimmer auf Kosten der Darstellungsqualität erhöhen. Ich kann mich so dumpf daran erinnern, dass dies schon öfters so ein oder das andere "Skandälchen" gegeben hat.

Die Verteileung der Aufgaben über die gesamte GPU wird wohl auch von Hand nachkorrigiert,
bin ich mir aber nicht ganz sicher.
Das ist in Hardware gegossen, da kann man nichts optimieren.

Weil es eigentlich garnicht geht ohne den Treiber riesig aufzublähen oder andere Routinen dafür zu vernachlässigen?

Es wird nichts vernachlässigt, sondern der Treiber wird einfach aufgebläht und immer grösser und grösser. Deshalb ist ein Komprimierter Treiber heutzutage ja schon 200 MB gross. Vor 10-15 Jahren hatte ein GPU Treiber gerade einmal ~10-20 MB . . . .
 
Zuletzt bearbeitet:
Nai schrieb:
Es wird nichts vernachlässigt, sondern der Treiber wird einfach aufgebläht und immer grösser und grösser. Deshalb ist ein Komprimierter Treiber heutzutage ja schon 200 MB gross. Vor 10-15 Jahren hatte ein GPU Treiber gerade einmal ~10-20 MB . . . .

Vor 10-15 Jahren musste der "Treiber" auch keine Implementierungen für HDMI, Audio über HDMI, OpenGL, Direct3D, OpenCL, CUDA und andere Späße mitbringen. NV umfasst derzeit ca. 200MB. Der grafikbezogene Teile beträgt ~70MB. Das eigentliche Kernelmodul bringt 7 MB davon auf die Waage. Der Rest sind die Userland-Teile der APIs (d.h. 1 Compiler pro API + Implementierung).
Die restlichen 130 MB des Treiberpaketes sind control panel, PhysX, Audiotreiber, Updatetools, Übersetzungen, Bilder, Handbücher, u.s.w..

Der Treiber wird selten bis nie irgendwelche optimierten Shader auslieferen. Sobald der Spielehersteller sein Spielchen patcht, gibt's wahrscheinlich Probleme. Außerdem wird sich der Spieleentwickler nur ungern in die Karten schauen lassen.
Viel eher lassen sich diese APIs auf versch. Art und Weise verwenden. Dann können z.B. die Optimierungsstufen der Compiler auf die ein oder andere Verwendung hin verbessert werden. Das Scheduling und Memorymanagement hat sicherlich auch viel Potential für applikationsbezogene Verbesserungen.
 
Sapphire Forum
Zurück
Oben