Em que (pequenas) formas posso modificar as opções de compilação do Octave para melhorá-lo sem quebrá-lo?

2

Se o título desta pergunta parece um pouco vago, sinto muito. Mas eu não sabia como destilar o que estou tentando fazer em uma única frase.

Algumas semanas atrás eu aprendi que poderia construir e instalar versões recentes do Octave em um sistema Ubuntu 12.04 seguindo os passos abaixo.

  1. Instale as ferramentas necessárias para compilar, vincular e executar oitava. Para o Ubuntu, os comandos abaixo funcionaram para mim.

    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. Em seguida, faça o download do código-fonte de uma versão do Octave do Arquivos do Projecto do Gnu para a Octave e descompacte o arquivo em uma pasta no seu sistema.

  3. Use os comandos abaixo para construir, verificar e instalar oitava.

     ./configure
     make
     make check
     sudo make install
    

Infelizmente, verifica-se que o acima cria um Octave que contém todas as tabelas de símbolos de depuração. Apenas os arquivos objeto são enormes, ocupando cerca de 1,7 GB.

A documentação atual Octave sugere

To compile without debugging symbols try the command
make CFLAGS=-O CXXFLAGS=-O LDFLAGS=
instead of just make.

No entanto, quando tentei isso, não funcionou. A opção -g ainda era usada para as compilações. Para o inferno, eu tentei ./configure CFLAGS=-O CXXFLAGS=-O e este fez funcionar. (Em vez de ~ 1.7GB, o resultado da compilação agora ocupa cerca de 253MB).

Minhas perguntas são

  1. Este é realmente o método correto (recomendado?) para usar para compilar o Octave sem depurar símbolos (ou seja, sem -g )?
  2. Como eu compilaria o Octave para usar x86_64 em vez de x86?
    Nota: Eu não estou perguntando como compilar o Octave para usar os números inteiros (experimentais) de 64 bits para as dimensões da matriz. Eu só quero permitir que o compilador use os registros extras e tamanhos de palavras disponíveis quando um aplicativo é executado no modo de 64 bits.
  3. Uma lista (mais) completa está disponível para as diretivas usadas com o Octave Makefile?
    Eu só vi make , make check e make install documentados. Mas aparentemente make distclean também é permitido. (Ele remove os resultados da compilação para que você possa fazer uma reconstrução completa de tudo.)
    Eu estou querendo saber o que mais pode estar disponível.

FWIW, tentei usar o ./configure CFLAGS="-O3 -mtune=core2 -m64" CXXFLAGS="-O3 -mtune=core2 -m64"
e, surpreendentemente, não só apareceu para construir, mas também correu e passou os testes make check .

Mas é claro que não é a mesma coisa que dizer " funciona ". Existe uma maneira recomendada de permitir que o Octave seja executado como um aplicativo x86_64?

Eu também tentei olhar dentro do Octave Makefile para ver se eu poderia decifrar quais diretivas de linha de comando ele aceita. Eu cheguei a lugar nenhum. Eu não tenho uma única pista de como esse Makefile faz o que quer que seja.

    
por irrational John 11.04.2012 / 00:11

1 resposta

1

Depende da sua versão do gcc, do seu hardware, da sua distribuição e de muitas outras coisas. Normalmente, seu provedor de distribuição Linux faria essa pesquisa para você e usaria essas opções ao criar seu pacote. As distribuições, no entanto, tentam fazer as coisas funcionarem com a maioria das expectativas de hardware e usuários. Eu acho mais personalizável sem ter que me preocupar muito com o Gentoo . Linux do zero ou rolando sua própria distribuição é muito trabalho. Eu tenho uma instalação do Gentoo com emulação de 32 bits desativada no kernel.

De Guia de Otimização do Gentoo , é melhor usar -O2 em vez de -O3

-O3: This is the highest level of optimization possible, and also the riskiest. It will take a longer time to compile your code with this option, and in fact it should not be used system-wide with gcc 4.x. The behavior of gcc has changed significantly since version 3.x. In 3.x, -O3 has been shown to lead to marginally faster execution times over -O2, but this is no longer the case with gcc 4.x. Compiling all your packages with -O3 will result in larger binaries that require more memory, and will significantly increase the odds of compilation failure or unexpected program behavior (including errors). The downsides outweigh the benefits; remember the principle of diminishing returns. Using -O3 is not recommended for gcc 4.x.

-mtune=core2 está ok se tiver certeza de que essa é a melhor opção para seu processador. Eu pessoalmente gosto de -march=native . Veja CFags seguras do Gentoo

GCC 4.2 introduces a new -march option, -march=native, which automatically detects the features your CPU supports and sets the options appropriately. If you have an Intel or AMD CPU and are using >=sys-devel/gcc-4.2.3, using -march=native is recommended.

-m64 é uma opção do processador e deve ser definida automaticamente por -mtune=core2 ou -march=native . Consulte Opções do GCC i386 e x86-64 .

Aviso: Você não precisa mudar para o Gentoo para usar os conselhos deles para compilar a partir da fonte.

    
por 28.12.2012 / 20:05