Diferenças de compilação reais entre as CPUs

0

Para um projeto, pretendo compilar vários sistemas operacionais * NIX e seus pacotes relativos com CPUs diferentes, a fim de maximizar a otimização e o desempenho de sistemas específicos. Para economizar tempo e dinheiro, eu gostaria de saber se realmente existe uma diferença entre compilar código com arquiteturas similares.

Por exemplo : Se eu compilar o Debian GNU / Linux + todos os pacotes dos repositórios padrão com um Intel Core i7-8700 e usar o sistema operacional em um sistema com um Intel Core i7-8650U, irá executar o mesmo que se eu compilasse tudo com o i7-8650U ou eu perderia algum desempenho? (Eu não me importo com a porcentagem, eu gostaria de saber, mesmo que fosse 1%)

Em poucas palavras, existe uma quantia maior do que zero ( 0 ) na compilação de código em diferentes modelos de CPU da mesma geração? Porque se esse não fosse o caso, eu pegaria apenas uma CPU de cada geração de cada fabricante e daria um dia para todos os outros modelos.

    
por user749317 20.09.2018 / 23:45

2 respostas

1

Se você realmente pretende maximizar as otimizações, estará usando otimizações específicas de destino, incluindo aquelas que dependem do tamanho do cache do processador. Isso significa que você quase certamente desejará uma compilação por processador, embora possa compilar o processador mais rápido disponível para qualquer um dos outros com as configurações -march e -mtune adequadas.

    
por 21.09.2018 / 00:50
1

Você parece estar confundindo dois problemas diferentes. A arquitetura na qual você compila o código não implica necessariamente em nada sobre o código que é gerado pelo compilador. Por exemplo, considere:

$ gcc -o hello hello.c

Para uma determinada versão de gcc , isso provavelmente gerará o mesmo código para uma determinada arquitetura de hardware, independentemente da CPU subjacente que você tenha.

Existem algumas exceções. Por exemplo, o sinalizador -march=native fará com que o compilador emita código que possa aproveitar os recursos da CPU da máquina local. Mas, mesmo assim, você pode especificar explicitamente um valor para march que difere da arquitetura de CPU da sua máquina e o compilador emitirá código que pode não ser executado em sua máquina.

    
por 20.09.2018 / 23:55