2010-05-26 2 views
4

J'ai commencé à tester notre logiciel C++ avec VS2010 et les temps de construction sont vraiment mauvais (30-45 minutes, soit environ le double du VS2005). J'ai lu sur le commutateur/MP pour la compilation multi-processus. Malheureusement, il est incompatible avec certaines fonctionnalités que nous utilisons un peu comme # import, la compilation incrémentale et les en-têtes précompilés.Constructions multi-processus dans Visual Studio 2010: ça vaut le coup?

Avez-vous eu un projet similaire dans lequel vous avez essayé le commutateur/MP après avoir désactivé des éléments tels que les en-têtes précompilés? Avez-vous obtenu des builds plus rapides?

Mon ordinateur exécute Windows 7 64 bits sur une machine 4 core avec 4 Go de RAM et un stockage SSD rapide. Virus antivirus désactivé et un environnement logiciel assez minimal.

Editer: Martin et Jdehaan ont souligné que MP n'est pas incompatible avec les en-têtes précompilés. Les détails sont here.

+2

Je n'ai jamais eu d'en-têtes précompilés fonctionnant, mais l'utilisation de/MP a donné une accélération d'environ 5 fois sur un Core i7 (quad-core avec hyperthreading). –

+0

Utilisez-vous des en-têtes précompilés? Vos bibliothèques changent-elles entre les versions? Reconstruisez-vous quelque chose plus souvent que nécessaire? – Guy

Répondre

2

Définitivement OUI. J'ai travaillé sur une grande application qui a pris environ 35 minutes à construire quand quelque chose a été modifié (In Visual Studio). Nous avons utilisé IncrediBuild pour cela (pour accélérer le processus de compilation, de 35 minutes à 5 minutes) - pour être vraiment distribué. Dans votre cas, il est possible que le commutateur/MP fera une différence - mais pas tellement par rapport à distcc (environnement unix ou compatible) ou IncrediBuild.

+0

35 minutes avec IncrediBuild? est-ce que les constructions ont pris sans? – criddell

+0

35 minutes sans IncrediBuild. Avec incredibuild (avec 15-20 ordinateurs utilisés) cela a pris environ 5-6 minutes (ce qui est 7 fois plus rapide). J'ai édité la réponse pour être plus clair. – INS

3

Etes-vous sûr que pch est incompatible avec/MP?
Vous pouvez certainement faire un multi-core construire sur VS2008 avec pch (même si curieusement que depuis l'EDI pas sur la ligne de commande)

+1

Vous avez raison, le pch ne devrait faire aucun problème. Il est créé dans une première étape non MP et utilisé en lecture seule pendant toute la construction pour chaque unité de compilation. – jdehaan

+0

Merci d'avoir précisé cela. J'ai encore lu http://msdn.microsoft.com/en-us/library/bb385193.aspx et j'ai remarqué cette fois que MP est incompatible avec la création du pch, pas avec son utilisation. Martin et Jdehaan ont donc tout à fait raison. – criddell

1

multi-machines construit (avec IncrediBuild) en valaient la peine pour nous. Ainsi, une construction multi-processus sur une seule machine en vaut probablement la peine.

2

Ma propre expérience est avec VS2005 et VS2008. Dans les deux cas, nous désactivons les constructions parallèles car cela ne fonctionne pas de manière fiable pour nos grands projets. Aussi avec les deux, activer PCH donne de grands avantages de performance. Bien que si vous n'utilisez pas PCH avec VS2008, vous pouvez vraiment mal compiler les temps par rapport à VS2005. Je ne sais pas combien cela est pertinent pour VS2010 cependant. J'ai eu les mêmes problèmes avec VS2010 ... mais nous avons ensuite mis à jour de WinXP à Win7 et tous nos problèmes de Visual Studio ont disparu, en ce qui concerne à la fois la stabilité et la performance. Dans ma précédente réponse, les constructions parallèles se réfèrent au parallélisme du projet msbuild, et "grand" dans ce cas se réfère plutôt à des solutions de grande taille.

+0

Chris, pourriez-vous élaborer sur votre réponse? Nous examinons le commutateur '/ MP', et nous essayons de savoir si cela affecte la stabilité de Visual C++ lors de la construction. Vous écrivez: "nous désactivons les constructions parallèles" - Voulez-vous dire [* projet * parallélisme] (http://blogs.msdn.com/b/visualstudio/archive/2010/03/08/tuning-c-build- parallelism-in-vs2010.aspx) ou voulez-vous dire en fait * parallélisme compilateur * comme spécifié par le drapeau '/ MP'? –

+0

Et quand vous dites "ne travaillez pas ...grands projets ", voulez-vous dire" grand "dans le sens où vous avez une solution avec de nombreux projets, ou voulez-vous dire" grand "dans le sens où votre unique projet vcproj contient un grand nombre de fichiers cpp? –

+0

@ MartinBa: J'ai édité ma réponse, j'espère que cela aidera avec vos questions –

Questions connexes