GTX 570, 3D Vision: Ladevorgang bis zu 5 mal langsamer

KleinerHacker

Newbie
Registriert
Feb. 2012
Beiträge
5
Hallo,

ich habe eine NVidia GTX 570 Grafikkarte mit 1280 MB Ram. Aktiviere ich den 3D-Modus, so benötigen Spiele, wie Skyrim oder The Witcher 2, bis zu 5 mal länger, um die Szenerie zu laden. Ich betone an dieser Stelle, dass es hier wirklich ausschließlich um den Ladevorgang der Szenerie geht. Das Rendering läuft dann anschließend sauber, schnell und stabil.

Im 2D-Modus funktioniert alles so wie gehabt: Schneller Ladevorgang, flüssiges Rendering.

Informationen zu meinem Gesamtsystem:
Mainboard: ASUS P5Q Pro
Prozessor: Intel Core 2 Quad (2,66GHz)
RAM: 8GB (DDR2)
Grafikkarte: GTX 570 (Gainward, 1280 MB DDR5 RAM)

Was ist da los?

Danke. :(

PS: Ich bin Programmierer und kenne mich daher mit der Materie um DirectX recht gut aus. Also, sollte jemand vom Fach sein, kann er richtig loslegen :D
 
Tippe auf den Vram, der auf die HDD extrem langsam ausgelagert werden muss. Um die Theorie zu testen brauchen wir jetzt nur noch eine 2,5GB GTX 570er oder eine 3GB GTX 580, eine zur Hand?

PS: Nettes System, hab fast das gleiche. ^^
ASUS X48 Rampage
8GB Ram
Q9450
GTX 580 3GB
 
Zuletzt bearbeitet:
Hi,

danke für deine Antwort.

Leider ist das scheinbar nicht das Problem. Ich habe die ganze Aktion mittels Process Explorer aufgezeichnet (auch Grafikkartenaktivitäten) und dort ist zu sehen, dass nur ca. 19MB auf den RAM ausgelagert werden, wobei der RAM der Grafikkarte noch lange nicht sein Maximum erreicht hat. Zudem wird der Grafikkartenspeicher erst beim Rendering wichtig, der zum Zeitpunkt des Ladens der Szenerie noch nicht benötigt wird.

Ich verfolge zunächst noch eine weitere Theorie, die mit dem Runtertakten des RAMs zu tun hat. Werde dann gleich Bericht erstatten. :D
 
Zudem wird der Grafikkartenspeicher erst beim Rendering wichtig, der zum Zeitpunkt des Ladens der Szenerie noch nicht benötigt wird.
In welcher Welt lebst(Programmierst) du denn? Normale Spiele laden so viel wie möglich gleich am Anfang in den Vram, Crysis zb. Da sind dann direkt nach dem laden 1,8GB im Vram. Würden sie das nicht tu hätte man lange Zeit ein heftiges Ruckeln und Aufpoppen von Texturen...


Und auf die Auslastung Anzeigen kannst man nicht 100%ig vertrauen, die können auch ungenau sein bzw. Mist anzeigen. Entweder es ist ein Bug oder es hat irgend was mit der HDD zu tun. Hab eine GTX 580 3GB hier, bin jetzt aber zu faul um was zu testen. :D
 
<-- würde ja auf vsync/Frame-Lade-Zyklen tippen.

Viele Games laden ihre Daten pro Frame. Merkt man z.b. deutlich wenn man (im 2D-Modus) vsync aktiviert.
Beispiel GTA4. Das lädt bei einem entsprechend schnellem Rechner ohne vsync mit 2 Lade-Bildschirmen, sobald vsync aktiviert ist und man nur noch 60 FPS hat dauert es um einiges länger.

Beim 3D-Modus könnte ich mir genau das gleiche vorstellen, da ja die Nutz-FPS auch halbiert werden.

Ist natürlich nur eine Theorie, da ich noch nicht wirklich mit der Funktionsweise beschäftigt habe.

Einfach mal kurz zum Testen im 2D ausprobieren, ob vsync die Ladezeiten beeinflusst. Und dann überlegen wo der Zusammenhang zum 3D-Modus ist.
 
In welcher Welt lebst(Programmierst) du denn? Normale Spiele laden so viel wie möglich gleich am Anfang in den Vram, Crysis zb. Da sind dann direkt nach dem laden 1,8GB im Vram. Würden sie das nicht tu hätte man lange Zeit ein heftiges Ruckeln und Aufpoppen von Texturen...

Du hast dich mit Sicherheit noch nie mit Direct3D beschäftigt, oder? Solange man einen Pointer auf einen Wert innerhalb seines Programms besitzt, kann dieser NIEMALS auf den Grafikkartenspeicher zeigen. Das geht schlichtweg nicht. Also:

Code:
VertexBuffer buffer = new VertexBuffer(vertieces); //RAM
D3DTexture texture = D3DTexture.Load("test.bmp"); //RAM
.
.
.
D3DDEV8.BeginScene();

//Hier geht alles zur Grafikkarte
D3DDEV8.SetVertexShader(D3DFVF_D3DVERTEX); //Vertices
D3DDEV8.SetStreamSource(0, dreieckVB, sizeof(TD3DVertex));
D3DDEV8.SetTexture(0, texture); //Texture in die Grafikkarte laden (VRAM)
D3DDEV8.DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 1); //Rendern vom VRAM

D3DDEV8.EndScene();

Das ist natürlich nur ein einfach gehaltener Auszug. NIEMALS darf in den VRAM irgendetwas anderes geladen werden, als das, was gerade benötigt wird. Das lässt DirectX schlichtweg auch nicht zu.

Sollte es doch gehen, würde ich mich sehr über einen Direct3D Code-Schnipsel freuen, der mir zeigt, wie das gehen sollte. Danke. :freaky:

