Drosselt Nvidia absichtlich die PhysX-Performance für CPUs?

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:

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:
AW: Drosselt Nvidia absichtlich die PhysX-Performance für CPUs?

Ein offenes Geheimnis.
Das Thema steht schon ein ganze weile Raum.

Ist sicherlich einiges dran. Deswegen hoffe ich mal das der offene Standard von AMD, der bekanntlich bald kommt, von den Entwicklern gut angenommen wird und diese Spielchen von Nvidia unterbinden.


Wäre für uns alle gut ;)
 
AW: Drosselt Nvidia absichtlich die PhysX-Performance für CPUs?

Richtig, und vorallem für uns Radeon Nutzer.:lol:

Allerdings hoffe ich auch auf ein gutes gelingen von AMDs Physik.
 
AW: Drosselt Nvidia absichtlich die PhysX-Performance für CPUs?

[Real World Technologies]

Es gibt eine sowohl den Fakt, daß kein SSE verwendet werde, bestätigende Erklärung seitens nvidia als auch eine nähere Erläuterung der Umstände aus nvidias Sicht -- und nicht zuletzt die Ankündigung, daß im nächsten PhysX-SDK SSE, mindestens also skalar via Kompileroption, verwendet werden wird.

Des Weiteren ist sicher im Auge zu behalten, daß der zu erwartende reine Kompilergewinn durch Aktivierung des Streaming SIMD Extensions-Befehlssatzes nur um 20% bis vielleicht auch einmal 30%, aber im Extremfall auch sogar negativ gegenüber x86 liegen kann.

Erst wenn man -- und das sagt auch der Autor des Real World Technologies-Artikels irgendwo in den s|a-Foren -- die aufwändigere vektorbasierte Programmierung einsetzt, können CPUs die angedeuteten Leistungssteigerungen umsetzen -- maximal also 2-4x, auf die Schnelle via Kompiler aber nur um 20%, jedenfalls sofern nicht zusätzlich Dinge Wie Multi-Threaded-Programmierung dazu kommen. Edit: Gefunden, da ist's:
>>
David Kanter July 7, 2010, 5:25 p.m.
Frank: To use vectorized SSE may take some work. Although Intel's auto-parallelizing compiler is pretty good. HOwever it takes 0 work to use scalar SSE, which is still an improvement over the blight that is x87.
Thanks to everyone for the kind comments! <<
http://www.semiaccurate.com/2010/07/07/nvidia-purposefully-hobbles-physx-cpu/#comments

IIRC hat das übrigens auch Gamestar im Artikel-Update gestern beleuchtet:
http://www.gamestar.de/hardware/news/software/2316188/nvidia_physx.html

cu
Thomas

PS -- Persönliches Wort zu:
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.
Aber verdient hätten sie es!!! :D
 
Zuletzt bearbeitet:
AW: Drosselt Nvidia absichtlich die PhysX-Performance für CPUs?

Hier mal zwei schöne Auszüge, was die Jungs von Toms Hardware und ATi-Forum davon halten:

Toms Hardware schrieb:
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

ATi-Forum schrieb:
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

Ich habe mich durch verschiedenste Seiten gelesen und der Artikel bei arstechnica trifft es mitunter am besten. Als Endkunde ist man so oder so der angearschte und Spiele mit TWIMTBP-Siegel stellen momentan eine Benachteiligung aller User ohne NV-Karte dar :daumen2:.
Ich hoffe Bullet kommt und wird auch ein Erfolg, dieses proprietäre PhysX-Gedöhns ist nicht mehr schön.

MfG,
Explosiv
 
AW: Drosselt Nvidia absichtlich die PhysX-Performance für CPUs?

