Je veux essayer d'accélérer le temps de compilation de nos projets C++. Ils ont environ 3M lignes de code.
Bien sûr, je n'ai pas toujours besoin de compiler chaque projet, mais il y a parfois beaucoup de fichiers sources modifiés par d'autres, et je dois tous les recompiler (par exemple, lorsque quelqu'un met à jour un ASN.1 source fichier).
J'ai constaté que la compilation d'un projet à mi-parcours (qui ne concerne pas tous les fichiers source) prend environ trois minutes. Je sais que ce n’est pas trop, mais parfois c’est vraiment ennuyeux d’attendre une compilation ..
J'ai essayé de déplacer le code source vers un SSD (un vieil OCZ Vertex 3 60 Go) qui, comparé aux performances, est 5 à 60 fois plus rapide que le disque dur (en particulier en lecture/écriture aléatoire). Quoi qu'il en soit, le temps de compilation est presque identique (peut-être 2-3 secondes plus vite, mais ça devrait être une chance).
Peut-être que déplacer le bin Visual Studio vers un disque SSD donnerait une augmentation supplémentaire des performances?
Pour compléter la question: j'ai un W3520 Xeon @ 2,67 GHz et 12 Go de DDR3 ECC.
La compilation/la liaison C++ est limitée par la vitesse de traitement et non par les E/S HDD. C'est pourquoi vous ne constatez aucune augmentation de la vitesse de compilation. (Déplacer les fichiers binaires du compilateur/de l’éditeur de liens vers le SSD ne fera rien. Lorsque vous compilez un projet volumineux, le compilateur/de l’éditeur de liens et la bibliothèque nécessaire sont lus une fois en mémoire et y restent.)
J'ai vu quelques accélérations mineures du déplacement du répertoire de travail vers un SSD ou un disque mémoire lors de la compilation de projets C (ce qui prend beaucoup moins de temps que les projets C++ qui utilisent beaucoup de modèles, etc.), mais pas suffisamment pour en valoir la peine.
Tout cela dépend énormément de votre environnement de construction et de toute autre configuration. Par exemple, sur mon serveur de compilation principal, j'ai 96 Go de RAM et 16 cœurs. Le disque dur est plutôt lent, mais cela n’a aucune importance, car tout est mis en cache dans la RAM.
Sur mon bureau (où je compile aussi parfois), je n'ai que 8 gib de RAM et six cœurs. Faire la même construction parallèle là-bas pourrait être grandement accéléré, car six compilateurs fonctionnant en parallèle consomment assez de mémoire pour que la différence de vitesse SSD soit très perceptible.
Il y a beaucoup de choses qui influencent les temps de compilation, y compris le ratio "CPU" de la CPU. D'après mon expérience ( GCC sur Linux), ils incluent:
-pipe
pour GCC.make -j6
peut être plus lent qu’un make -j4
malgré le nombre suffisant de cœurs inactifs.Pour résumer: cela dépend de suffisamment de choses pour faire du "oui, cela vous aidera" ou "non, cela ne vous aidera pas" à la spéculation pure, alors si vous avez la possibilité de l'essayer, faites-le. Mais ne passez pas trop de temps dessus, car chaque heure que vous essayez de réduire votre temps de compilation en deux, essayez d’estimer la fréquence à laquelle vous (ou vos collègues, le cas échéant) avez pu reconstruire le projet et son rapport avec le temps possible économisé.
J'ai constaté que la compilation d'un projet d'environ 1 million de lignes de C++ était environ deux fois plus rapide que lorsque le code était sur un disque SSD (système avec une mémoire vive à huit coeurs Core i7 , 12 Go). En fait, la meilleure performance possible a été obtenue avec un disque SSD pour le système et un second pour la source - ce n’est pas que la compilation a été beaucoup plus rapide, mais le système d’exploitation était beaucoup plus réactif pendant la phase de développement.
L'autre chose qui a fait une énorme différence était la possibilité de construire en parallèle. Notez qu'il faut activer deux options distinctes:
La compilation multiprocesseur est incompatible avec quelques autres indicateurs (y compris une reconstruction minimale, je pense), alors vérifiez la fenêtre de sortie pour les avertissements. J'ai constaté qu'avec le jeu d'indicateurs de compilation MP, tous les cœurs atteignaient une charge de près de 100%. Vous pouvez donc au moins voir que le processeur est utilisé de manière agressive.
Un point non mentionné est que lorsque vous utilisez ccache et une construction hautement parallèle, vous verrez les avantages de l’utilisation d’un SSD.