Accélérer le temps de compilation AVEC SSD

je veux essayer d'accélérer mon temps de compilation de nos projets C++. Ils ont environ 3m de lignes de code.

bien sûr, je n'ai pas besoin de compiler tous les projets, mais parfois il y a beaucoup de fichiers source modifiés par d'autres, et j'ai besoin de les recompiler tous (par exemple, quand quelqu'un met à jour un ASN.1 fichier source).

j'ai mesuré que la compilation d'un mi-projet (qui n'implique tous les fichiers source) prend environ trois minutes. Je sais ce n'est pas trop, mais parfois c'est vraiment ennuyeux d'attente pour une compilation..

j'ai essayé de déplacer le code source vers un SSD (un vieux OCZ Vertex 3 60 GB) qui, référencé, est de 5 à 60 fois plus rapide que le HDD (surtout en lecture/écriture aléatoire). Quoi qu'il en soit, le temps de compilation est presque le même (peut-être 2-3 secondes plus vite, mais ça devrait être une chance).

peut-être que le déplacement de la bin de Visual Studio vers SSD accorderait une augmentation supplémentaire la performance?

juste pour compléter la question: j'ai un W3520 Xeon @2.67 GHz et 12 Go de DDR3 ECC.

19
demandé sur Peter Mortensen 2013-03-04 14:26:32

5 réponses

la compilation/liaison C++ est limitée par la vitesse de traitement, pas par HDD I/O. c'est pourquoi vous ne voyez pas d'augmentation de la vitesse de compilation. (Déplacer les binaires compilateur/linker vers le SSD ne fera rien. Lorsque vous compilez un grand projet, le compilateur/linker et la bibliothèque nécessaire sont lus en mémoire une fois 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 RAM lors de la compilation de projets C (ce qui prend beaucoup moins de temps que les projets C++ qui font un usage intensif de modèles, etc), mais pas assez pour le rendre intéressant.

7
répondu us2012 2013-03-04 10:31:09

tout cela dépend grandement de votre environnement de construction et d'autres configurations. Par exemple, sur mon serveur de compilation principal, j'ai 96 GiB de RAM et 16 cœurs. Le HDD est plutôt lent, mais cela n'a pas vraiment d'importance car tout est caché en RAM.

sur mon bureau (où je compile aussi parfois) je n'ai que 8 Gib de RAM, et six noyaux. Faire la même compilation parallèle là pourrait être grandement accéléré, parce que six compilateurs courant en parallèle mangent assez de mémoire pour la vitesse SSD différence très notable.

il y a beaucoup de choses qui influencent les temps de construction, y compris le rapport CPU/I / O "limite". D'après mon expérience (GCC sur Linux) ils comprennent:

  • complexité du code. Beaucoup de métatemplates font qu'il utilise plus de temps CPU, plus de code de type C pourrait rendre l'E/S des objets générés (plus) dominant
  • paramètres du Compilateur pour les fichiers temporaires, comme -pipe pour GCC.
  • Optimisation utilisé. Habituellement, plus l'optmization est importante, plus le travail CPU domine.
  • des constructions Parallèles. Compiler un seul fichier à la fois ne produira probablement jamais assez d'E/S pour obtenir le disque dur le plus lent d'aujourd'hui à n'importe quelle limite. Compiler avec huit noyaux (ou plus) à la fois cependant pourrait.
  • système D'exploitation / système de fichiers utilisé. Il semble que certains systèmes de fichiers du passé se sont étouffés sur le modèle d'accès pour de nombreux fichiers construits en parallèle, mettant essentiellement le goulot d'étranglement des entrées / sorties dans le code du système de fichiers, plutôt que le matériel sous-jacent.
  • mémoire vive disponible pour tampon. Plus un OS est agressif, moins la vitesse HDD est importante. C'est pourquoi, parfois, un make -j6 peut-être un plus lent qu'un make -j4 malgré avoir assez de noyaux inactifs.

pour faire court: cela dépend de suffisamment de choses pour faire n'importe quel "oui, il vous aidera" ou "non, il vous aidera pas" pure spéculation, donc si vous avez la possibilité de l'essayer, le faire. Mais n'y consacrez pas trop de temps, car chaque heure que vous tentez de couper vos temps de compilation en deux, essayez d'estimer combien de fois vous (ou vos collègues si vous en avez) auriez pu reconstruire le projet, et comment cela se rapporte au temps éventuellement gagné.

24
répondu PlasmaHH 2014-11-03 09:34:42

j'ai trouvé que compiler un projet d'environ 1 million de lignes de C++ accéléré par environ un facteur de deux quand le code était sur un SSD (Système avec un Huit-core Core i7, 12 GB RAM). En fait, la meilleure performance possible que nous ayons obtenue était avec un SSD pour le système et un second pour la source -- ce n'était pas que la construction était beaucoup plus rapide, mais le système d'exploitation était beaucoup plus réactif alors qu'une grande construction était en cours.

L'autre chose qui a fait une énorme différence est de permettre en parallèle bâtiment. Notez qu'il y a deux options distinctes qui doivent toutes deux être activées:

  • Menu Outils Options projets et Solutions → nombre maximum de projets parallèles construits
  • propriétés du Projet → C++ / General compilation multi-processeurs

la compilation multiprocesseur est incompatible avec quelques autres options (y compris la reconstruction minimale, I pensez) vérifiez donc la fenêtre de sortie pour les Avertissements. J'ai trouvé qu'avec le drapeau de compilation MP réglé tous les noyaux frappaient près de 100% de charge, donc vous pouvez au moins voir le CPU est utilisé de manière agressive.

4
répondu the_mandrill 2017-03-04 08:03:28

un point non mentionné est que lors de l'utilisation de ccache et une construction très parallèle, vous verrez des avantages à utiliser un SSD.

0
répondu nocnokneo 2017-03-04 08:04:31

j'ai remplacé mon disque dur par un SSD dans l'espoir de réduire le temps de compilation de mon projet C++. Le simple fait de remplacer le disque dur par un SSD n'a pas résolu le problème et le temps de compilation avec les deux était presque le même.

cependant, après des échecs initiaux, j'ai réussi à accélérer la compilation d'environ six fois.

Les étapes suivantes ont été faites pour augmenter la vitesse de compilation.

  1. éteint hibernation: "powercfg -h off" dans l'invite de commande

  2. arrêt de l'indexation de l'entraînement en C

  3. Shrunk page file à 800 min / 1024 max (il a été initialement réglé à la taille gérée par le système de 8092).

-2
répondu midhat karim 2017-03-04 08:03:52