Peut-on profiter de PhysX sans GeForce ?

Introduction

L’historique de la physique dans les jeux est souvent comparé à celui du cinéma, ce qui est certes excessif, mais pas dénué de sens pour autant. Les graphismes 3D étant arrivés à un niveau de réalisme saisissant, le manque de dynamisme et d’interaction dans les environnements, ou encore le manque de réalisme en matière d’animations et mouvements est devenu plus flagrant.

Image 1 : Peut-on profiter de PhysX sans GeForce ?

Il y a de quoi être admiratif quand on constate le chemin parcouru en 20-25 ans depuis les premiers jeux en VGA jusqu’au références actuelles : au lieu de sprites en pixels animés, on mesure maintenant la qualité graphique à la crédibilité des éléments et phénomènes naturels comme l’eau, les reflets, le brouillard, la fumée de même que leurs mouvements et animation. Tout ceci dépendant essentiellement de calculs très complexes, la plupart des développeurs choisissent d’adopter des moteurs physiques dont les librairies prêtes à l’emploi contiennent notamment des animations de personnages (effets ragdoll) ou encore des mouvements complexes (véhicules, chutes d’objets, eau etc.)

Image 2 : Peut-on profiter de PhysX sans GeForce ?

PhysX sera au cœur de cet article, mais il faut noter qu’Havok a été largement plus employé jusqu’ici. Revenons en arrière : jusqu’en 2008, Havok comme PhysX permettent tous deux une gestion des calculs physiques au niveau CPU. Août 2008, NVIDIA annonce que les GeForce permettent une accélération matérielle de PhysX, devenu depuis le seul moteur physique établi dans l’industrie du jeu vidéo à traiter les calculs au niveau CPU et GPU.

C’est ici que le dilemme commence : PhysX est officiellement indissociable des GeForce, or l’offre AMD est particulièrement attractive ne serait-ce que depuis les Radeon HD 4850/4870, qui ont vu le jour fin juin 2008. L’année suivante a été marqué par un verrouillage prononcé chez NVIDIA, qui a rendu la vie dure à tous ceux qui comptaient faire cohabiter une Radeon pour le jeu et une GeForce pour PhysX au sein d’une même configuration. Nous souhaitons évidemment qu’une solution ouverte et raisonnable puisse s’imposer, mais dans l’état actuel des choses, il faut aller aussi loin que possible avec ce que les développeurs ont massivement adopté : la gestion des calculs physiques par le CPU.

Pourquoi cet article ? Les actualités/articles sur le sujet sont déjà nombreux, mais nous tenions à faire la lumière sur les derniers développements, benchmarks à l’appui. On verra donc si NVIDIA limite les performances CPU de PhysX de manière à mettre en avant les GeForce, l’aptitude de PhysX à gérer le multithread (ce qui le rendrait compétitif) et enfin s’il est aussi facile et bénéfique de diriger les calculs physiques vers le GPU que NVIDIA le prétend.

Plateforme de test

Nous reprenons aujourd’hui la configuration qui avait été utilisée pour l’article « Quelle quantité de RAM peut-on réellement exploiter » : outre le fait qu’on ne risque pas de manquer de mémoire, la carte mère MSI 890FXA-GD70 gère jusqu’à quatre cartes graphiques.

Composants
Détails
Processeur
AMD Phenom II X6 1090T (Thuban) @ 4.0 GHz
Dissipateur
Prolimatech Megahalems + Noiseblocker Multiframe M12-PS
RAM
16 Go Kingston HyperX 1600 CL9
Carte mère
MSI 890FXA-GD70
Stockage
Super Talent Ultradrive GX2 (Os), Western Digital Caviar Blue 1 To (Programmes & jeux)
Alimentation
Aerocool V12XT, 800 Watts
Boîtier
SilverStone Raven RV02
Ventilation
Rhéobus Zalman, 1 Noiseblocker Multiframe S3 120mm et 3 Silverstone 180 mm
OS
Windows 7 Ultimate 64 bits



Image 3 : Peut-on profiter de PhysX sans GeForce ?

PhysX CPU : état des lieux

Rappelons que NVIDIA a rendu l’accélération GPU de PhysX exclusive à ses cartes, forçant ainsi le calcul des instructions PhysX au niveau CPU dans le cas contraire. En conséquence, les possesseurs de Radeon se retrouvent généralement devantun slideshow dès lors qu’ils activent PhysX. Plutôt que de juger ces pratiques, nous allons surtout chercher à comprendre ce qui plombe les performances dans ce genre ce cas.

