KILLTHIS
Software-Overclocker(in)
Drosselt Nvidia absichtlich die PhysX-Performance für CPUs?
Wie auf Real World Technologies hervorgeht, ist die Performance von PhysX auf CPUs schlechter als auf GPUs - an für sich nichts neues. Aber man will nun eine Ursache gefunden haben.
Per V-Tune, ein Entwickler-Programm von Intel, soll man zur Erkenntnis gekommen sein, dass PhysX bei Einsatz per CPU auf veraltete x87-Befehle zurückgreift, ohne dabei SSE zu verwenden - Sowohl Intel (seit 2000) als auch AMD (seit 2003) raten schon seit mehreren Jahren von dieser veralteten Technik ab. Es sei an dieser Stelle gesagt, dass AMD seit längerem zu SSE und SSE2-Befehle rät, welche den x87-Befehlssatz vollständig abgelöst haben, welche zudem eine wesentlich bessere Performance bieten.
So heißt es im Text beispielsweise:
Man spricht gar davon, dass man die PhsyX-Performance in der Theorie vervierfachen könnte, wenngleich man eher von verdoppelung ausgeht, würde man SSE statt x87 verwenden:
Desweiteren bezieht man sich auf das Spiel Cryostasis, welches (sofern ich es richtig gelesen habe), keinerlei SSE-Befehle verwendet, dafür aber jede Menge x87-Befehle. Im Marketing seitens Nvidia heißt es diesbezüglich:
Auf dem Papier erst mal sehr impressiv; doch bedenkt man, dass die CPU theoretisch eine bessere Performance liefern könnte, wäre dieser Vergleich wesentlich geringer - und die verwendung einer Nvidia-GPU mit PhsyX erschiene nun nicht mehr so attraktiv.
Zu guter letzt spricht man davon, dass die CPUs im Falle einer Mehrkernoptimierung plus der Verwendung von SSE-Befehlen der GPU wesentlich ebenbürtiger wären, da PhysX standardmäßig nur single-threaded ist, was sich beispielsweise in Sacred II bemerkbar macht, wo lediglich ein Kern für die Physik-Berechnung verwendet wird.
Es ist gewiss nicht verwunderlich, dass PhsyX nur auf Nvidia-Grafikkarten laufen soll, doch die Implementation von SSE-Befehlen sei darüber hinaus nich sonderlich kostspielig und es sei wesentlich einfacher diese zu verwenden, anstelle der veralteten x87-Befehle.
Quelle: Real World Technologies - PhysX87: Software Deficiency
Anmerkung des Autors:
Da Nvidia die Hand auf PhysX hat liegt es sicherlich im eigenen Ermessen den Code für GPUs zu verbessern, doch scheint dies schon kurios, bedenkt man doch zum einen das Marketing für GPU-Beschleunigte Physik-Berechnung, wo eine performantere Berechnung per CPU sicherlich Kanonenkugeln vor dem Bug der Nvidia-Flotte bedeuten würde; Nachlässigkeit hingegen wäre auch kein positives Zeichen. Soweit ich informiert bin, steht ein Statement seitens Nvidia noch aus. Schwer zu sagen, ob dies tatsächlich alles so stimmt, aber wenn dem so ist - nun ja, das wäre schon echt eine Schande. (Wenngleich es mich in der freien Marktwirtschaft nicht wundert.)
Zu guter Letzt möchte ich hier anmerken, dass dies kein Hetz-Thread gegen Nvidia ist, sondern mehr eine sehr interessante Sache, welche durchaus Hand und Fuß haben kann.
Nachtrag: Hier noch etwas von unserem News-Gott Explosiv, was ich mal aufgenommen habe, da es doch sehr lesenswert ist:
Quelle: TomsHardware
Quelle: ATi-Forum
Danke an dieser Stelle an Explosiv.
Wie auf Real World Technologies hervorgeht, ist die Performance von PhysX auf CPUs schlechter als auf GPUs - an für sich nichts neues. Aber man will nun eine Ursache gefunden haben.
Per V-Tune, ein Entwickler-Programm von Intel, soll man zur Erkenntnis gekommen sein, dass PhysX bei Einsatz per CPU auf veraltete x87-Befehle zurückgreift, ohne dabei SSE zu verwenden - Sowohl Intel (seit 2000) als auch AMD (seit 2003) raten schon seit mehreren Jahren von dieser veralteten Technik ab. Es sei an dieser Stelle gesagt, dass AMD seit längerem zu SSE und SSE2-Befehle rät, welche den x87-Befehlssatz vollständig abgelöst haben, welche zudem eine wesentlich bessere Performance bieten.
So heißt es im Text beispielsweise:
Using x87 definitely makes the GPU look better, since the CPU will perform worse than if the code were properly generated to use packed SSE instructions.
Man spricht gar davon, dass man die PhsyX-Performance in der Theorie vervierfachen könnte, wenngleich man eher von verdoppelung ausgeht, würde man SSE statt x87 verwenden:
Realistically, Nvidia could use packed, single precision SSE for PhysX, if they wanted to take advantage of the CPU. Each instruction would execute up to 4 SIMD operations per cycle, rather than just one scalar operation. In theory, this could quadruple the performance of PhysX on a CPU, but the reality is that the gains are probably in the neighborhood of 2X on the current Nehalem and Westmere generation of CPUs. That is still a hefty boost and could easily move some games from the unplayable <24 FPS zone to >30 FPS territory when using CPU based PhysX.
Desweiteren bezieht man sich auf das Spiel Cryostasis, welches (sofern ich es richtig gelesen habe), keinerlei SSE-Befehle verwendet, dafür aber jede Menge x87-Befehle. Im Marketing seitens Nvidia heißt es diesbezüglich:
[In Cryostasis], with fine grained simulation of water, icicle destruction, and particle effects, the CPU shows itself as woefully inadequate for delivering playable framerates. GPUs that lack PhysX support become bottlenecked as a result, delivering the same level of performance irrespective of the hardware's graphics capability. GeForce GPUs with hardware physics support show a 2-4x performance gain, delivering great scalability across the GPU lineup.
Auf dem Papier erst mal sehr impressiv; doch bedenkt man, dass die CPU theoretisch eine bessere Performance liefern könnte, wäre dieser Vergleich wesentlich geringer - und die verwendung einer Nvidia-GPU mit PhsyX erschiene nun nicht mehr so attraktiv.
Zu guter letzt spricht man davon, dass die CPUs im Falle einer Mehrkernoptimierung plus der Verwendung von SSE-Befehlen der GPU wesentlich ebenbürtiger wären, da PhysX standardmäßig nur single-threaded ist, was sich beispielsweise in Sacred II bemerkbar macht, wo lediglich ein Kern für die Physik-Berechnung verwendet wird.
Not only would this physics solver comparison reveal the differences due to x87 vs. vectorized SSE, it would also show the impact of multi-threading. A review at the Tech Report already demonstrated that in some cases (e.g. Sacred II), PhysX will only use one of several available cores in a multi-core processor. Nvidia has clarified that CPU PhysX is by default single threaded and multi-threading is left to the developer. Nvidia has demonstrated that PhysX can be multi-threaded using CUDA on top of their GPUs. Clearly, with the proper coding and infrastructure, PhysX could take advantage of several cores in a modern CPU. For example, Westmere sports 6 cores, and using two cores for physics could easily yield a 2X performance gain. Combined with the benefits of vectorized SSE over x87, it is easy to see how a proper multi-core implementation using 2-3 cores could match the gains of PhysX on a GPU.
Es ist gewiss nicht verwunderlich, dass PhsyX nur auf Nvidia-Grafikkarten laufen soll, doch die Implementation von SSE-Befehlen sei darüber hinaus nich sonderlich kostspielig und es sei wesentlich einfacher diese zu verwenden, anstelle der veralteten x87-Befehle.
While as a buyer it may be frustrating to see PhysX hobbled on the CPU, it should not be surprising. Nvidia has no obligation to optimize for their competitor’s products. PhysX does not run on top of AMD GPUs, and nobody reasonably expects that it will. Not only because of the extra development and support costs, but also AMD would never want to give Nvidia early developer versions of their products. Nvidia wants PhysX to be an exclusive, and it will likely stay that way. In the case of PhysX on the CPU, there are no significant extra costs (and frankly supporting SSE is easier than x87 anyway). For Nvidia, decreasing the baseline CPU performance by using x87 instructions and a single thread makes GPUs look better. This tactic calls into question the CPU vs. GPU comparisons made using PhysX; but the name of the game at Nvidia is making the GPU look good, and PhysX certainly fits the bill in the current incarnation.
Quelle: Real World Technologies - PhysX87: Software Deficiency
Anmerkung des Autors:
Da Nvidia die Hand auf PhysX hat liegt es sicherlich im eigenen Ermessen den Code für GPUs zu verbessern, doch scheint dies schon kurios, bedenkt man doch zum einen das Marketing für GPU-Beschleunigte Physik-Berechnung, wo eine performantere Berechnung per CPU sicherlich Kanonenkugeln vor dem Bug der Nvidia-Flotte bedeuten würde; Nachlässigkeit hingegen wäre auch kein positives Zeichen. Soweit ich informiert bin, steht ein Statement seitens Nvidia noch aus. Schwer zu sagen, ob dies tatsächlich alles so stimmt, aber wenn dem so ist - nun ja, das wäre schon echt eine Schande. (Wenngleich es mich in der freien Marktwirtschaft nicht wundert.)
Zu guter Letzt möchte ich hier anmerken, dass dies kein Hetz-Thread gegen Nvidia ist, sondern mehr eine sehr interessante Sache, welche durchaus Hand und Fuß haben kann.
Nachtrag: Hier noch etwas von unserem News-Gott Explosiv, was ich mal aufgenommen habe, da es doch sehr lesenswert ist:
Zitat von Toms Hardware
Arstechnicahaben Nvidia direkt auf die fragliche Programmierentscheidungen angesprochen. Wie hier und auch anderweitig spekuliert stammt der Code noch direkt von Ageia und sei seitdem nur weiterentwickelt aber eben nie wirklich neu kompiliert worden. Nvidia fühlt sich offenbar nicht wenig auf den Schlips getreten und betont, man fühle sich nicht allein verantwortlich für die geringe Performance, denn die Spieleentwickler würden ebenfalls nur auf x87 hin kompilieren lassen.
Die Begründung klingt allerdings merkwürdig: Viele Spiele seien Portierungen von Konsolen, die dann auf den PC übernommen werden. Der Schwerpunkt vieler Entwickler liege auf der Konsole, die im Allgemeinen mehr Aufwand erfordere. "The game content runs better on a PC than it does on a console, and that has been good enough" erklärt Mike Skolones, der Produktmanager für PhysX. Die Spieleentwickler sähen also schlicht keine Notwendigkeit, einen moderneren Code zu generieren, da der PC ohnehin schon schneller als die Konsole sei und PhysX-Spiele daher „ausreichend schnell“ liefen. Das erklärt immer noch nicht, warum beim Neukompilieren, was beim Portieren ohnehin anfällt, nicht eben frischerer Code generiert wird. Der Aufwand für SIMD wäre minimal.
Doch warum bei PhysX selbst x87-Code beibehalten, wenn man mit einem Compilerflag performanteren Code bekommen könnte? Eine weitere interessante Antwort: Der „uralte“ Ageia-Code sei an vielen Stellen so schlecht und enthalte noch so viele andere Flaschenhälse und Baustellen, dass die SSE-Optimierung kaum ins Gewicht gefallen wäre. Das darf nun jeder Leser selbst bewerten.
Quelle: TomsHardware
Zitat von ATi-Forum
Man könnte nun annehmen, dass der x87-Befehlssatz bewusst eingesetzt wird, da dieser eine doppelte Genauigkeit bietet. Das wäre aber auch nur der Fall, wenn auch PhysX mit doppelter Genauigkeit auf einer Nvidia-GPU laufen würde. Auch ein Argument, dass man so noch alte CPUs ohne SSE bzw. SSE2 unterstützen könne, wäre wenig glaubhaft, denn weches Spiel läuft schon mit eingeschaltetem PhysX, auf einer so alten CPU?
Alles in allem sieht es so aus, als verfolge Nvidia anscheinend das Ziel, PhysX auf CPUs, bewusst langsamer laufen zu lassen. Denn sicher scheint, dass aktuelle Desktop-Prozessoren mit modernen Techniken, PhysX mindestens genau so schnell berechnen könnten, wie Nvidias GPUs. Sollte dies zutreffen, wäre dies für den Endkunden sicher ärgerlich, denn bei Spielen mit TWIMTBP-Siegel würde das zugleich auch immer bedeuten, dass man als Kunde benachteiligt ist, wenn man keine Nvidia-GPU in seinem PC zum rechnen nutzt. Auch ist es nichts Neues, dass Nvidia PhysX auf der GPU deaktiviert wird, wenn eine zweite Grafikkarte aus dem Hause AMD im gleichen System erkannt wird.
Quelle: ATi-Forum
Danke an dieser Stelle an Explosiv.
Zuletzt bearbeitet:



.
Sollen sie halt ehrlich sein und sagen, dass sie sich mit dieser Methode einen Vorteil verschaffen wollen, jetzt ist es doch sowieso draußen.

