Nvidia PhysX - CPU-Benachteiligung belegt? (Update2)

PhysX ist auf Nvidias Geforce-Grafikkarten deutlich schneller als auf Prozessoren. Eine neue Analyse zieht den Schluss, dass dies auch am Programmcode für die CPU-Version liegt.

Real World Technologies hat einen Artikel veröffentlicht, der sich mit der CPU-Version von Nvidias-PhysX beschäftigt. Die Cryostasis Tech-Demo und die Dark Basic PhysX Soft-Body-Demo dienten als Grundlage für eine Analyse durch Intel VTune, ein professionelles Tool für Software-Entwickler. Die Daten des Tools enthalten Informationen über die laufenden Prozesse, deren Threads, Laufzeit, Befehlszyklen und Befehlsarten. Programmierer können so Flaschenhälse bei der Ausführung erkennen.

Bei beiden Demos beansprucht jeweils ein Thread mit 79,2% und 73,9% die meiste Leistung. In diesen Threads ist die PhysXCore.dll für 99,8% und 99,4% der verarbeiteten Befehle verantwortlich. Laut Autor David Kanter nutzt die PhysXCore.dll sogenannte x87-Befehle für Gleitkomma-Berechnungen, obwohl Intel seit dem Jahr 2000 und AMD seit 2003 von der Verwendung abraten.

Die seit damals vorhandenen SSE-Funktionen oder die seit 2005 durch jeden neuen Prozessor unterstützten SSE2-Befehle ignoriert PhysX komplett, obwohl diese deutlich schneller verarbeitet werden und auch beim Speicherzugriff Vorteile bieten. Die doppelte Genauigkeit von x87 kann laut Kanter kein Grund dafür sein, da PhysX auch auf der G80-GPU von Nvidia funktioniert, die doppelte Genauigkeit nicht unterstützt. Auch alter Programmcode scheidet als Ursache aus, da Nvidia den Quellcode jederzeit ändern und kompilieren kann. Da PhysX erst im Jahr 2006 erschien und 2008 von Nvidia übernommen wurde, dürfte auch die Kompatibilität zu Prozessoren aus dem Jahr 2005 oder älter kein Argument für x87 sein. Solche in heutigen Spiele-PCs faktisch ausgestorbenen Prozessoren könnten notfalls durch eine eigene Version unterstützt werden, so Kanter, statt alle modernen CPUs durch alten Code zu verlangsamen.

Während PhysX bei PCs bei der CPU-Berechnung auf die schnelleren SSE-Befehle verzichtet, werden die ähnlichen AltiVec-Erweiterungen für PowerPC-Prozessoren auf Konsolen hingegen unterstützt. Daraus zieht der Artikel den Schluss, dass PhysX die x87-Befehle nicht aus technischen Gründen verwendet. Die Leistung von PhysX auf Nvidia-GPUs wirkt aber durch den Einsatz von x87 im Vergleich zu Prozessoren beeindruckender, obwohl moderne CPUs bei moderner Programmierung schon mit 2-3 Kernen nach Ansicht von David Kanter die gleiche Leistung bieten könnten.

Diese Analyse dürfte für einigen Gesprächsstoff und Reaktionen sorgen. Auch AMD hatte Nvidia ähnliches vorgeworfen, was durch Nvidia aber umgehend dementiert worden war.

Update 09.07.2010

Wie erwartet sorgt die Meldung auf allen Webseiten, die darüber berichten, für heftige Diskussionen in den Kommentaren.

Zwei Lager sind klar zu erkennen. Eine Seite sieht keinerlei Verpflichtung für Nvidia, den von AGEIA übernommenen Code zu verändern, da Nvidia Grafikchips und keine CPUs herstellt. Die Gegenseite hält es für merkwürdig, dass Nvidia trotz immer neuer Versionen der PhysX-Software SSE nicht unterstützt, obwohl moderne Compiler diese Funktionen als Standard voraussetzen. Man müsse SSE sogar bewusst deaktivieren, um es nicht zu nutzen.

In einem kurzen Kommentar zu dem Bericht auf SemiAccurate stimmt David Kanter, der Autor der PhysX-Analyse zwar zu, dass bestimmte CPU-Optimierungen nur durch zusätzlichen Aufwand zu erzielen seien, doch grundlegende SSE-Funktionen könnten mit »0 Arbeit« verwendet werden und wären immer noch schneller als x87. Zudem würden Intel-Compiler auch andere Optimierungen automatisch recht gut umsetzen.

Update 16:10 Uhr

Nvidia hat gegenüber Thinq.co.uk Stellung genommen und die Vorwürfe als »fehlerhaft« bezeichnet. So würden 3DMark Vantage oder FluidMark belegen, dass PhysX auch auf Prozessoren durch mehr Kerne mehr Leistung bieten kann.

Der aktuelle PhysX-Programmcode stamme aber aus einer Zeit, als CPUs mit mehreren Kernen eine Seltenheit waren, so der Senior PR-Manager Bryan Del Rizzo. Daher sei Multi-Threading nicht automatisch enthalten, aber einfach einzubauen.

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. In aktuelle und ausgelieferte Versionen dürfe man keine neuen Voraussetzungen wie SSE einführen, um die Kompatibilität zu gewährleisten. SSE sei ohnehin nicht immer schneller, es gäbe durchaus Fälle, bei denen der Verzicht auf SSE mehr Leistung bedeutet. Langfristig führe aber auch für PhysX kein Weg an SSE vorbei.

» PhysX-Spiele im Überblick

zu den Kommentaren (118)

Kommentare(117)
Kommentar-Regeln von GameStar
Bitte lies unsere Kommentar-Regeln, bevor Du einen Kommentar verfasst.

Nur angemeldete Benutzer können kommentieren und bewerten.