Image 4 : Peut-on profiter de PhysX sans GeForce ?

Pourquoi un tel écart de performances entre PhysX GPU et PhysX CPU dans les jeux récents ?

En supposant que l’on puisse recourir au calcul parallèle, un GPU et ses multiples shaders est plus rapide qu’un processeur grand public, y compris les hexacore. NVIDIA prétend que les GPU permettent d’effectuer les calculs physiques de deux à quatre fois plus vite par rapport aux CPU, or ce n’est qu’une demi-vérité : toutes les fonctionnalités en matière de physique peuvent être implémentées exclusivement au niveau CPU. D’ailleurs, les jeux combinent souvent les deux approches pour le meilleur rendement possible : le GPU traite les calculs hautement parallèles comme les effets de particules, tandis que le CPU gère ceux qui sont plus statiques et donc non-parallélisables comme le ragdoll. Sacred 2 en est un bon exemple.

En théorie, le ratio de calculs hautement parallèles devrait être beaucoup trop faible pour que l’on puisse vraiment tirer parti de l’immense potentiel de nos cartes graphiques. Ceci soulève immédiatement une question : pourquoi voit-on alors de tels écarts ?

Nous voyons au moins deux explications à cela : premièrement, que ce soit avec un dual-core, quad-core ou plus, PhysX CPU est presque toujours mono-thread avec les jeux que nous avons testés. Deuxièmement NVIDIA semble prendre soin de ne pas optimiser les calculs CPU pour mieux mettre en avant ses GPU. C’est ce dernier point qui retiendra notre attention aujourd’hui, mais ceci ne nous empêchera pas d’aborder la question du multithread avec une batterie de benchmarks adaptés une autre fois.

PhysX CPU : le dossier x87

Comme nous l’avions déjà évoqué en juillet dernier suite à la parution d’un article chez real world technologies, David Kanter explique avoir utilisé l’Intel VTune pour analyser le comportement de PhysX CPU. Les résultats obtenus lui ont permis d’identifier une quantité considérable d’instructions et micro-opérations x87.

Rappelons que l’x87 est un fragment du jeu d’instructions utilisé pour les calculs à virgule flottante dans l’architecture x86.  On la qualifie également d’extension de jeu d’instructions, une implémentation matérielle essentielle pour gérer plus rapidement les opérations mathématiques courantes (calculs du sinus et cosinus par exemple). Si l’extension x87 a nettement perdu en importance depuis l’arrivée des instructions SSE2, les calculs nécessitant une mantisse 64 bits ne sont possibles qu’avec les registres 80 bits de l’x87.

David Kanter a émis l’hypothèse selon laquelle l’optimisation du code de PhysX avec le SSE2 plutôt que l’x87 rendrait l’API plus efficace, avançant même des performances de 1,3 à 2x supérieures. Comme il en a fait l’observation, NVIDIA n’aurait rien à gagner dans ce cas vu que les GPU constituent le cœur d’activité de la marque. A la lumière de ces éléments, nous avons voulu voir nous-mêmes ce qu’il en était en choisissant Mafia II plutôt que Cryostasis. Nous sommes repassés sur une configuration de test Intel par la même occasion, vu qu’il était impossible de faire fonctionner VTune avec un processeur AMD.

Image 5 : Peut-on profiter de PhysX sans GeForce ?

Notre test valide complètement les résultats de David Kanter. En revanche, la hausse de performances obtenue en modifiant les options du compilateur est moins importante qu’annoncée chez SemiAccurate : avec le benchmark « Bullet », l’écart entre fichiers compilés SSE2 et X87 n’est que de 10 à 20 %, ce qui est considérable en théorie mais négligeable en pratique a fortiori vu que PhysX ne sollicite qu’un seul core. Concrètement, un jeu trop gourmand ne deviendra pas jouable avec ce type de gain.

NVIDIA veut donner une certaine impression en activant le SSE2 par défaut dans le SDK 3.0, mais ce sont les développeurs qui décident in fine de s’appuyer plus ou moins sur ce jeu d’instructions. Certes, les marges de progression sont bien là comme on vient de le voir, mais il ne faut pas non plus en faire un plat. On ne peut cependant s’empêcher d’observer que NVIDIA a pris ici une décision stratégique plutôt que d’opter pour la solution la plus performante qui soit.

PhysX CPU: quid du multithreading ?

Autre problème, la plupart des tests effectués jusqu’ici montrent que PhysX n’utilise qu’un seul core CPU lorsqu’il n’y a pas de GPU pour prendre en charge l’accélération matérielle. Ce constat nous semble incompatible avec l’échelonnement satisfaisant des performances de PhysX CPU avec Metro 2033.