OK, zurück zum Thema. Danke für eure Antworten.
Ich habe noch etwas herausfinden können:
- 1. Am RAM liegt es nicht
- 2. Wenn ich die Auflösung 1280x720@60Hz einstelle, lädt er ganz normal. Nur unter der Auflösung 1920x1080@24Hz lädt er länger (gemessen ca. 7x).

Kommt das Spiel mit dem 24Hz-Modus (hm... falsche Bezeichnung, ist dann in Wirklichkeit 24 Bilder pro Sekunde mit 120 Hz Taktung) nicht klar, da er möglicherweise beim Rendern des Ladebildschirms versucht, eine (wie auch immer geartete) Synchronisation durchzuführen?

Danke.
Ergänzung ()

Mir ist noch was wichtiges aufgefallen:

Mir ist die Verlangsamung ausschließlich bei Skyrim und The Witcher 2 aufgefallen. Spiele, wie z. B. Track Mania 2 Canyon, die eine volle 3D-Unterstützung mitbringen, vergleichbar mit der der 3D-Vision-Ready Titeln (The Witcher 2, Skirim), haben keine Ladeverzögerung im 3D-Modus. Auch Die Sims 3 hat keinerlei Probleme mit dem Ladevorgang.

Daher habe ich nach Zusammenhängen gesucht und auch welche gefunden:
- Havok-Engine (Physikengine): Eine FX-Engine, die in Zusammenarbeit mit NVidia entwickelt wurde, um Physik mit dem Grafikchip zu entwickeln.
- Scaleform (GUI-Engine): Eine GUI-Engine zur Anzeige von GUI-Elementen am Bildschirm oder im 3D-Raum.

Diese beiden Engines werden von beiden Spielen genutzt. Daher ist es naheliegend, dass eine dieser beiden Engines einen Bug besitzt, der im 3D-Modus unter bestimmten Umständen den Ladevorgang verzögert. Ich würde jetzt mal so aus dem Bauch heraus die Physik-Engine dafür verantwortlich machen (was auch immer da schief geht).
 
Reden wir hier eignentlich von laden eines Spiels also ins Menü oder laden eines Save Games, wenn du mir verklickern willst das beim Laden(Save Game) nix in den Vram geschaufelt wird, dann musst du mir mal erklären wie das dann funktionieren soll, denn das ist 1000%ig falsch.

Ich sehe immer noch Anzeichen von Vram Mangel, Witcher II und Skyrim schlucken ordentlich, 720P braucht viel weniger als 1080P. Würde die Sache auf keinen Fall ausschließen.

Was ändert sich denn für die Physik wenn man die Auflösung höher stellt, macht irgend wie keinen Sinn...

<-- würde ja auf vsync/Frame-Lade-Zyklen tippen.
Auf jeden Fall gehen die FPS hauptsächlich in den Vram der GPU, da er 8GB Ram hat kann es der Hauptspeicher eigentlich nicht sein.
 
Ich weiss von meiner GTX 570 dass das Ganze massig an Leistung saugt, aber so...ich kanns ja auch mal testen...bisher hat mich soetwas nicht gekümmert bzw. ist mir nicht wirklich aufgefallen!

EDIT: Die Havoc-"Engine" ist nur CPU basiert.

Havoc-FX ist für GPUs und seitdem Havoc zu Intel gehört hat sich da nicht viel getan!

"Nach dem Kauf der Firma Havok durch Intel im September 2007 wurde Havok FX eingestellt."
 
Zuletzt bearbeitet:
Hi,

ja, das mit der Physik-Engine ist irgendwie seltsam, allerdings sind es die einzigen Zusammenhänge zwischen den Spielen. Naja, hätte mal den Wiki-Artikel bis zum Ende lesen sollen. :D

Wegen der Auslastung des VRAMS: Ich kann leider die Grafiken hier nicht zeigen, da ich keinen Web-Space besitzte, wo ich die Bilder hochladen könnte. Dort ist deutlich zu sehen, wie sich die Grafikkarte und der gesamte Rechner verhält.

Vielleicht hat jemand ja auch eine GTX 570 und Skyrim oder The Witcher 2 und hat dort ähnliche Erlebnisse gehabt (oder auch nicht).

Reden wir hier eignentlich von laden eines Spiels also ins Menü oder laden eines Save Games, wenn du mir verklickern willst das beim Laden(Save Game) nix in den Vram geschaufelt wird, dann musst du mir mal erklären wie das dann funktionieren soll, denn das ist 1000%ig falsch.

Ähm... was soll ich dazu sagen... Das Save-Game wird ja nun wirklich nicht in den VRAM geladen, was soll es denn dort?!

Folgendes: Wir haben aneinander vorbei geredet. Es ist in der Tat so, dass Direct3D Texturen im VRAM vorhält. Allerdings: Wenn dieser Voll ist, dann werden alte Texturen entfernt und neue kommen hinzu. Diese wandern dann vom RAM zum VRAM. Allerdings, und hier hast du unrecht, passiert das ganze beim aktiven Rendering, und nicht beim Laden der Szenerie:

http://books.google.de/books?id=WjfvgrcBiYQC&pg=PA487&lpg=PA487&dq=Texture+to+VRAM&source=bl&ots=w2t6dpMpyE&sig=U0pevKERFh96aV2V2W_ijd4DA1M&hl=de&sa=X&ei=IqUyT8KELM_Qsgab4qy2BA&ved=0CFIQ6AEwBA#v=onepage&q=ddsd&f=false

OK, Danke.
 
Zuletzt bearbeitet:
Danke.

Hier sind mal die Bilder vom Process-Explorer:

gpuvmir9.png

system8ad2k.png
 
Zurück
Oben