Ich habe irgendwo gelesen, dass Nvidia schon bestätigt hat, diese alten Befehle zu verwenden. Der angebliche Grund war wohl (soweit ich das richtig verstanden habe!) Abwärtskompatibilität mit älterer Hardware. ^^ Welcher PC mit mehr als 7 Jahre altem Prozessor aber PhysX darstellen kann, frage ich mich. Das ist ein vorgeschobener Grund. Morgen kommt Nvidia und sagt, man will PhysX auch auf PCs mit Pentium II mit 300 MHz ermöglichen :lol: :ugly: Sollen sie halt ehrlich sein und sagen, dass sie sich mit dieser Methode einen Vorteil verschaffen wollen, jetzt ist es doch sowieso draußen.
 
AW: Drosselt Nvidia absichtlich die PhysX-Performance für CPUs?

Ah, ich danke für die zusätzliche Informationen, Explosiv. Ja, auch ich hoffe, dass die Bullet-Physik bald herauskommt und endlich das bietet, was so dringend verlangt wird. Andernfalls wird die Physikberechnung nicht nur aufgehalten, nein, sie wird auch auf ziemlich besch...eidene Art und Weise entwickelt, welche genau genommen nur ein Krüppel ist. Hier kann ich auch wieder gut verstehen, weshalb einige User die Havok-Engine bevorzugen - und ich muss sagen, sie wird mir auch prompt um einiges sympathischer. Ich habe es mal in den Startpost aufgenommen, um das Ganze direkt etwas zu bündeln.
 
AW: Drosselt Nvidia absichtlich die PhysX-Performance für CPUs?

Hier ist die Reaktion von Nvidia
Nvidia hat gegenüber Thinq.co.uk Stellung genommen und die Vorwürfe als »fehlerhaft« bezeichnet.
...
Ab der geplanten Version PhysX 3.0 enthalten die Entwickler-Werkzeuge Funktionen für automatisches Multithreading. Auch SSE wird dann standardmäßig unterstützt. Laut Nvidia sind einige Spiele-Entwickler aber gegen die Nutzung von SSE, um auch weiterhin ältere CPUs unterstützen zu können. Warum diese Entwickler ihre Software unbedingt für 10 Jahre alte Prozessoren schreiben wollen, sei aber deren Sache, so Del Rizzo.
...
Nvidia habe Prozessoren nicht absichtlich verlangsamt, müsse sich aber an den Anforderungen der Entwickler orientieren.
Hehe, PhysX auf PCs mit 10 Jahre alten CPUs. :P
 
AW: Drosselt Nvidia absichtlich die PhysX-Performance für CPUs?

Ist ja ein interessanter Artikel

Wenn die Physiks berechnung sooo ganz zufällig ein bisschen langsamer ist dann verkauft sich eine zweite Nvidia Karte doch viel besser als wenn man den Code so optimieren würde das es auf einer mittelmäßigen Karte locker geht gel

lg
 
AW: Drosselt Nvidia absichtlich die PhysX-Performance für CPUs?

Na klar, ich lasse PhysX auf einen K6-3 oder Pentium III laufen :ugly:. Der x87 Code ist dermaßen veraltet, dass AMD schon seid 2003 diesen Befehlssatz mit SSE bzw. SSE2 ersetzt hat, Intel sogar noch früher.

MfG,
Explosiv
 
AW: Drosselt Nvidia absichtlich die PhysX-Performance für CPUs?

Hier ist die Reaktion von Nvidia
Hehe, PhysX auf PCs mit 10 Jahre alten CPUs. :P

Ich finde, man sollte das alles ganz anders betonen -- und es wundert mich, daß es noch keinen PCGH-Artikel gibt:

nvidia führt mit der PhysX-API 3.0 Multithreading und Streaming SIMD Extensions für die CPU-Plattform ein.

Man muss das ja auch mal positiv betrachten können. :D

cu
Thomas
 
Zuletzt bearbeitet:
AW: Drosselt Nvidia absichtlich die PhysX-Performance für CPUs?

