Quand les joueurs optimisent le code : après Cyberpunk, voici le tour de GTA V |
————— 03 Mars 2021 à 13h15 —— 23761 vues
Quand les joueurs optimisent le code : après Cyberpunk, voici le tour de GTA V |
————— 03 Mars 2021 à 13h15 —— 23761 vues
Avec le lancement houleux de Cyberpunk 2077 — et grâce à son absence totale de DRM — des utilisateurs malins ont réussi à patcher le titre peu de temps après sa sortie, en se payant même le luxe d’optimiser quelque peu les performances pour certaines machines. Si nous nous demandions à l’époque si d’autres jeux suivraient la même voie, voici qu’un joueur répondant au pseudonyme de T0ST nous apporte quelques éléments de réponses, avec un grand nom du paysage vidéoludique de ces dernières années : GTA V.
En effet, le jeu est connu pour ses temps de chargements particulièrement longs, y compris sur des machines équipées de SSD : le gamer a en effet mesuré pas moins d’une minute de chargement pour le mode solo, et 6 minutes pour le mode en ligne, en dépit d’un SSD KINGSTON A400 (certes, peu cher) et d’un CPU AMD (certes daté) FX-8350.
Alors que la plupart des joueurs auraient jeté l’éponge et attendu avant de pouvoir investir dans une machine plus puissante, notre joyeux luron a sorti le désassembleur, et est allé mesurer où se trouvaient les pertes de performances avec Luke Stackwalker, un logiciel CDH-approved, ne serait-ce que pour son nom. Surprise, après quelques recherches, il s’avère que la fonction strlen()
permettant d’obtenir la longueur d’une chaîne de caractère est appelée de très nombreuses fois lors du chargement d’un fichier JSON décrivant un « net shop catalogue », probablement une liste d’objets achetables en jeu (n’allez pas voir le mal partout, ce n’est pas forcément lié aux microtransactions). Hé bien, l’implémentation du décodage du fichier se base sur sscanf()
, qui utilise en interne ce strlen()
pour compter individuellement le nombre d’octets à copier : un désastre pour les CPU peu performants en monothread.
GTA V, un jeu fantastique !
De plus, les valeurs étaient stockées par la suite dans un hash array
, une structure si inutile que le terme en lui-même n’existe pas ! Pour faire simple, rajouter un élément ou rechercher un élément existant y est très coûteux sans raison valable, d’autant plus que le code décompilé semblait indiquer que des fonctions plus efficaces avaient bien été codées... mais ne sont pas utilisées.
Pour patcher cela, notre gus a réalisé lui-même une bibliothèque (blabla.dll
) corrigeant en partie le souci, qu’il faut charger au démarrage du jeu via un petit utilitaire. Le résultat est édifiant : au total, le temps passé en chargement pour les parties en ligne uniquement a diminué de 6 minutes à 1 minute et 50 secondes, soit près de 70 % de réduction ! À voir si l’oreille de Rockstar saura se montrer attentive à la critique... (Et merci à Moutarde Bleue pour la source)
Un poil avant ?Le 11700K vendu en avance s'offre un Cinebench | Un peu plus tard ...Kioxia débute la construction de sa nouvelle usine à NAND |