Carte graphique primaire
GeForce GTX 480 1,5 Go
Carte graphique dédiée à PhysX
GeForce GTX 285 1 Go
Pilotes
ForceWare 258.96
PhysX
Version 9.10.0513

Nous commençons par relever le taux d’utilisation des cores CPU ; le test est effectué en mode DirectX 11 avec gestion multithread pour avoir une vision la plus fidèle possible des performances. Le premier tiers du graphique ci-dessous montre que la charge de travail est répartie de façon assez égale sur les six cores tant que la physique étendue est désactivée.

En 1280×1024, la carte graphique n’agit que très peu comme facteur limitant et l’on devrait donc voir les performances du jeu s’échelonner en lien avec le nombre de cores disponibles. Notons qu’il n’en serait pas de même avec le mode DirectX 9 puisque celui-ci limite la distribution de la charge CPU à deux cores.

L’activation de PhysX GPU augmente très légèrement la charge CPU du fait que ce dernier transmet aux cartes graphiques les calculs physiques à traiter. Lorsque l’on passe à PhysX CPU, la charge processeur augmente dans des proportions autrement plus importantes sachant qu’elle reste assez équilibrée d’un core à l’autre : les développeurs de Metro 2033 ont donc réussi à implémenter un parallélisme assez efficace.

Image 6 : Peut-on profiter de PhysX sans GeForce ?

Metro 2033 est par ailleurs jouable avec PhysX (à condition de ne pas en abuser) même sans carte graphique pour accélérer le rendu. En effet, le titre de 4A Games est essentiellement limité par la carte graphique et non pas les effets PhysX supplémentaires à un cas particulier près : l’explosion simultanée de plusieurs bombes. Le processeur souffre alors de vraies chutes du nombre d’ips bien que le FPS ukrainien reste jouable. Voyons maintenant ce qu’il en est du framerate.

Image 7 : Peut-on profiter de PhysX sans GeForce ?

Nous avons délibérément choisi de faire ces tests avec une carte graphique haut de gamme pour les graphismes et une autre dédiée à PhysX, vu que Metro 2033 est déjà suffisamment dur à gérer sans effets physiques avancés pour une seule et même carte. Dans le cas de notre configuration, il n’y a quasiment aucune différence entre PhysX CPU sur un bon hexacore overclocké et une gestion multithread par rapport à PhysX GPU sur une carte dédiée.

Contrairement à ce que l’on peut lire, le SDK de PhysX permet bel et bien de répartir la charge sur plusieurs cores. Lorsque PhysX CPU est bien utilisé, ses performances sont très proches de PhysX GPU avec une carte dédiée. Il y a malgré cela un biais : PhysX gère automatiquement la gestion des threads et déporte une charge de travail du CPU vers le GPU lorsqu’une carte graphique compatible est détectée. Il appartient donc aux développeurs de réassigner cette même charge de travail au CPU.

Pourquoi est-ce si rarement le cas ?

L’apport de changement au code est suffisamment complexe et coûteux pour en dissuader plus d’un, ce qui ne nous empêche pas de penser que les développeurs devraient jouer franc jeu et l’admettre ouvertement. Quand on voit certains jeux (avec un certain logo dans les crédits), on peut se demander si les fonds qui ont pu être économisés avec ce partenariat l’ont été pour des raisons commerciales ou marketing. D’un côté, NVIDIA a des obligations envers les développeurs,  à savoir les aider à intégrer des effets visuels dont on n’aurait probablement pas pu profiter autrement. D’un autre côté, NVIDIA veut éviter que les préjugés finissent par devenir ingérables. Si l’on croit la firme au caméléon, les possibilités techniques sont bel et bien là dans le SDK 3.0. On attend donc avec impatience que les développeurs en tirent parti.

Une GeForce pour épauler une Radeon

Grâce à un hack, on peut utiliser une Radeon pour les graphismes et une GeForce pour PhysX et l’on sait déjà que cette approche hybride ne plait absolument pas à NVIDIA. On se retrouve donc à jouer au chat et à la souris puisque le Hybrid PhysX mod évolue en fonction des nouvelles versions de PhysX, ce qui compense le fait que nous sommes les grands perdants dans cette affaire : autant ce verrouillage doit avoir un sens stratégique pour la firme au caméléon, autant le fait d’être bloqué parce qu’une des deux cartes n’est pas une GeForce est vraiment dur à avaler.