hehe, aus der sichtweise heraus haben es also konkurrenzprodukte garnichmal so schwer oder? ^^ brauchen ja "nur" knapp 10 jahre alten code zu übertrumpfen. also selbst wenn ati jahrelang geschlafen hatte und sich da nich grad mit loorbeeren bekleckert hat (vllt empfanden sies auch nen stückweit als sinnlos), so scheint mit solchen meldungen der "vorsprung" ja geradezu zu schmelzen, wie nen stück butter auf nem trippel-480er-sli gespann draussen in der sonne beim furmarken :P ok, das war übertrieben :P

edit: ui, urplötzlich kommt v3.0 mit all diesen tollen sachen. man will ja nix sagen, aber wäre das vor 3 jahren scho rausgekommen, wären wir wohl mittlerweile bei v5 oder weis der geier *g*
 
AW: Drosselt Nvidia absichtlich die PhysX-Performance für CPUs?

Man muss das ja auch mal positiv betrachten können.
Okay, immer positiv denken. :D
Nvidias Marketingabteilung kennt ja auch den Spruch "Auch negative Publicity ist gute Publicity." Jetzt kann sich Nvidia über jede Menge Publicity freuen. :daumen:
 
AW: Drosselt Nvidia absichtlich die PhysX-Performance für CPUs?

Ich finde, man sollte das alles ganz anders betonen -- und es wundert mich, daß es noch keinen PCGH-Artikel gibt:

nvidia führt mit dem PhysX SDK 3.0 Multithreading und Streaming SIMD Extensions für die CPU-Plattform ein.

Man muss das ja auch mal positiv betrachten können. :D

cu
Thomas

:lol::lol::lol:

ja da hast du recht. endlich gehts voran. wobei ich multithreading noch nciht glaube, da dann wirklcih einfach nur n 4 oder 6-kerner ordentlich zum spielen zu gebracuhen wäre und nvidia davon ja mal rein gar nichts hat.
 
AW: Drosselt Nvidia absichtlich die PhysX-Performance für CPUs?

Langsam fange ich an Nvidia richtig zu hassen. Die Luegen wie gedruckt und sind frech und unverschaemt und sind extrem arrogant. Und dann benachteiligen sie jetzt auch noch CPUs bei Physx.
 
AW: Drosselt Nvidia absichtlich die PhysX-Performance für CPUs?

Mhh, das hieße ja, dass die MafiaII -Anforderungen eigentlich garnicht so hoch sind, und man sich bei einem 6-Kerner die Physixkarte sparen könnte.
 
AW: Drosselt Nvidia absichtlich die PhysX-Performance für CPUs?

AMD hat doch jetzt Manju Hegde, den Mitbegründer von Ageia.
Ageia-Mitbegründer verlässt Nvidia in Richtung AMD - nvidia, physx

Ihr könnt ihn ja mal fragen warum Ageia damals mit x87 Code begonnen und nicht sofort, anderen, moderen Code benutzt hat.

Schließlich hat Ageia damit 6 Jahre lang sein Geschäft berieben, bis sie vor 2 jahren gekauft wurden.

Klar Nvidia ist jetzt natürlich dafür verantwortlich, sofort Ageia's Code auf CPUs zu optimieren. :ugly:

Wobei ...
Das hätten sie wohl, wenn AMD oder Intel ne x86 Lizens anbieten würde.
Aber ne das wäre jaaaa doof, dann gäbs ja eventuell einen echten dritten CPU Hersteller im Markt.

Das Leben ist kein Ponyhof.
 
AW: Drosselt Nvidia absichtlich die PhysX-Performance für CPUs?

Wobei ...
Das hätten sie wohl, wenn AMD oder Intel ne x86 Lizens anbieten würde.
Aber ne das wäre jaaaa doof, dann gäbs ja eventuell einen echten dritten CPU Hersteller im Markt.
Wieso sollten sie? Wie oft hat Huang den widerlegt, CPUs entwickeln zu wollen?

Außerdem: Nvidia als CPU-Hersteller - beim besten Willen, das ist Größenwahnsinn.:ugly::schief:
 
Zurück