RaphAstronome

vendredi, 15 juin 2007

CPU ou GPU limited ?

Beaucoup de joueurs qui investissent beaucoup d'argent dans leur ordi se demandent si leur configuration est limité par le microprocesseur (CPU) ou leur carte graphique (GPU).

Quelques tests simples permettent de connaître le facteur limitant les performances. Tout d'abord on désactivera la sycro verticale pour avoir des chiffres exploitables. Attention certains jeux se chargent eux même de la syncro, lever la limitation au niveau des drivers sera donc inutile et le nombre d'images par seconde sera le même que la V-Sync (souvent 60Hz) donc faites attention quand vous tomber sur ce genre de chiffre. Notez aussi que lorsque le nombre d'images par secondes (FPS ou IPS) atteint plusieurs centaines ça signifie que la carte graphique met plus de temps à vider les tampons qu'a dessiner.

Dans un jeu le CPU est utilisé pour :

  • Donner les ordres à la carte graphique
  • Les calculs de physique (certains jeux utilisent le GPU ou même un processeur dédié si il est présent)
  • Le mouvement des joueurs (IA)
  • Les communications réseau et autres E/S qui prennent un temps souvent très réduit

Le GPU est utilisé pour

  • Dessiner la scène à l'écran
  • Gérer la physique (parfois)

La limitation du GPU peut être remarquée facilement, c'est le cas lorsque les actions suivantes améliorent la situation :

  • Diminuer la résolution
  • Désactiver l'antialiasing
  • Désactiver les options de filtrage de texture, notamment tout ce qui est shader (reflets, éclairage par pixel ...)
  • Diminuer la qualité des models 3D (en général, dépend du jeu)

La limitation du CPU est plus délicate à voir, c'est le cas lorsque :

  • Désactiver la physique ou la simplifier améliore la situation.
  • Il y a beaucoup de personnages sur la map mais qu'il ne sont pas visibles les performances sont moins bonnes que lorsqu'il y a personne. Dépend beaucoup de l'algorithme de culling, ce mettre dans un endroit vraiment à part. Mais l'IA tourne t'elle pareil si le joueur est loin ?.

Notez que si vous voulez changer de processeur pour un multi-core vérifiez bien avant que le jeu en tire profit (il est multi-threadé) sinon ça m'aura aucun intérêt du moins pour ce jeu. Toutefois il est aujoud'hui conseillé le prendre un CPU avec 2 cores, pour les autres applications. Si le jeu est mono-threadé il faudra que chaque core soit nettement plus puissant que le core de votre PC actuel pour que vous voyez une différence.

Note : pour jouer réactivez la sycro verticale. C'est inutile de la désactiver à part pour faire chauffer l'ordi et consommer plus d'électricité.

mercredi, 13 juin 2007

Charge du système

Un processeur (simple core) ne peut exécuter qu'un seul programme à la fois. Pour pouvoir en exécuter plusieurs simultanément l'ordonnanceur du système d'exploitation (ex: Windows, Linux ...) va exécuter les programmes par intermittence. Par exemple si 2 processus tournent le premier sera exécuté pendant, par exemple, 5 milli-secondes puis le deuxième prend le relais 5ms et ainsi de suite jusqu'a ce que les processus soit terminées, ou déactivés d'une manière ou d'une autre (attente d'une action de l'utilisateur par exemple). Cette méthode permet à l'utilisateur de voir les 2 processus ce dérouler simultanément, et pourquoi pas interagir entre eux.

Sur les système de type Unix (et donc Linux) il existe un nombre qui permet d'avoir une idée de l'utilisation de l'ordinateur par les différents processus : la charge système ou load average.

  • Vous comprendrez vite que si il n'y a aucun processus en cours d'exécution, le processeur ne sera pas du tout utilisé (charge = 0).
  • Si il y a des processus lancés mais qu'ils n'utilisent pas totalement le processeur la charge est entre 0 et 1 . C'est le cas le plus courant sur les machines domestiques lorsqu'on fait du traitement de texte ou une autre activité qui ne consomme que peu de ressources du processeur.
  • Si le processeur est juste suffisant pour exécuter toutes les requêtes sans avoir à les mettre en attente la charge est de 1 mais c'est bien entendu très rare.
  • Si l'ordinateur travaille à fond mais n'arrive pas à exécuter toutes les requêtes lorsque les processus le désirerait la charge devient supérieure à 1, les requêtes sont alors mises en attente.

On pourrait penser qu'une charge supérieure à 1 provoquerait la mise en attente d'une liste de plus en plus importante requêtes jusqu'au plantage. Ceci peut arriver mais dans la pratique il faut une charge de plusieurs dizaines voire centaines pour que ça arrive. En effet de nombreux facteurs font que ce n'est pas si grave :

  • Les tâches sont exécutés plus tard ils demandent donc un temps supplémentaire plus tardivement, il en résulte un ralentissement des programmes.
  • Les tâches peuvent avoir des priorité différentes (paramètre "nice") le processeur exécutera en priorité certains processus. Boinc par exemple effectue ces calcul sur le temps inutilisé du processeur ce qui fait que la charge est toujours supérieure à 1 mais qu'il n'y est pas de ralentissement des autres programmes puisque ce dernier laisse place aux processus prioritaires.

Attention toutefois ce nombre inclus aussi les latences des entrées sorties (accès disque, réseau etc...) Ce fait est très important lorsqu'on veut réduire la charge : en effet avec une charge de 2.6 on pourrait penser qu'il faut un processeur 2.6 fois plus puissant. En fait pas forcément ça peut venir de beaucoup de choses et les remèdes sont variées :

  • Disque dur très sollicité (SWAP ou cache disque trop petit) : augmentez la RAM, si c'est pour un serveur de fichiers il est possible de mettre des disques en RAID pour augmenter leur débit.
  • Processeur(s) a 100% : c'est lui qui est limitant il en faut un plus puissant.
  • La carte graphique : ce voit surtout sur les jeux, activez la sycro verticale histoire de ne pas gaspiller les performances du GPU. Si vous le programmez utilisez si possible les listes d'affichages et VBO plutôt que le mode rendu immédiat.
  • Il est possible que ce soit dû à plusieurs éléments ou des composants qui ne sont pas dans cette liste.

L'utilisation le logiciels plus léger ou leur répartition sur plusieurs ordinateurs peut bien sur améliorer les choses ;) !

Certains programmes de calcul ou de jeu s'octroie autant de processeur qu'il le peuvent, à cause de leur conception, plus la machine est puissante plus il calculera vite, il collera toujours le processeur à 100%. Si c'est un jeu ça ne pose pas de problème car il est rare de jouer et faire être chose en même temps. Si le besoin ce fait sentir on peut augmenter le paramètre "nice" pour que ce processus soit traité avec une priorité plus faible mais avec un risque de saccades.

La charge est donnée par processeur donc sur les machines qui en possèdent plusieurs (ou multi-core) la charge normale sera celle du nombre de cores.