Nvidia bremst PhysX auf der CPU aus [Update]
PhysX ist Nvidias API zur Berechnung von Physik in Spielen. Steckt keine Nvidia-GPU im System, kann auch die CPU die Berechnungen übernehmen. Wie es scheint, hält Nvidia die Performance dann aber absichtlich niedrig.
Realworldtech haben in einem Artikel analysiert, was passiert wenn Physikberechnungen in einem PhysX-Spiel nicht auf der GPU sondern auf einer CPU ausgeführt werden. Dabei kam man einem interessanten Phänomen auf die Spur. Es scheint, als würde Nvidia gleich in mehrfacher Hinsicht die Performance absichtlich niedrig halten.
Mit dem Intel VTune Profiling Tool hat man genauere Einblicke in die Abarbeitung des PhysX-Codes bekommen. Dabei zeigten sich zwei Dinge. Zum einen kennt der CPU-Code kein Multi-Threading, während der Nvidia-Treiber bei der Grafikkarte automatisch dafür sorgt, dass Aufgaben in mehrere Threads aufgespalten werden. Allein dadurch ließe sich die Performance also schon anheben.
Mindestens genauso nachteilig wirkt sich aber Nvidias Entscheidung aus, bei Fließkommaberechnungen fast ausschließlich x87-Code zu nutzen und weitgehend auf den Einsatz von SIMD-Befehlen zu verzichten. Die x87-Fließkommaeinheit stammt praktisch den Urzeiten der x86-Entwicklung. Heutzutage bevorzugen viele Programmierer für eine ganze Reihe Berechnungen aber SIMD-Befehle, die viele Aufgaben weitaus schneller und effizienter abarbeiten, da sie einen Vorgang auf mehrere Daten gleichzeitig anwenden können. Es mutet also mehr als merkwürdig an, dass Nvidia hier nicht beispielsweise auf SSE oder sogar SSE2 setzt, denn beide sind heute in allen aktuellen CPUs von AMD und Intel zu finden und könnten die Performance im Schnitt verdoppeln, ohne größeren Programmieraufwand nach sich zu ziehen.
Es drängt sich also der Verdacht auf, man wolle die PhysX-Performance auf der CPU absichtlich niedrig halten, um so ein stärkeres Verkaufsargument für die eigene Hardware zu haben. So lautet dann bei Realworldtech das Fazit auch:
The bottom line is that Nvidia is free to hobble PhysX on the CPU by using single threaded x87 code if they wish. That choice, however, does not benefit developers or consumers though, and casts substantial doubts on the purported performance advantages of running PhysX on a GPU, rather than a CPU.
Update
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.
Die gute Nachricht: Nvidia arbeitet derzeit an Version 3.0 der PhysX-API. Diese soll dann auch SSE-Unterstützung erhalten. Zu Multi-Threading gibt es keine Aussagen, aber darauf sollte man wohl besser nicht hoffen. Aber:
“The 3.0 release will use SSE scalar at the very least, and they may do some vectorization if they can devote the engineering resources to it.”
Die Betrachtung durch Arstechnica Artikel geht noch weit detaillierter auf die Diskussion ein als hier dargestellt werden kann und wird ausdrücklich zur vertiefenden Lektüre empfohlen! Als Vorgeschmack das Fazit:
But still, when you boil it all down, we keep coming back to the point that it's so easy to switch from x87 to SSE, and x87 has been deprecated for so long, and it's so much to NVIDIA's advantage to be able to tout the GPU's superiority over the CPU for physics, that it's very hard to shake the feeling that there's some kind of malicious neglect going on. Think about it: if game developers really don't care that much about PC physics performance, and it's "good enough" with x87 code, why make a small change that might give the CPU an unneeded boost? Why not just let it struggle along at "good enough"?
- G.Skill bringt Speicherkit mit 24 GB DDR3-2000
- Android 2.2 lässt iOS4 in JavaScript alt aussehen
- Mozilla veröffentlicht Beta-Version von Firefox 4
- Durabook TM7: Outdoor-Tablet von Twinhead
- Lautsprecherhersteller Teufel: Neuer Eigentümer
- ATi: Neue FirePro Workstation-Karten am Start
- USB-3.0-Verzögerungen bei AMD?
- Erste Klone vom iPhone 4 in China aufgetaucht
- Notebookcheck: MacBook Pro und Aspire One 521
- SWIFT-Abkommen: EU erlaubt USA das Datensaugen
- Gerüchteküche: Celeron auf der Abschussliste?
- Blizzards Forenuser zu Klarnamen gezwungen
- Neues für Altes: SSD mit PATA von Buffalo
- Patentstreit: Microsoft gegen Apples Seitenblättern
- Youtube: Jetzt noch höhere Auflösung als 1920 HD
- Notebookcheck testet AMD-Satellit und Intel-SSD
- [IFA] Sharp: Quattron-Fernseher mit 3D-TV
- Klage: Wem gehört Facebook?





