2 votes

De quelles (petites) façons puis-je modifier les options de compilation d'Octave pour l'améliorer sans le casser ?

Si le titre de cette question vous semble un peu vague, j'en suis désolé. Mais je n'étais pas sûr de savoir comment distiller ce que j'essaie de faire en une seule phrase.

Il y a quelques semaines, j'ai appris que je pouvais construire et installer des versions récentes d'Octave sur un système Ubuntu 12.04 en suivant les étapes ci-dessous.

  1. Installer les outils nécessaires pour compiler, lier et exécuter octave. Pour Ubuntu, les commandes ci-dessous ont fonctionné pour moi.

    sudo apt-get build-dep octave3.2
    sudo apt-get install build-essential gnuplot gtk2-engines-pixbuf
    sudo apt-get install libfontconfig-dev bison
  2. Ensuite, téléchargez le code source d'une version d'Octave à partir du site web Archives du projet Gnu pour Octave et décompressez l'archive dans un dossier de votre système.

  3. Utilisez les commandes ci-dessous pour construire, vérifier et installer octave.

     ./configure
     make
     make check
     sudo make install

Malheureusement, il s'avère que ce qui précède construit un Octave qui contient toutes les tables de symboles de débogage. Les fichiers objets à eux seuls sont énormes et occupent environ 1,7 Go.

L'actuelle Documentation Octave suggère

Pour compiler sans déboguer les symboles, essayez la commande
make CFLAGS=-O CXXFLAGS=-O LDFLAGS=
au lieu de make .

Cependant, lorsque j'ai essayé cela, cela a donné pas travail. Les -g était toujours utilisée pour les compilations. Pour le plaisir, j'ai essayé à la place ./configure CFLAGS=-O CXXFLAGS=-O et ceci a fait travail. (Au lieu de ~1.7GB, le résultat de la construction prend maintenant environ 253MB).

Mes questions sont les suivantes

  1. Est-ce vraiment la méthode correcte (recommandée ?) à utiliser pour compiler Octave sans symboles de débogage (c'est-à-dire sans -g ) ?
  2. Comment compiler Octave pour qu'il utilise x86_64 plutôt que x86 ?
    Note : Je suis pas demandant comment compiler Octave pour utiliser les entiers 64 bits (expérimentaux) pour les dimensions des tableaux. Je veux juste permettre au compilateur d'utiliser les registres supplémentaires et les tailles de mots disponibles lorsqu'une application fonctionne en mode 64 bits.
  3. Existe-t-il une liste (plus) complète des directives utilisées avec le Makefile Octave ?
    Je n'ai vu que make , make check y make install documenté. Mais apparemment make distclean est également autorisée. (Elle supprime les résultats de la compilation, ce qui permet de tout reconstruire).
    Je me demande ce qu'il y a d'autre de disponible.

À titre d'information, j'ai essayé d'utiliser
./configure CFLAGS="-O3 -mtune=core2 -m64" CXXFLAGS="-O3 -mtune=core2 -m64"
et, de manière surprenante, il a non seulement semblé se construire, mais il a également fonctionné et a passé le test de l'évaluation des risques de l'entreprise. make check des tests.

Mais bien sûr, ce n'est pas la même chose que de le dire réellement ". travaux ". Existe-t-il une méthode recommandée pour permettre à Octave de fonctionner en tant qu'application x86_64 ?

J'ai également essayé de regarder à l'intérieur de l'Octave Makefile pour voir si je pouvais déchiffrer les directives de ligne de commande qu'il accepte. Je n'ai rien trouvé. Je n'ai pas la moindre idée de la manière dont ce Makefile fait ce qu'il fait.

1voto

amrhassan Points 159

Cela dépend de votre version de gcc, de votre matériel, de votre distribution et de beaucoup d'autres choses. Généralement, le fournisseur de votre distribution Linux aurait fait ces recherches pour vous et utilisé ces options lors de la construction de votre paquetage. Les distributions, cependant, essaient de faire en sorte que les choses fonctionnent avec la plupart du matériel et des attentes des utilisateurs. Je trouve que la personnalisation la plus poussée, sans avoir à se donner trop de mal, c'est le Gentoo . Linux en partant de zéro ou en créant sa propre distribution représente beaucoup de travail. J'ai une installation Gentoo avec l'émulation 32 bits désactivée dans le noyau.

En Guide d'optimisation Gentoo il est préférable d'utiliser -O2 代わりに -O3

-O3 : Il s'agit du niveau d'optimisation le plus élevé possible, mais aussi le plus risqué. La compilation de votre code prendra plus de temps avec cette option, et en fait, elle ne devrait pas être utilisée sur l'ensemble du système avec gcc 4.x. Le comportement de gcc a changé de manière significative depuis la version 3.x. Dans la version 3.x, il a été démontré que -O3 conduisait à des temps d'exécution marginalement plus rapides que -O2, mais ce n'est plus le cas avec gcc 4.x. Compiler tous vos paquets avec -O3 résultera en des binaires plus volumineux qui nécessiteront plus de mémoire, et augmentera de manière significative les chances d'échec de la compilation ou de comportement inattendu du programme (y compris les erreurs). Les inconvénients l'emportent sur les avantages ; rappelez-vous le principe des rendements décroissants. L'utilisation de -O3 n'est pas recommandée pour gcc 4.x.

-mtune=core2 est acceptable si vous êtes sûr que c'est le meilleur choix pour votre processeur. Personnellement, j'aime bien -march=native au lieu de cela. Voir aussi Gentoo Safe CFlags

GCC 4.2 introduit une nouvelle option -march, -march=native, qui détecte automatiquement les fonctionnalités prises en charge par votre processeur et définit les options en conséquence. Si vous avez un processeur Intel ou AMD et que vous utilisez >=sys-devel/gcc-4.2.3, il est recommandé d'utiliser -march=native.

-m64 est une option du processeur et devrait être automatiquement définie par -mtune=core2 o -march=native . Voir Options GCC i386 et x86-64 .

Avis de non-responsabilité : Il n'est pas nécessaire de passer à Gentoo pour bénéficier de leurs conseils en matière de compilation à partir des sources.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X