Table des matières

, , ,

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.

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

Compression

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

Handbrake semble utiliser le multithreading puisque, avec 4 coeurs, il les utilise tous à 100% sans activation manuelle.

codecs optimisés

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.