Dica: Otimizando seus programas (Compilação - básico)
>>> 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.





















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
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
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
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