PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Direct3D, Vista und Multicore Prozessoren.


Demirug
2006-05-07, 00:07:55
Das folgenden basiert auf vorläufigen Informationen zu Windows Vista und könnte sich bis zur finalen Version noch ändern.

Immer mehr neue Computer enthalten Multicore Prozessoren und sind damit auf entsprechende Software angewiesen um die zusätzliche Leistung des zweiten Kerns auszunutzen. Bei vielen Spielen im heimischen Regal fehlt eine entsprechende Optimierung und die neue CPU zeigt entsprechend wenig Wirkung. Auch bei neuen Titeln finden sich nicht immer entsprechende Optimierungen. Aber selbst bei den Vorreitern im Bereich der Multicore Optimierung wird der zweite Core oftmals nicht vollständig ausgereizt.

Eine Leistungsreserve die auch Microsoft bemerkt hat. Da aufgrund des neuen Treibermodels eine Überarbeitung der Direct3D Runtimes unausweichlich war wurde auch gleich eine entsprechenden Optimierung vorgenommen. Dabei kann die Verlagerung der Arbeit auf den zweiten Core entweder von der Runtime oder vom im User Mode laufenden Treiber selbst vorgenommen werden.

Überlässt der Treiber der Runtime die Optimierung wird diese einen zusätzlichen Thread erzeugen. Fast alle Aufrufe in den Treiber werden dann von diesem Thread vorgenommen. Der Treiber läuft damit weitgehend nicht mehr auf dem gleichem Core wie der Rest vom Spiel die dadurch frei werdende Leistung kann das Spiel nutzen.

Um dies zu erreichen speichert die Direct3D Runtime alle Aufrufe die keine Ergebnis vom Treiber erwarten in einem Zwischenpuffer der dann vom zusätzlichen Arbeitsthread abgearbeitet wird. Aufrufe die einen Rückgabe Wert erfordern müssen aber weiterhin vom Hauptthread ausgeführt werden. Da der Treiber aber immer nur von einem Thread aus gleichzeitig aufgerufen werden darf muss in solchen Fällen immer synchronisiert werden. Glücklicherweise ist die Anzahl der entsprechenden Funktionen aber begrenzt so das man immer noch mit einer recht guten Ausbeute rechnen kann.

Allerdings nur wenn die Optimierung auch aktiviert ist und es gibt eine Reihe von Fällen in denen das nicht der Fall sein wird.

1.Eine Hyperthreading CPU wird nicht in den Genuss der Multiprozessor Optimierung kommen.
2.Läuft die Anwendung im Fenstermodus bleibt die Optimierung ebenfalls aus.
3.Programme die Software Vertex Processing nutzen sind auch ausgeschlossen.
4.Spiele die Direct3D 8 oder ältere Versionen nutzen sind ebenso ausgenommen.
5.Zu guter Letzt kann eine Anwendung auch selbst die Optimierung deaktivieren.

Diese Begrenzungen gelten auch wenn die Multicore Optimierung vom Treiber selbst vorgenommen wird.

kevsti
2006-05-07, 00:46:29
Demirug[/POST]'][i]<abgekürzt...>
4.Spiele die Direct3D 8 oder ältere Versionen nutzen sind ebenso ausgenommen.
<abgekürzt...>Direct3D 9 wird doch wohl auch ausgenommen sein? den die jetzigen Direct3D 9 Games haben wohl kaum auf ne funktion, die erst in den Direct3D "Vista" kommt, zugreifen? oder macht das Direct3D auto. auch bei älteren Games mit Direct3D 9?

Demirug
2006-05-07, 00:48:56
kevsti[/POST]']Direct3D 9 wird doch wohl auch ausgenommen sein? den die jetzigen Direct3D 9 Games haben wohl kaum auf ne funktion, die erst in den Direct3D "Vista" kommt, zugreifen? oder macht das Direct3D auto. auch bei älteren Games mit Direct3D 9?

Für Direct3D 9 Spiele wird das automatisch aktiviert wenn man einen Vista Treiber hat und die sonstigen Bedingungen erfüllt sind.

Coda
2006-05-07, 00:56:45
Wieso ist es bei Software Vertex Processing aus? Gerade da sollte es doch Sinn machen?

Demirug
2006-05-07, 01:01:48
Coda[/POST]']Wieso ist es bei Software Vertex Processing aus? Gerade da sollte es doch Sinn machen?

Jaein. Beim Software Vertex Processing kommen ja entsprechenden Module von Intel und AMD zum Einsatz und zumindestens die von AMD sind schon Multicore optimiert.

kevsti
2006-05-07, 02:12:14
Das ist interessant mit den Direct3D 9 Spielen hmm.. da wäre wirklich mal eine meisterleistung von MS nicht nur eine Funktion einzubauen sondern diese auto. zu benutzen und das auch noch abwärtskomp. zu Direct3D 9 (nen DX8 Game hat sowieso solche vergleichweiße schlechte Qualität, das ein SingleCore 2007 gerade zu überdimensioniert ist..)

tombman
2006-05-07, 09:43:48
hmm, die Anwendung selbst kann die O deaktivieren?