Das ist Dreist.
Wer hat von so einer Drecksfirma wie Nvidia etwas anderes erwartet? Lügen und Propaganda sprudeln seit Jahren aus deren fanatischen Marketingorganen und derartige Manipulationen wundern mich da nicht.
Wer die Macht hat missbraucht sie.
Würde mich auch wundern wenn man das bei Nvidia anders machen würde, woher sollten sonst diese tollen Verkaufsargumente kommen.
Ich glaube nicht, das Nvidia das so verbockt hat, sondern eher Ageia. Bei den Demos hat man es auch damals schon gesehen, das bei PhysX ueber CPU nur ein CPU-Kern genutzt wurde. Den Code auf Cuda zu schreiben ist sicherlich nicht das DIng gewesen. Die Altlasten des CPU-Modus sind wahrscheinlich unveraendert geblieben. Nur ein paar aktuellere Libarys sind hinzugekommen, um neue Funktionen zu ermoeglichen. Der Kern von PhysX ueber CPU wurde wohl kaum angetastet.
http://www.tomshardware.com/review [...] 65-10.html
Okay, aber Nvidia liegt auch der Quellcode komplett vor. Warum also nicht neu komplilieren, und dabei SSE/SSE2 und Multi-Threading berücksichtigen? Zu viel Aufwand? Für die GPU mussten sie es auch machen...
Aber nicht nur ATI-Karten stehen mit PhysX ohne GPU/ Ageia-Karte schlecht da. Die geforce-Karten liefern dann genauso miese Ergebnisse. Mirrors Edge mit PhysX ueber CPU ist unspielbar...
@ benk: Das liegt wohl nicht in derem Interesse. Was ich auch nachvollziehen kann. Schliesslich ist PhysX ueber GPU so oder so schneller. Zumindest, wenn man nicht 3 Kartengenerationen hinterherhaengt, und die aktuelle Ultra-Mega-SuperCPU sein Eigen nennt.
Vielleicht wird die ganze Sache mit einer neuen PhysX-Version aus der Welt geschaft.
Das glaubst du selber nicht oder?
Einfach NV beukotieren boykottieren und gut is's
Nx da
Meine 280iger und 480iger geb ich nicht mehr her 
ich kann es mir nicht vorstellen das NV die software ändert damit die cpu bessere werte erziehlt! somit wäre es egal welche GRAKA ich mir kaufen würde, es würde genauso gut mit ATI laufen da es nun ein 6kernen ohne zucken bewältigt! also auf jedenfall nicht nachdem sie Ageia aufgekauft haben! wer bezahlt viel geld um die ware dannach zu verschenken????
Ich verstehe die Aufruhr nicht!
NVIDIA hat nach Beschreibungen in diesem Artikel die Physx CPU-performance nicht absichtlich ausgebremst! PhysX wurde lediglich nicht für die CPU optimiert. Weshalb sollten sie dies auch tun? Mich wundert es eher, dass für PhysX überhaupt die möglichkeit existiert von der CPU übernommen zu werden!
Dasd Ganze ist nach meiner Ansicht typisch NVIDIA-schlechtmacherei.
Da hat wohl jemand nicht verstanden worum es in der News geht
@benkraft: Das hat mit compilieren nix zu tun, für eine multi-thread optimierung müsste man grosse Teile des Codes komplett neu schreiben, und da kann ich nvidia verstehen, dass sie das nicht gemacht haben.
Über die SIMD Geschichte bin ich allerdings auch verwundert, denn das sollte der Compiler von sich aus berücksichtigen....
@Shodan - Das mit dem Multi-Threading würde ich sogar gelten lassen, was aber noch das die möglichen SSE/SSE2-Optimierungen übrig ließe.
Heute im Compiler den Schalter für SSE nicht umzulegen ist so, als würde man sagen, etwas funktioniere auch mit der Grafikkarte, nutzte dann aber absichtlich weder DX noch OpenGL (geschweige denn CUDA oder Stream).
Eine künstliche Beschränkung/Beschneidung ist es eben doch, denn Nvidia argumentiert ja, eine CPU sei bei weitem zu langsam, um PhysX brauchbar zu berechnen. Wenn man natürlich die grundlegenden Möglichkeiten nicht nutzt und dadurch das Performance-Potential von vornherein mindestens halbiert, ist das wohl wahr....
@benkraft: Full ACK, das ist ja genau das, was ich mit der SIMD-Geschichte meinte.
@shodan - Sorry, den zweiten Teil deines Posts hab ich voll übersehen. Mein Fehler.
Würde auch nur einer von den Schreihälsen z.B. 10 Euro an Nvidia zahlen, damit sie Physix für CPU Optimieren? Ich denke auch, daß da einfach noch der alte Ageia-Code drin steckt. Wobei jetzt fraglich ist, ob ein Neucompilieren des Treibers ausreicht, oder ob die Spiele auch angefasst werden müssen.
Anyway, die wollen Geld verdienen, und das tun sie über Ihre Grafikkarten, nicht durch das verschenken von Software.
hier schliess ich mich shodan und benkraft an!
Aber hand aufs herz: wer zockt denn mit aktiviertem Physx über CPU? Es ist sicher kein Vornehmes Verhalten von NVIDIA, aber die Regeln der Wirtschaft verlangen dies anscheinend nicht.
Der Grundgedanke von CUDA ist löblich und zukunftsweisend, es ist nur schade, dass NVIDIA mit PhysX sein eigenes Süppchen kocht.
Die Physik-Geschichte steckt noch in den Kinderschuhen und wird diesen so schnell auch nicht herauswachsen.
Fragt sich wie die Softwareentwickler darauf reagieren, gut möglich dass einige PhysX bei sich streichen werden.
Noe, glaube ich nicht.
Mich wundert es eher, dass für PhysX überhaupt die möglichkeit existiert von der CPU übernommen zu werden!
Ohne diese Möglichkeit würden die PhysX Spiele nur auf entsprechend ausgestatteten Computern funktionieren. Es ist ja nicht so das die Entwickler eine zweite Physik Engine in ein Spiel einbauen, stattdessen werden bei deaktivierten PhsyX die Effekte soweit reduziert das sie aussieht wie jede andere Physik Engine und in dem Falle laufen sämtliche Physik Berechnungen über die CPU.
Momentan scheint das ja auch noch ganz gut zu klappen aber mir schwant das es nicht ewig so weiter gehen kann. Spiele mit PhysX sollen ja nicht schlechter wie die anderen aussehen, selbst wenn es deaktiviert ist und genau da ist der Haken.
Während die anderen Entwickler in Zukunft auf Multithreading und/oder OpenCL setzen, wird Nvidia auf dem normalen Niveau bald nicht mehr mithalten können.
Also müssen sie entweder den Code entsprechend anpassen oder es ermöglichen das ich ohne Probleme zu einer ATI Karte eine Nvidia Karte dazu stecken kann um PhysX nutzen zu können.
PhysX ist genauso eine API mit Havoc. Die Hardwarebeschleunigung ist seitens Ageia erst spaeter hinzu gekommen. 3D Mark 06 besitzt noch die alte PhysX-API. Dort geht die PhysX-Berechnung auch einigermaßen schnell von Statten. Ageia wird wohl die Engine angepasst haben, um die Ageia PhysX-Karte entsprechend guenstig zu positionieren. Zudem machte die PhysX-Karte, wenn man nicht gerade einen VIA-Chipset benutze, auch einen deutlichen Unterschied.
Mal abgesehen davon das Nvidia keine optimerung vür die CPUs macht für physx ... kotzt es mich an das PhysX deaktivert wird wenn der Treiber irgendwas mit Ati-Treibern findet ... d.h. man hat sich ne Nvidiakarte als reine PhysX-Karte gekauft und der Treiber schaltet auf Stur ... nicht weil es nicht geht ..sondern weils einfach Nvidia nicht will .. und so ists mit der CPU optimierung ... Tja ..ich kauf mir kein Winterpacket von Nvidia damit mein Rechner nicht friert
Es ist ja nicht so das die Entwickler eine zweite Physik Engine in ein Spiel einbauen, stattdessen werden bei deaktivierten PhsyX die Effekte soweit reduziert das sie aussieht wie jede andere Physik Engine und in dem Falle laufen sämtliche Physik Berechnungen über die CPU.
Du meinst bei deaktiviertem PhysX laufen sämtliche noch anfallenden Physik-Berechnungen unoptimiert über die CPU?
Das kann ich mir nicht vorstellen, woher hast du das?
Die PhysX-API kann sicherlich mit zwei Methoden eingewoben werden. Einmal kann man fuer generelle Physik Effekte die bereits in die Engine integrierten APIs benutzen. (Das kann auch PhysX sein) Ragdollanimationen etc koennten darueber spielend per CPU abgewickelt werden. Will man jedoch zusaetzliche Effekte wie Stoffe, Partikel etc verzichtet man normalerweise darauf, wenn es die Grenzen der CPU sprengt. Hat man nun die Moeglichkeit, PhysX zusaetzlich zu der in der Engine integrierten Physik-API zu benutzen, lassen sich darueber zustaezliche/ erweiterte Effekte realisieren, die vorher nur mit Schwierigkeiten realisierbar sind. Viele CPU-Physik-Engines drosseln z.B. ihre interne Framerate auf 15 - 25 FPS, wenn moeglich. Das ist mit PhysX und HW-Beschleunigung nicht mehr notwendig. Wenn man die erweiterten Physic-Effekte aktiviert, ist es das Bier des Users, ob er CPU oder HW-Beschleunigung nutzt. Dafuer wird er entweder mit unspielbaren Framerates belohnt, oder er hat mehr Effekte auf dem Schirm. Bei UT3 rennt eher das Spiel deutlich schneller.
Ich habe meinen Kopf benutzt ;-) ist nur grobe Theorie aber durchweg logisch und es gibt zwei Dinge die mich in meiner Vermutung bestätigen.
Einmal das die PhysX Spiele ohne die dazugehörige Software nicht starten (mir ist zumindest bisher keines untergekommen) und zum anderen haben die Spiele danach doch immer noch Effekte die sich an den Regeln der Physik orientieren. Nehmen wir mal als Bespiel Sacred 2, wenn ich dort einen Gegner auf abschüssigen Gelände töte, dann wird der Kadaver dort runterpurzeln, egal ob ich PhysX aktiv habe oder auch nicht.
Solche Sachen lassen sich höchstens bei extrem linearen Spielen scripten aber ansonsten ist man auf eine Physik Engine angewiesen die diese Aufgabe übernimmt und worüber soll sie sonst laufen wenn nicht über die CPU.
Edit:
Wenn ich das von fffcmad lese scheine ich damit auch gar nicht mal so falsch zu liegen.
UT3 startet ohne PhysX-Treiber. Die Libarys hat das Spiel schon dabei. Normalerweise sollte jedes Spiel, was nicht 100% vom SPielprinzip her auf PhysX basiert, ohne den Treiber laufen.