Manual do Linux

Maio 12, 2007

Dica: Otimizando seus programas (Compilação - básico)

Arquivado em: Tutoriais/Dicas — Dr. Hank @ 7:21 pm

>>> Introdução

Nínguem pode negar que os nossos queridos pacotes deb, rpm, tgz são uma mão na roda: extremamente práticos. Mas toda essa facilidade tem um preço.

Esses programas pré-compilados costumam ser gerais: são feitos para rodar em todos computadores, desde de 486 até os Core 2 Duo. Com isso perdemos desempenho, as coisas poderiam ser muito mais rápidas se o aplicativo fosse otimizado especialmente para o seu processador.

E é isso que vamos fazer: compilar o software exclusivamente para sua máquina e o desempenho ganho com isto é impressionante.

Muitos usuários não conhecem esse simples macete. As vezes por ter medo de compilar ou até mesmo por puro desconhecimento.

—————————————

>>> Compilando

Suponho que você saiba qual é o seu processador, mas em todo caso com o seguinte comando teremos o modelo do mesmo:

# cat /proc/cpuinfo

vendor_id : AuthenticAMD
cpu family : 15
model : 47
model name : AMD Athlon(tm) 64 Processor 3500+
stepping : 2
cpu MHz : 2211.364
cache size : 512 KB

No exemplo temos um Athlon 64. Bom vamos lá pegue o source (código fonte) do programa que você quiser compilar. Eles são facilmente encontrados na página do desenvolvedor.

Descompacte e entre na pasta:

$ tar -vxjpf pidgin-2.0.tar.bz2

$ cd pidgin-2.0

Agora sim iremos otimizar. Passaremos os seguintes comandos para o nosso arquivo configure, que por sua vez, irá trasmitir para os compiladores.

No Athlon 64 do exemplo usaremos os seguintes valores:

$ CHOST=”i686-pc-linux-gnu”
$ CFLAGS=”-march=k8 -O2 -pipe -fomit-frame-pointer”
$ CXXFLAGS=”${CFLAGS}”
$ export CFLAGS CXXFLAGS CHOST

Para descobrir quais são as variáveis do seu processador visite:
http://gentoo-wiki.com/Safe_Cflags

Vamos dar mais um exemplo. Se for um Pentium III as variáveis seriam:

$ CHOST=”i686-pc-linux-gnu”
$ CFLAGS=”-march=pentium3 -O2 -pipe -fomit-frame-pointer”
$ CXXFLAGS=”${CFLAGS}”
$ export CFLAGS CXXFLAGS CHOST

E assim por diante, é só procurar o seu processador na página que indiquei acima. Muito simples. =)

Pronto, aí é só compilar.

$ ./configure
$ make
# make install

O desempenho, como já disse anteriormente, é espetacular. Por exemplo, para realizar o ./configure sem a otimização levaram-se 9 segundos. Já usando o macete foi concluído em 4 segundos. =0

———–

>>> Considerações finais

Após descobrir essa manha eu raramente uso meu swaret ou apt-get. O ganho tanto na execução como na consumo de memória vale, e muito, a pena.

Ressaltando que um programa compilado para Athlon 64 não rodará em um
Pentium 4.

Finalizando, podemos conseguir ainda mais desempenho mudando a seguinte variável:

$ CFLAGS=”-march=k8 -O2 -pipe -fomit-frame-pointer”

Se colocarmos -O3 ficará mais rápido ainda. Mas isso pode causar instabilidade e alguns aplicativos não suportam o nível 3. Portanto use por sua conta e risco. ;)

>>> Observação final

Muita gente caiu em cima de mim e da página do Gentoo: “Como é que pode o Core 2 Duo usar a cflag prescott se ele não tem nada haver com essa arquitetura?”

Bom, essa cflag foi indicada pela própria Intel provisoriamente. O novo GCC 4 que está em fase de testes, deverá incluir uma nova flag exclusiva para o C2D.

4 Comentários »

  1. Boa tarde.
    Tenho um Linux 4.o Einstein, processador Pentium 4 , 256 MB (EL-1534Model P-2183.) Instalei todos os pacotes necessários para compilar. Desejo compilar o programa avidemux__2.4_preview2.tar.gz. Solicito por gentileza, se seria possível enviar-me o procedimento para compilá-lo. Lí o seu artigo acima sobre “dicas de compilação básica”. Tenho dúvida quando mencionou “descompacte e entre na pasta”( é fazer o download e salvar?).
    Desculpando-me por ser leigo nesta matéria, aguardo, por favor, um retôrno.
    Cordialmente,
    Mário M Randazzo.
    Ps. No comando cat/proc/cpuinfo - deu : máquina cat desconhecida.

    Comentário de Mário M Randazzo — Setembro 27, 2007 @ 1:00 pm

  2. Comr eferência ao meu e-mail anterior, relato que na descompactação do arquivo em questão fiz: tar-vzxf avidemux_2.4_preview2.tar.gz no terminal e relatou: Deve ser especiicada uma das opções “-Acdtrux”.
    Assim sendo, se possível, solicito orientação como proceder. Obrigado.
    Cordialmente,
    Mário M Randazzo.

    Comentário de Mário M Randazzo — Setembro 27, 2007 @ 6:28 pm

  3. Aqui um bom link sobre como compilar programas no Linux:

    http://brunotorres.net/compilar-programas

    Comentário de Dr. Hank — Outubro 2, 2007 @ 7:54 pm

  4. Mário M Randazzo
    “Tenho dúvida quando mencionou “descompacte e entre na pasta”( é fazer o download e salvar?).”

    Não, o que ele disse após voê ter salvado o programa em questão. Normalmente eles estão compactados, o que ele disse foi para descompacta-los e em seguida entrar na pasta descompactada

    Minha duvida é coo passar as informações para o configure

    No seu exemplo:
    $ CHOST=”i686-pc-linux-gnu”
    $ CFLAGS=”-march=k8 -O2 -pipe -fomit-frame-pointer”
    $ CXXFLAGS=”${CFLAGS}”
    $ export CFLAGS CXXFLAGS CHOST

    Eu entraria na pasta e simplesmente digitaria esses parametros no terminal, ou tenho que editar o arquivo configure?

    Comentário de rafa — Novembro 11, 2007 @ 3:10 pm

Alimentação RSS de comentários a este artigo. URI do TrackBack

Deixe um comentário

Blog no WordPress.com.