Image 8 : Peut-on profiter de PhysX sans GeForce ?

Configuration nécessaire

OS
Windows 7 64 ou 32 bits
Cartes compatibles PhysX
GeForce 8800 GTS 512, 9600 GT, 9800 GTX, GT 240, GTS 250, GTX 260, GTX 285, GTX 460, GTX 470, or GTX 480
Pilote
ForceWare 258.96
PhysX
Version 9.10.0513
Autres
Un port PCIe libre, 4x minimum

Depuis la version 1.04ff du mod, la carte dédiée à PhysX n’a plus besoin d’être reliée à un moniteur, ce qui libère notamment des ressources supplémentaires pour les calculs physiques. Par ailleurs, cette même carte n’a pas besoin d’être compatible SLI.

Logiciels

Le mod est disponible chez ngohq.com. Nous n’avons pas inséré de lien direct vers le Hybrid PhysX mod pour deux raisons : celui-ci sera mis à jour à l’avenir et le travail effectué mérite que l’on aille faire un tour sur la source.

Installation

Voici la procédure pas à pas :

  • Installer la GeForce dédiée à PhysX (PC éteint et débranché)
  • Démarrer, puis installer les ForceWare et Catalyst
  • Installer la version de PhysX adéquate (cf. liste)
  • Télécharger le hack (attention aux différentes versions)
  • Installer le Hybrid PhysX mod en tant qu’administrateur
  • Redémarrer

Le mode de rendu peut être modifié via PhysX-HwSelection-set-GPU.cmd ou PhysX-HwSelection-set-CPU.cmd dans le dossier Extras (à exécuter en tant qu’administrateur).

A ce stade, il ne reste plus qu’à tester PhysX avec GPU-Z ou Fluidmark avant de pouvoir profiter de l’association Radeon & GeForce qui est certes coûteuse et énergivore mais mérite tout de même le détour.

Nota bene

A chaque installation de nouveaux pilotes/PhysX, il faut réappliquer le mod. La version testée marchait parfaitement sur notre configuration de test, mais on ne s’engagera pas pour autant sur le résultat de même que les futures évolutions de Hybrid PhysX mod : ceci est un guide et non pas une série de recommandations.

PhysX pour tous : les performances

A ce stade nous reprenons les différents environnements  possibles pour les tester comme suit :

  • Carte primaire AMD + Carte NVIDIA pour PhysX GPU
  • Carte primaire NVIDIA + Carte NVIDIA pour PhysX GPU
  • Carte NVIDIA seule pour la 3D & PhysX
  • Carte NVIDIA ou AMD avec PhysX CPU

Plutôt que de reprendre Metro 2033 ou Cryostasis, nous nous sommes tournés vers Mafia II qui outre le fait d’être plus récent présente un bon équilibre calculs graphiques/physiques.

Os
Windows 7 Ultimate 64 bits
Jeu
Mafia 2 (version Steam)
Version
Maj du 09.08.2010


Image 9 : Peut-on profiter de PhysX sans GeForce ?

Image 10 : Peut-on profiter de PhysX sans GeForce ?

Comme prévu, le fait d’avoir une carte dédiée à PhysX fait une différence. Chose intéressante, les résultats tendent à s’égaliser à gamme similaire, puisque GTX 480 et HD 5870 sont aux coudes à coudes, comme les GTX 460 et HD 5850. Les solutions hybrides devancent les cartes NVIDIA seules, même lorsqu’il s’agit de la GTX 480.

On voit par ailleurs qu’excepté cette même GTX 480, une GeForce seule est trop juste pour gérer calculs graphiques et physiques. Les moyennes relevées ici ne disent pas tout : la présence d’une carte dédiée à PhysX ne fait globalement pas bondir les performances surtout lorsque l’on est tout simplement en train de marcher. En revanche, le constat est radicalement différent lorsque les calculs physiques rentrent en jeu même s’ils sont trop peu fréquents pour réellement peser sur le nombre d’ips en moyenne.

Quelle carte pour PhysX ?

Bien entendu mieux vaut viser haut, cependant nous nous doutons bien que tout le monde n’aura pas forcément une envie irrésistible d’allouer une GTX 285 à PhysX d’où le panel de cartes réuni ci-dessous.

Image 11 : Peut-on profiter de PhysX sans GeForce ?

Comme nous l’avons déjà évoqué, c’est le bon équilibre entre physique et graphismes qui nous à poussés vers Mafia II. Cryostasis tend à abuser de PhysX tandis que Metro 2033 est probablement le plus gourmand des jeux actuels.

