Question

Disons que nous voulons compiler un grand projet (GCC ou dire le noyau Linux) aussi vite que possible. Est-ce une CPU avec une capacité de hyperthreading (par exemple un Intel Core i7) exécuter le compilateur plus rapidement avec hyperthreading activé ou désactivé? Y a-t-il des points de référence publiés qui testent ce?

Ma compréhension de l'hyperthreading est que chaque noyau peut sélectionner des instructions de deux (ou plusieurs processus). Cela rend généralement le noyau plus efficace car il est moins probable que des unités fonctionnelles seront au repos. Cependant, il y a possibilité d'une pénalité de performance car les processus en cours d'exécution sur les mêmes partager des ressources de base telles que le cache et peuvent interférer entre eux. Que ce soit la performance ou non augmente réellement dépend de la charge de travail.

Donc, pour une charge de travail du compilateur, n'augmente la performance? Si oui, combien?

Était-ce utile?

La solution

Compiler coreutils-8.4 sur Ubuntu 8.04 x86

Intel Atom 1,6 GHz avec HT activé:

~/coreutils-8.4$ make clean > /dev/null
~/coreutils-8.4$ time make > /dev/null

real    2m33.375s
user    2m22.873s
sys     0m10.541s
~/coreutils-8.4$ make clean > /dev/null
~/coreutils-8.4$ time make -j2 > /dev/null

real    1m54.707s
user    3m26.121s
sys     0m13.821s
~/coreutils-8.4$ make clean > /dev/null
~/coreutils-8.4$ time make > /dev/null

real    2m33.372s
user    2m22.753s
sys     0m10.657s
~/coreutils-8.4$ make clean > /dev/null
~/coreutils-8.4$ time make -j2 > /dev/null

real    1m54.851s
user    3m26.145s
sys     0m13.685s
~/coreutils-8.4$

Hyper-threading réduit le temps d'exécution de 75%, ce qui est équivalent à 33% plus de puissance de traitement . (Je les ai couru deux fois pour faire en sorte que tout est dans la mémoire cache.)

Et voici une expérience de contrôle pour montrer que make -j2 seule n'améliore pas la vitesse pour la compilation coreutils-8.4 sur Ubuntu 8.04 x86

Single-core Core 2 Quad 2,5 GHz VM (pas d'HT):

~/coreutils-8.4$ make clean > /dev/null
~/coreutils-8.4$ time make > /dev/null

real    0m44.453s
user    0m38.870s
sys     0m5.500s
~/coreutils-8.4$ make clean > /dev/null
~/coreutils-8.4$ time make -j2 > /dev/null

real    0m45.131s
user    0m40.450s
sys     0m4.580s
~/coreutils-8.4$ make clean > /dev/null
~/coreutils-8.4$ time make > /dev/null

real    0m44.621s
user    0m39.090s
sys     0m5.340s
~/coreutils-8.4$ make clean > /dev/null
~/coreutils-8.4$ time make -j2 > /dev/null

real    0m45.165s
user    0m40.390s
sys     0m4.610s
~/coreutils-8.4$

Autres conseils

Tout dépend si le compilateur est écrit pour être ou non multi-thread. Si elle l'est, sans aucun doute accélère hyperthreading les choses un peu depuis lors, le système d'exploitation peut programmer les différentes parties des fils du compilateur sur différents noyaux. Je suis d'accord avec Ken que les compilations sont généralement plus lié d'E / S de traitement intensif, afin d'avoir un disque dur rapide serait plus une nécessité d'un processeur rapide avec 100 de noyaux.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top