Unyu schrieb:
[…]
Verbreite bitte keine Unwahrheiten. CPU PhysX ist multi-threaded.
Richtig, auf der
GPU – und da auch
nur, wenn es sich um eine mit CUDA-Funktion handelt.
Für alles Andere hätte nicht nur ich gerne mal ein paar oder wenigstens
eine Stichhaltige Quelle!
Wie
eLeSde schon richtigerweise schrieb, läuft PhysX ‒ meines Wissens nach – seit Jahren lediglich nur noch single-threaded, sofern auf CPU ausgeführt.
Erklärungsversuche …
Grundsätzlich wäre und ist PhysX rein theoretisch fähig, selbst auf der CPU als PPU Multi-Threading zu nutzen.
Jedoch wird den Entwicklern der schwarze Peter zugeschoben, weil nVdia sich die Hände in Unschuld waschend es standardmäßig deaktiviert und es etwas diffizil gestaltet wurde, jenes programmiertechnisch trotzdem multi-threaded laufen zu lassen – um es mal charmant zu umschreiben.
Was darin resultiert, das es bisher
nicht seitens etwaiger Spiele-Entwickler jemals in einem Titel Mehrkern-CPUs dementsprechend nutzte.
nVidia hat offensichtlich reges Interesse daran, PhysX – wenn
nicht auf einer CUDA-fähigen PPU laufend – im schlechten Licht dastehen zu lassen und versucht
alles nur erdenkliche, um es zu benachteiligen.
Von x87 zu 3D Now! …
Angefangen bei der
expliziten Nutzung des x87-Befehlssatzes …
x87 ist eine Untermenge des x86-Befehlssatzes für Gleitkommaberechnungen und wurde erstmals
1980 mit dem 8087-Koprozessor für den 8086 (Null-Sechsundachtziger) eingeführt.
Mit der Zeit verbessert und effizienter gestaltet wanderte es schnell in die eigentliche CPU.
Die im 386'er integrierte FPU beispielsweise konnte die selben Berechnungen fast 20× so schnell wie die ursprüngliche Implementierung berechnen, ein 486'er bereits 56×.
Immer wieder erweitert und unter dem neuem Namen
MMX schaffte es der erste Pentium die Leistung
um den Faktor 5400× zu toppen.
AMD konterte abermals und hob mit
3D Now! eine wesentlich effizientere Variante aus der Taufe, die sagenhafte
58000× so schnell wie die erste FPU-Revision war.
SSE: Oder AVX, AltiVec & Konsorten …
Mit dem Pentium III wurde um
1999 erstmals
SSE eingeführt, welches wiederum eine
starke Verbesserung und Erweiterung beinhaltete, womit x87 praktisch in SSE aufging.
x87 ist demzufolge seit
geraumer Zeit seitens Intel und AMD
zugunsten von SSE aufgegeben worden.
Jeder jemals erschienene Mainstream/Consumer-Prozessor seit spätestens
2005 hat
grundsätzlich SSE.
x87 in Form des ausgesprochen verbesserten 3D Now! etwa, wird seit dem
2003 erschienenen
K8 gar nicht mehr seitens AMD integriert.
Intel hat sich mit dem Pentium IV mit Einführung von SSE2 gänzlich von x87 verabschiedet.
VIA unterstützt seit '05 mit dem C7 nur noch
mindestens SSE2, während der x86-64-Befehlssatz grundlegend nur noch wenigstens SSE2 unterstützt.
Die 64-bit Version von Windows verbietet zudem seit jeher
explizit die Nutzung von x87 statt SSE2 im Kernelmode.
Ohne Not, Ageia … Oder: NovodeX
Bedenkt man, daß x87 nur einen elementaren
Bruchteil der Leistungsfähigkeit bietet, die mit SSE zu erreichen wäre …
Ageia's PhysX wurde seinerzeit 2004 von der
Eidgenössischen Technischen Hochschule Zürich als
NovodeX entwickelt und von
Ageia auch lediglich aufgekauft und auf den Markt gebracht
Mit dem neuen Eigner wurde seitens Ageia auf x87 gewechselt, obwohl bereits
vor Markteinführung von PhysX 2006 flächendeckend SSE und/oder SSE² verfügbar war.
Zieht man zudem in die Tatsache in Betracht, daß nach SSE² mit SSE³ und in der neuesten Reinkarnation Namens SSE4a+SSE4.2 ein im Vergleich zur Ur-x87-Implementation kaum vorstellbarer Geschwindigkeitszuwachs stattfand, dann …
Superskalarität oder “Instructions per Cycle”
Nicht nur bedingt durch den Fakt, daß PhysX 32-bittige Instruktionen verwendet;
SSE bietet zudem den enorm geschwindigkeitsverbessernden Vorteil, daß es Super-skalar ist.
Somit wäre bei der bloßen Nutzung der
selben Befehle unter SSE
durch die gebotenen 128-Bit Instruktionen allein eine Performanceverbesserung von
4× gegeben – bei selbem Takt wohlgemerkt.
„Up to 4× as fast as the fastest implementation on CPU“
Kurios ist ja, daß nVidia stets meint, eine Portierung auf oder Nutzung von SSE würde einen
unüberschaubaren Programmieraufwand bedeuten und die Spiele-Entwickler würden diese Mehrarbeit in jedem Fall scheuen.
Außerdem würde eine CPU
überhaupt nicht in der Lage sein, eine
annähernd adäquate Performance zu liefern, um neben den Hauptaufgaben noch die Physik-Berechnungen zu meistern.
Wir sehen an dieser Stelle einfach mal davon ab, daß es überhaupt nicht Aufgabe der Spiele-Entwickler ist, PhysX auf SSE umzustellen.
“Marketing Is Everything”
Durchschaubar mutet nur der Fakt an, daß nVidia
höchstselbst den Kritikern von PhysX die Gegenargumente liefert und PhysX auf den Konsolen unterstützt.
Paradoxerweise läuft PhysX auf der XBox 360, der PS3 & Wii.
Eigenartig dabei ist, daß
keine der Konsolen eine explizite CUDA-Hardware
gleich welcher Art besitzen – wobei nVidia nicht müde wird, eben genau
dies als Argument
gegen eine performante Umsetzung auf anderer Hardware als ihren Karten vorzubringen.
Wobei die Wii lediglich einen
Single-Core besitzt und somit überhaupt nicht von
irgend einer Art von SMT profitieren könnte.
Die PS3 nutzt eine Variante des G 70/G 71 – offiziell benötigt PhysX mindestens eine G80 GPU …
Merkwürdig ist hier weiterhin nur, daß auf den Konsolen das so vielbeschworene Multi-Threading
ganz hervorragend funktioniert.
Eine Konsole, die nicht einmal die Leistung eines Low-End P4 erreicht schafft es, PhysX ohne CUDA-fähige Hardware auf der CPU
neben dem Spiel flüssig laufen zu lassen?
Wie das tatsächlich sein kann?
Nun, nVidia erlaubt auf den Aspiranten für‘s Wohnzimmer
nicht nur volles Multi-Threading sondern
nutzt für die Gleitkomma-Berechnungen von PhysX überraschenderweise
sogar SSE in Form der AltiVec-Einheit des PowerPC.
Und es bestätigt sich die These, daß
PhysX ohne Weiteres auf einer normalen CPU laufen
könnte – nachweislich
auch performant genug.
Kindergarten 2.0 aka nVidia-Only
Es stellt sich die Frage,
warum seit 2005 ausdrücklich auf den x87-Befehlssatz gesetzt wird.
Der x87-Befehlssatz ist nicht nur
nicht wenigstens halbwegs aktuell sondern kann tatsächlich architektonisch und softwaretechnisch
bestenfalls als antiquiert tituliert werden, da er seit Urzeiten überhaupt nicht mehr seitens AMD und Intel unterstützt wird – seit fast 15 [
sic!] Jahren.
Selbst der schnellste i7 kann maximal 2 x87-Instruktionen pro Takt verarbeiten.
Bedingt durch die 128 weiten Register von SSE kann beispielsweise selbst ein in die Jahre gekommer Nehalem
schlechtestensfalls 4 Operationen mit doppelter oder 8 mit einfacher Genauigkeit berechnen, pro Takt – AVX würde diese Marke auf 16 erhöhen.
Sicherlich, nVidia kann mit einer großen Anzahl an parallelen Stream-Prozessoren Punkten …
Bei einer GTX 285 beispielsweise, welche über dieser 240 besitzt und ist laut nVidia 4× so schnell wie der schnellste Intel Core (zum Zeitpunkt der Behauptung dieser Aussage).
Wenn man die
selben Beschränkungen auf die GPU-Version von PhysX anwendet, wie die, welche nVidia der CPU-Variante auferlegt, wäre die GPU plötzlich
60-120× langsamer als die bereits unoptimierte CPU-Version.
Sofern wenn man der CPU
lediglich einfaches SSE angedeihen würde, wäre sie trotzdem
um den Faktor 960-1920× schneller als die selbe Single-Threaded-Implementierung auf einer CUDA-GPU.
Selbst eine Atom-CPU wäre mutmaßlich 100× schneller als Single-Threaded-GPU-PhysX …
Letztlich kann man mit Gewissheit sagen, daß die Nutzung von x87 in Verbindung mit der Limitierung auf Single-Threading, wenn PhysX auf einer üblichen CPU genutzt wird,
rein marketingtechnischer Natur ist.
Zum Verständnis …
Leider hat die nVidia-PR ganze Arbeit geleistet und hat in den Köpfen der User bis heute die Vorstellung manifestiert, das es sich bei PhysX um eine spezielle in Hardware gegossene Physik-Erweiterung handelt.
Das ist nicht der Fall.
Es geht lediglich um die Fähigkeit der Gleitkomma-Berechnungen …
Unyu schrieb:
SSE2 wird afaik seit PhysX SDK 3.x per Default genutzt. Implementiert ist es seit PhysX SDK 2.8.x von 2010.
Ersetze „wird“ mit „kann“ und ich stimme Dir zu - es ist komplett optional …
Lektüre:
In diesem Sinne
Smartcom
PS: Man verzeihe mir die möglicherweise zwecks Erläuterung erhebliche Simplifizierung der jeweiligen Sachverhalte.