57 votes

Quand devrais-je utiliser l'option -pipe de GCC?

La GCC 4.1.2 documentation a ceci à dire à propos de l' -pipe option:

-pipe

Utiliser des tubes plutôt que des fichiers temporaires pour la communication entre les différentes étapes de la compilation. Cela ne fonctionne pas sur certains systèmes où l'assembleur est impossible de lire à partir d'un tuyau; mais l'assembleur GNU n'a pas de mal.

Je suppose que je serais en mesure de dire à partir de message d'erreur si mes systèmes assembleurs ne prend pas en charge les tuyaux, donc en dehors de la question, quand est-ce grave si j'utilise cette option? Quels sont les facteurs qui devraient aller de décider de les utiliser?

38voto

DigitalRoss Points 80400

Il n'a pas l'habitude de faire toute la différence

Je suppose que, dans les vieux jours, exécutant à la fois d'un compilateur et d'un assembleur en même temps peut avoir commencé la pagination et peut s'enlisent ou interactive de la performance terrible.

Ces jours-ci, j'imagine gcc ressemble à une assez petite application, jamais l'esprit l'assembleur, et nous avons certainement beaucoup de RAM, donc c'est sans danger et peut courir un peu plus vite.

Mais du même coup, le CPU est tellement rapide qu'il peut créer le fichier temporaire et de le lire sans que vous vous en aperceviez...

Maintenant, il y a quelques grands projets en cours. Vous pouvez consulter d'un seul arbre qui va construire l'ensemble de Firefox, ou NetBSD, ou quelque chose comme ça, quelque chose qui est vraiment grand. Quelque chose qui comprend tous X, disons, comme un mineur sous-système de composant. Vous peut ou peut ne pas remarquer une différence lorsque le travail implique des millions de lignes de code dans des milliers et des milliers de C fichiers. Je suis sûr que vous le savez, les gens travaillent habituellement seulement sur une petite partie de quelque chose comme cela à la fois. Mais si vous êtes un communiqué de l'ingénieur ou le travail sur un serveur de build, ou de changer quelque chose dans stdio.h, vous pouvez bien voulez construire l'ensemble du système pour voir si vous avez cassé quelque chose. Et maintenant, chaque goutte de performance probablement compte...

37voto

Josh Kelley Points 24438

D'après notre expérience avec un projet de taille moyenne, l'ajout de -pipe n'a pas permis de discerner les temps de construction. Nous avons rencontré quelques problèmes avec celui-ci (échouant parfois la suppression des fichiers intermédiaires en cas d'erreur, IIRC), et comme cela ne nous rapportait rien, nous avons cessé de l'utiliser plutôt que d'essayer de résoudre ces problèmes.

27voto

peter karasev Points 1136

Essayez ceci maintenant, il semble être modérément plus rapide à construire lorsque la source / construire des destinations sur NFS (linux réseau). L'utilisation de la mémoire est élevée bien. Si vous ne remplissez jamais la RAM et de la source sur NFS, apparaît comme une victoire avec -pipe.

10voto

Jeff Mc Points 1741

Honnêtement, il y a très peu de raison de ne pas l'utiliser. -tuyau d'utiliser seulement un peu plus de ram, qui, si cette case est le code du bâtiment, je suppose que a une quantité décente. Il peut améliorer de façon significative le temps de construction si votre système est à l'aide d'un plus conservatrice de système de fichiers qui écrit et supprime tous les fichiers temporaires le long de la voie (ext3, par exemple.)

5voto

Sven Points 21

Un avantage est que avec -pipe le compilateur interagissent moins avec un système de fichiers. Même quand c'est un disque ram les données doivent encore passer par le bloc d'e/S du système de fichiers et les couches lors de l'utilisation de fichiers temporaires alors qu'avec un tuyau, elle devient un peu plus direct.

Avec les fichiers ne le compilateur a besoin d'abord de terminer l'écriture avant d'appeler l'assembleur. Un autre avantage des tuyaux est que les deux, le compilateur et l'assembleur, peuvent s'exécuter en même temps et c'est en faisant un peu plus d'utiliser des architectures SMP. Surtout quand le compilateur a besoin d'attendre que les données à partir du fichier source (en raison du blocage des appels d'e/S) peut le système d'exploitation de donner l'assembleur plein temps CPU et de la laisser faire son travail plus rapidement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X