Image 12 : Peut-on profiter de PhysX sans GeForce ?

Première chose, si toutes les cartes gèrent PhysX, on voit clairement qu’une GeForce GT 240 (ou 9600 GT) constitue un minimum pour apporter quelque chose. Nous avons également fait le test avec une 8400 GS : les résultats étaient alors inférieurs de 15 % par rapport à une GTX 480 seule !

Quel slot PCIe ?

Pour en avoir le cœur net, nous avons successivement utilisé une GTX 285 et une GT 240 sur des ports 4,8 et 16x.

Image 13 : Peut-on profiter de PhysX sans GeForce ?

Si le port 16x est idéal, on voit que l’échelonnement des performances est mineur : la GT 240 est de toute façon trop faible pour engendrer des écarts, tandis que le port 4x ne bride pas la GTX 285 au point d’être dissuasif. Le slot 8x est donc un compromis idéal.

Au-delà des performances, on en revient naturellement à la notion de budget. A l’aide d’une GTS 250 dont le prix plancher est tout de même 95 euros, une HD 5870 arrivera au niveau de performances d’une GTX 480 seule avec PhysX activé, mais le coût total sera plus élevé. Dans une optique de performances idéales, c’est une GTX 260 ou mieux qu’il faut dédier à PhysX, mais on se rend bien compte que cette solution n’est pas à la portée de tous en plus d’alourdir la consommation globale. C’est toutefois une occasion toute trouvée de donner une seconde vie à une « vieille » GeForce, ou encore de chercher une bonne affaire sur un forum.

Conclusion

Vu les gros titres que PhysX a fait depuis quelques mois et nos résultats, voici quelques conclusions :

  • PhysX CPU s’appuie principalement sur les vieilles instructions x87 au lieu du SSE2
  • Le benchmark « Bullet » de Mafia II montre que la modification des compilateurs pour utiliser le SSE2 permet d’augmenter les performances dans une fourchette de 10 à 20 % maximum
  • Les gains de performance dus à ces optimisations ne seraient donc que marginaux dans un contexte monocore
  • Contrairement à ce que l’on a pu lire, PhysX CPU peut gérer le multithreading
  • Suivant les cas, PhysX peut gagner à être pris en charge par le CPU
  • Un jeu comme Metro 2033 montre que PhysX CPU peut être tout à fait viable

Sachant cela, pourquoi est-ce que l’on a encore de mauvaises surprises du côté des performances ?

  • PhysX CPU dépend très largement de la capacité des développeurs à allouer et gérer les threads, là ou PhysX GPU fonctionne de manière autonome
  • Si les optimisations de PhysX CPU tiennent principalement au temps et moyens que leur consacrent les développeurs, la situation actuelle a été prévue pour mettre PhysX GPU en avant
  • En s’appuyant sur les instructions SSE2 et une bonne gestion des threads, les quad core/hexacore récents rendent PhysX CPU compétitif par rapport à PhysX GPU. NVIDIA n’a en revanche pas grand-chose à y gagner


Image 14 : Peut-on profiter de PhysX sans GeForce ?

S’agissant de la solution hybride Radeon + GeForce, nous sommes séduits par l’énorme gain de performance du à la carte dédiée : une HD 5870 avec une GeForce abordable fera ainsi nettement mieux qu’une GTX 480 seule. Même si l’on ajoute une deuxième GeForce dédiée à PhysX pour épauler la GTX 480, celle-ci ne distancera pas la HD 5870 pour autant. L’intérêt de PhysX GPU pour les possesseurs de Radeon est donc bien réel, pourvu que l’on mobilise une carte NVIDIA suffisamment puissante. Mafia II illustre bien le fait que par moments, même une GTX 480 est insuffisante pour avoir un jeu fluide avec des effets physiques dignes de ce nom et doit être secondée par une carte dédiée à PhysX.

Ceci étant, NVIDIA implémente des barrières dans les ForceWare pour éviter les solutions hybrides et ainsi pénaliser tous ceux qui utilisent une Radeon comme carte principale. La communauté ne l’accepte pas et cherche des contre-mesures productives, ce qu’il faut saluer en espérant que l’on ne se retrouvera pas à nouveau pénalisé à l’avenir. Dans l’immédiat, d’autres inconvénients sont encore plus pressants : outre le prix, l’ajout d’une deuxième carte rajoute à la consommation et potentiellement aux nuisances sonores. Il faut notamment être bien conscient des progrès accomplis par AMD et NVIDIA au niveau de la consommation en veille des GPU.