Responder 
 
Avaliação do Tópico:
  • 0 Votos - 0 Média
  • 1
  • 2
  • 3
  • 4
  • 5
GCC e a arquitetura do processador!
07/01/2011, 16:04
Resposta: #1
GCC e a arquitetura do processador!
Então pessoal, estou com uma pergunta simples mas que até agora ninguém soube me responder, vou tentar explicar da melhor forma possível antes de fazer a pergunta!

Estou compilando o kernel 2.6.34 e o 2.6.36 para o Debian 64bits! Tenho um processador Core i7860, ao entrar no menuconfig, na parte da família do processador, ao marcar a opção Core2/Xeon, eu tenho um kernel/sistema mais lento do que se eu marcar a opção Pentium 4! O sistema é bem mais rápido se eu marcar Pentium 4! Não importa a versão do GCC que eu use, seja 4.4 ou 4.5!

Então agora a pergunta, porque a compilação para Pentium 4 possui maior desempenho do que se eu utilizar a família correta do meu processador (Core2/Xeon) de acordo com a documentação do GCC?

A explicação mais lógica que consegui até o momento foi de um canadense do forum cprogramming:

Citar:mtune=... does NOT affect the instruction sets used, or machines the executable is run on.

For that (eg, enabling SSE), you'll need march=....

If you do march=core2 for example (on a new GCC), it will use all the instruction sets available to Core 2 CPUs. march=x also sets mtune=x. The executable won't run on older CPUs.

If you ONLY use mtune=core2, it will generate code that runs the best on a Core 2, but will still only use instructions available to all x86 CPUs (eg, no SSE), hence it will still run on old CPUs, just a little slower.

As a real world example, I think a few years ago some Linux distribution decides to use -march=pentium3 -mtune=pentium4, or something like that. That means, the code is guaranteed to run on a P3, but optimized for a P4, since they predict most people will be running for a P4.

If you don't use any flag, GCC will assume -march=i386 (lowest x86).

If you want GCC to use all instruction sets on your CPU, and optimize for your CPU (because, for example, the code will only be run on your machine), you can do -march=native (which also sets mtune=native). Only available in newer GCC (it was introduced in 4.3 or 4.4 I THINK).

-m32 and -m64 are only for generating 32-bit code on a 64-bit machine, or generating 64-bit code on a 32-bit machine, respectively. GCC defaults to 32-bit on 32-bit, and 64-bit on 64-bit

Ou seja, segundo a explicação do cara, não importa usar o mtune e sim o march!

Então quer dizer que a opção do menuconfig só ativa o mtune e não o march para o GCC?

Alguém saberia me responder isso?
Encontrar todas as respostas deste usuário
Citar esta mensagem em uma resposta
Responder 


Ir ao Fórum:


Usuários visualizando este tópico: 1 Visitantes

Entre em Contato | Fórum Debian | Voltar ao Topo | Voltar ao Conteúdo | Modo Leve (Arquivo) | Feeds RSS