Na dann werden das viele devs einfach so machen um sich nicht mit den Problemen des multi-threaded proggn beschäftigen zu müssen :(

Ich wäre für einen multi.-threaded ZWANG für alle Vista games :cool:

Demirug
2006-05-07, 10:03:53
tombman[/POST]']hmm, die Anwendung selbst kann die O deaktivieren?

Ja aber alle ganzen "alten" Anwendungen enthalten diesen Code natürlich nicht.

tombman[/POST]']Na dann werden das viele devs einfach so machen um sich nicht mit den Problemen des multi-threaded proggn beschäftigen zu müssen :(

Eher nicht. Zum einen ist die Optimierung ja standardmässig an. Die meisten Devs ändern die die Standardeinstellungen nur wenn es notwendig ist. Zum anderen ist die Optimierung für die Anwendung selbst transparent. Der Entwickler muss sich dafür nicht mit Multithreading herumschlagen. Das erledigt die Runtime von aleine.

tombman
2006-05-07, 10:35:32
Demirug[/POST]']
Eher nicht. Zum einen ist die Optimierung ja standardmässig an. Die meisten Devs ändern die die Standardeinstellungen nur wenn es notwendig ist. Zum anderen ist die Optimierung für die Anwendung selbst transparent. Der Entwickler muss sich dafür nicht mit Multithreading herumschlagen. Das erledigt die Runtime von aleine.

Nice, denkst du multi-core cpus werden in Zukunft RICHTIG ausgenutzt oder weiterhin eher halbherzig behandelt? Mit Zukunft meine ich 06/07 ;)

Gast
2006-05-07, 10:38:55
CPU wird ja nur zu ~30% (genaue Zahl weiss ich jetzt ned) für gradfikberechnungen verwendet, von daher sind auch nur 30% Verbesserung möglich (theoretisch, praktisch weniger, da eine absolut gleichmässige Verteilung der Rechenlast auf beide CPUs nicht möglich ist und zusätzlichen Verwaltungsaufwand benötigt)

Ganon
2006-05-07, 10:50:22
tombman[/POST]']Mit Zukunft meine ich 06/07 ;)

Erst mal muss Vista kommen ^^

maprie
2006-05-07, 11:20:02
In welchem Bereich liegt die Leistungssteigerung? Wahrscheinlich nicht viel, so um 5%?

kevsti
2006-05-07, 11:38:38
maprie[/POST]']In welchem Bereich liegt die Leistungssteigerung? Wahrscheinlich nicht viel, so um 5%?kommt drauf an was Direct3D alles Optimiert.. aber mehr als auf 30% CPU Last beim Spielen kann Direct3D wohl eher nicht zugreifen.. wenn er die 30% auf 2 CPUs verteilt wären das 15% aber nur theo.. der prakt. wert kann auch bei ~10% liegen.. naja abwarten und tee trinken..

oliht
2006-05-07, 11:41:27
maprie[/POST]']In welchem Bereich liegt die Leistungssteigerung? Wahrscheinlich nicht viel, so um 5%?

Nun ja der Effekt bei Autoparallelisierung ist ja der Effekt das es meist langsamer läuft. 5 % wären da schon ein Erfolg.

HellHorse
2006-05-07, 12:20:52
Demirug[/POST]']
Überlässt der Treiber der Runtime die Optimierung wird diese einen zusätzlichen Thread erzeugen. Fast alle Aufrufe in den Treiber werden dann von diesem Thread vorgenommen. Der Treiber läuft damit weitgehend nicht mehr auf dem gleichem Core wie der Rest vom Spiel die dadurch frei werdende Leistung kann das Spiel nutzen.
Inwiefern unterscheidet sich das von dem was die "dualcore Optimierung" die der NVIDIA Treiber im Moment macht? Ich dachte der macht genau das.

Godmode
2006-05-07, 12:43:21
tombman[/POST]']Nice, denkst du multi-core cpus werden in Zukunft RICHTIG ausgenutzt oder weiterhin eher halbherzig behandelt? Mit Zukunft meine ich 06/07 ;)

Das Problem ist, dass Multithreaded Anwendung ziemlich schwer zum handhaben sind, wenn das Design nicht passt. Du versuchst zb mit dem Debugger den Fehler zu finden und es funktioniert immer, wenn du aber dann das Prog ausführst kommt der Fehler wieder. Die Entwickler müssen einfach von Anfang an ein wirklich gut überlegtes Design entwickeln.

vielleicht hilft dir das um das Thema Threading besser zu verstehen:
http://rapidshare.de/files/19836880/Java_Threading_1_.v2.pdf.html

Demirug
2006-05-07, 12:55:17
HellHorse[/POST]']Inwiefern unterscheidet sich das von dem was die "dualcore Optimierung" die der NVIDIA Treiber im Moment macht? Ich dachte der macht genau das.

Das Prinzip ist das gleiche nur kann man jetzt viel früher ansetzten und damit wesentlich mehr sparen. Aktuell muss der Hautpthread den Wechsel in den Kernel vornehmen. Bei Vista werden die Wechsel vom zweiten Thread durchgeführt.