{{tag>brouillon intel processeur optimisation}}
----
====== Multithreading - Optimiser l'utilisation des ordinateurs multi-cores, multi-processeurs et Hyper Threading ======
De nos jours les ordinateurs disposent quasiment tous de la possibilité de faire tourner au moins deux threads (tâches systèmes) en même temps. La première fois que le grand public a entendu parlé de cette fonctionnalité c'était avec le Pentium 4 HT. Le Pentium 4 HT n'est pas à proprement parler un processeur optimisé pour ce genre de processus, il ne dispose d'ailleurs que d'un seul cœur d'exécution. Mais depuis les Pentium D, Core Duo, Core 2 Duo et Quad, Athlon 64 X2 ainsi que presque tous les processeurs plus récents, les processeurs sont vraiment significativement plus puissants en utilisation multithreads.
Pour résumer, ceci rend les ordinateurs plus réactifs quand ils sont en charge, mais permet aussi de grandement augmenter la vitesse de certains programmes, comme le transcodage vidéo, le montage vidéo. Le transcodage audio de masse est aussi concerné. Plus généralement, tous les programmes concernés sont les programmes utilisant massivement les unités de calculs.
Il existe deux types de cœurs d'exécution dans les processeurs actuels, les cœurs physiques et virtuels.
* Un cœur physique est un autre processeur réel, il permet en théorie des augmentations de performances de + 100% par nombre de cœur supplémentaire.
* Un cœur virtuel est un cœur créé par la technologie Hyper Threading d'Intel, il permet des augmentations de performances théoriques d'environ 30%. Un processeur HT dispose d'un ou plusieurs cœurs physiques qui sont séparés en deux cœurs virtuels, doublant ainsi le nombre de cœurs visibles par le système.
Cette page se fera un plaisir de recenser les différents programmes à préférer si vous utilisez un processeur multithreads pour obtenir les meilleurs performances. Elle regroupera aussi quelques trucs et astuces à connaitre pour améliorer les performances de programmes qui n'utilisent pas à l'origine plusieurs threads mais dont vous pouvez activer la fonctionnalité par une légère modification.
Si le programme doit être configuré pour utiliser le multithreading, la méthode est disponible sur la page du programme de ce wiki. La liste vous indiquera si oui on non il y a besoin d'une intervention de votre part.
===== Programmes multithreads =====
==== Audio ====
* [[SoundConverter]] - Automatique, pour les codecs les plus utilisés, extrêmement bien optimisé.
* [[SoundKonverter]] - Plus de fonctionnalités mais moins optimisé.
==== Compression ====
* [[p7zip]] - le format 7z est compressible en multithreads.
* [[pbzip2]] - Il est possible de compresser et décompresser du .bz2 en multithread grâce à pbzip2 ! Les performances montent en flèche ! Les deux programmes sont parfaitement compatibles, vous pouvez donc remplacer bzip2 par pbzip2 et profiter des performances dans toutes les interfaces graphiques l'utilisant.
==== Compilation ====
=== Make ===
Make permet la compilation en multithreads, il suffit d'exprimer votre commande comme ceci:
make -j N
N étant le nombre de threads à activer.
Attention toutefois à bien préciser le nombre de threads, sans quoi make considèrera le nombre de ces derniers comme illimité et votre ordinateur se mettra alors rapidement à ne plus répondre.
==== Vidéo ====
* [[WinFF]] - **Activation Manuelle** - Permet l'activation du multithreading et de choisir le nombre que vous en voulez.
* [[Kdenlive]] - Les filtres sont rendus dans des threads séparés, mais un seul filtre ne peut pas utiliser plusieurs threads. Il existe une option expérimentale permettant d'augmenter le nombre de threads, mais je ne vous conseille pas d'y toucher pour le moment ! Permet le rendu en multithreading, configurable dans la fenêtre de rendu.
* [[OpenShot]] - Pas un support optimal, mais plutôt bon pour le rendu Xvid.
* [[Avidemux]] - Utilise automatiquement le nombre de processeur maximum si le codec le permet. Vous pouvez dans la configuration choisir un nombre inférieur si vous le voulez.
* [[Kino]] - Bonne optimisation (basée sur ffmpeg)
* [[FFmpeg]] - **Activation Manuelle** - Permet l'activation du multithreading et de choisir le nombre que vous en voulez.
* [[Cinelerra]] - Encore un sans faute très pro pour ce programme, très bonne optimisation et de plus pas que dans le moteur de rendu final !
* [[dvdrip|DVD::Rip]] - **Activation Manuelle** - Permet l'encodage en multhreading via une astuce décrite sur la page du programme.
[[Handbrake]] semble utiliser le multithreading puisque, avec 4 coeurs, il les utilise tous à 100% sans activation manuelle.
=== codecs optimisés ===
* Xvid dans ses versions récentes (à partir d'ubuntu 10.04)
* x264
==== Serveurs (Web/FTP/etc) ====
Je ne m'y connais pas bien du tout en serveurs, si quelqu'un veut modifier cette partie, qu'il se sente comme chez lui ici :-D
Je suppose quand même au vu des architectures utilisées dans les serveurs web que la très grande majorité des serveurs comme [[Apache]] par exemple sont parfaitement bien optimisés.
Le "moteur" d'apache s'appelle le MPM. Il en existe 2 versions //worker// et //pre-fork//. Les deux créent plusieurs processus fils (donc les coeurs sont exploités) mais worker est, en plus, multi-threadé ; donc plus performant. La contrepartie c'est qu'il n'est plus compatible avec les librairies non thread-safe... comme le célèbre **module PHP**. Vous devrez utiliser un //cluster// interpréteurs en remplacement, comme PHP-FPM. Si vous faites la course à l'optimisation, regardez carrément l'étoile montante : **nginx**
===== Compléter cette liste ? =====
Vous pouvez bien sûr compléter cette liste par votre expérience.
Pour savoir si un programme est optimisé, regardez dans le moniteur système (Système->Administration->Moniteur Système) si votre programme passe significativement au dessus de 100% dans la liste des processus.
En effet si un programme fait simplement de 110 à 130 % il est seulement légèrement optimisé, par exemple le son et la vidéo s'encode dans un thread différent, mais ce n'est pas significatif. Et oui car d'un simple cœur à un double cœurs vous gagnerez certes légèrement en performances, mais en augmentant à 4 cœurs l'intérêt est nul.
Un programme optimisé utilisera donc tous les cœurs quel que soit leurs nombres, tant que la bande passante système (communication entre les cœurs/bande passante RAM) ne sera pas saturée.