Comment faire pour accélérer le c++ temps de lien
Est-il possible, d'optimaliser la liaison de temps en MS Visual studio C++ (2005) ? Nous utilisons Xoreax Incredibuild pour la compilation de la vitesse, mais rien pour le lien.
Actuellement chaque liaison prend environ 30 secondes. Quand j'allume la liaison incrémentielle, prend abou 35-40 secondes. ( Peu importe si j'ai compiler le projet avec ou sans incredibuild )
Est-il de toute façon, comment le profil de l'éditeur de liens et de regarder combien de temps ce qui se passe ? Ou n'importe quel outil pour paralel de liaison ? Ou des conseils pour l'optimisation du code pour accélérer l'éditeur de liens ?
Merci pour la réponse
Ludek Vodicka
Edit:
Merci pour les premières réponses, et pour plus d'infos:
- Ensemble du Programme d'Optimisation et de lien-temps de génération de code est déjà désactivé.
- PIMPL idiome est déjà utilisée lorsque cela est possible
- autres bibliothèques statiques sont déjà inclus via #pragma comment(lib, "pathToLib"). (aussi parce que de plus facile d'entretien]
- HW : quad core q6600, 8GO de ram, 3x WD raptor en raid 0. Windows Vista 64 bits
Combien de temps le parallèle phase de compilation? Combien de cibles ne vous générez en général à un moment? Si la phase de compilation prend 10 secondes et vous ne construire qu'une seule cible, je n'ai pas beaucoup de sympathie pour votre situation. 🙂
Lors du développement de nouvelles fonctionnalités, Nous sommes à la compilation de toutes les 10-20minutes comme vous l'avez dit, mais lors de la recherche et la correction des bugs, il pourrait être à chaque minute ;-( Ensemble du projet de compilation de prendre environ 2 minutes et la construction d'une cible. Lors de la compilation d'un seul fichier modifié, fil de compilation prend environ 3 secondes et la liaison d'environ 35 secondes ;-(
(Compilation fonctionne sur 3 comps avec 14 cœurs de processeur)
vous pouvez lire mon post dans ce thread. stackoverflow.com/questions/143808/...
OriginalL'auteur Ludek Vodicka | 2009-05-28
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas au courant de tout parallèle outils de liaison; je sais que Incredibuild ne le permet pas.
Le plus grand outil dans votre boîte à outils pour éviter les temps de liaison est le niveau approprié de l'abstraction. Si votre temps de liaison sont longues, il peut être parce que les objets en sais trop sur d'autres objets. Le découplage entre eux est la clé-par le biais des interfaces abstraites (peut-être en utilisant le PIMPL paradigme), ou si d'autres méthodes telles que l'événement en passant.
La surcharge pour intégrer les projets à travers les Dépendances d'un Projet est également assez élevé. Si votre plate-forme cible est Win32 seulement, ou principalement, vous pouvez envisager d'utiliser un en-tête de lien à votre charge les bibliothèques via #pragma comment(lib, "pathToLib").
OriginalL'auteur Brett Douville
Si vous pouvez vivre sans l'optimisation, désactiver le lien-temps de génération de code (supprimer le /GL interrupteur ou dans les propriétés de c/c++ -> Optimisation -> Tout le Programme d'Optimisation. Pour l'éditeur de liens supprimer /ltcg ou utilisez le Lien le Temps de Génération de Code de Configuration). Cela rendra le compilateur plus lent, mais, comme la génération de code qui se passe maintenant au cours de la compilation.
J'ai vu les projets qui prennent des heures à construire avec /GL+/LTCG, en quelques secondes, sans (celui-là par exemple: http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/750ed2b0-0d51-48a3-bd9a-e8f4b544ded8)
OriginalL'auteur Ben Schwehn
Avez-vous réfléchi à l'amélioration de matériel?
Ne vous utilisez un disque dur physique pour le construire? Quel genre de lecteurs utilisez-vous?
Comme une suggestion générale: jeter un peu de mémoire, obtenir un Velociraptor, mettre seulement les sources et construire répertoire, mesurer à nouveau. Si cela peut vous aider, considérez un RAID 0.
J'ai entendu dire que la mise à niveau à partir d'un XP de base à un W2K3 de base amélioré les temps de construire notamment, sans doute grâce à une meilleure gestion de la mémoire et de la mise en cache.
Comme une suggestion pour la modification de votre code, vous pouvez déplacer des fonctionnalités à une DLL, et de lien en parallèle. Mais je ne vais pas faire un tel changement juste pour améliorer les temps de construire.
OriginalL'auteur peterchen
Il y a quelques paramètres généraux des suggestions sur L'amélioration de la liaison avec IncrediBuild
Vous pouvez également ignorer la liaison de bibliothèques statiques où vous n'aurez pas de les distribuer à l'aide de IncrediLink
Nous avons constaté que l'ajout d'une signature post étape de génération d'arrêt serait IncrediBuild de travailler sur les projets suivants, en ajoutant un commentaire à générer post était censé aider à
Voir IncrediBuild_AllowOverlap doc
OriginalL'auteur Greg Domjan