Pergunta

Eu não tenho certeza se entendi corretamente: faz um código de 64 bits do sistema operacional run / compilação mais rápido do que um sistema operacional de 32 bits no mesmo sistema

Estamos usando 64 bit OSs onde estou e parece apenas problemas de compatibilidade de causa com o legado e software proprietário. (Nós estamos correndo Ubuntu 9.04 Jaunty amd64)

Foi útil?

Solução

Vou restringir essa resposta para x86-32 (IA-32) vs x86-64 (AMD64), como eu acredito que essa é a pergunta que você está realmente pedindo.

Ao nível do processador, existem algumas vantagens. Primeira e mais óbvia é a expansão da memória virtual por processo a uma gama muito maior de 48 bits. (64 é permitida na arquitetura mas não é obrigatório, se a memória serve.) Isso permite que os aplicativos usar muito mais de memória do sistema disponível para eles, bem como a abertura de um monte de espaço para coisas como arquivos de memória mapeada que operam em memória virtual que não está ligada à memória real. Também abre um monte de espaço para o sistema operacional em questão para o trabalho, uma vez que não tem que compartilhar seu limite de 4 GB para seus dados. Em suma, as aplicações e o sistema operacional pode fazer melhor uso dos recursos da máquina.

Além disso, os endereços arquitetura AMD64 um dos maiores problemas de IA-32, que é a total falta de registros. Na verdade, duplica os registros disponíveis, o que é uma grande vitória para alguns tipos de código. (Na verdade, é uma vitória para quase todo o código, mas alguns aplicativos sofrem com o aumento do custo de memória de 64 bits e se equilibra.)

No lado do Windows, MS tomou isso como uma oportunidade para quebrar um monte de problemas de Compatibilidade históricos. Não é uma ruptura do velho mundo, mas é um começo. Eu não acredito que sofre Linux dos mesmos problemas para começar, e eu não tenho muita perspectiva para oferecer em suas vantagens de 64 bits.

Outras dicas

Como regra geral, o desenvolvimento - ou utilizar - um sistema operacional de 64 bits, em qualquer contexto, será mais lento do que o mesmo sistema operacional de 32 bits. Porque todos os ponteiros são de repente duas vezes tão grande, você é muito mais propensos a soprar o cache, e pode caber menos dados na memória RAM. Isso retarda o seu aplicativo consideravelmente. Você normalmente só iria usar sistemas de 64 bits quando seus aplicativos precisam endereçar mais de 2 a 3 GB de dados simultaneamente - algo muito comum em computação científica e algumas situações de banco de dados, mas de outra maneira extremamente raros. É por isso que a Apple não defende incondicionalmente compilar aplicações PowerPC no modo de 64 bits, por exemplo: o custo devido ao cache de-acidentes e falta de memória são altos o suficiente para que vai de 64 bits só faz sentido quando você realmente pode tirar vantagem do 64-bit espaço.

Mas x86 v. AMD64, que é o que você está realmente perguntando sobre (uma vez que você está discutindo Ubuntu), é um animal muito especial. AMD64 não só se estende todos os ponteiros para 64-bit; ele corrige muitas, muitas deficiências na arquitetura x86, dobrando o número de GPRS, simplificando as instruções para ser mais amigável para projetos modernos de CPU, e muito mais. Devido a isso, somente em plataformas AMD64 , você freqüentemente ver um aumento de desempenho substancial, indo para 64 bits.

Há uma outra área onde, no desenvolvimento de software, faz sentido para ir para 64 bits: você precisa executar lotes de VMs. Executando um par de VMs pode facilmente acabar com você após o GB barreira 3 de memória do sistema operacional, tornando a usá-los muito doloroso. (Ele vai trabalhar devido a uma tecnologia chamada PAE, ou paginada Addressing Extensions, que a Intel inventou para preencher a lacuna entre os sistemas de 32 bits e sistemas de 64 bits, mas o resultado é lenta e dolorosa para trabalhar com como um desenvolvedor, e não muito bem suportado no Windows.) Ir a um 64-bit OS pode fornecer benefícios tremendos.

(Como os comentaristas notar, esta resposta é um pouco genérico, alguns desses pontos não se aplicam a Intel / AMD fichas.)

A resposta é: isso varia, por alguns motivos:

  • Com instruções maiores de largura, você está indo para obter mais expressividade (quer uma maior variedade de instruções ou uma capacidade maior para codificar dados para essas instruções diretamente), o que pode significar um número reduzido de instruções que flui através a máquina, que é geralmente uma vitória:. modo ++ de 64 bits aqui

  • Mas instruções às vezes maiores pode ter mais ciclos para decodificar e executar, porque eles podem ser mais complexa. Assim, uma possível --64bit aqui.

  • Além disso, você precisa transferir estas instruções para e da CPU: instruções de 64 bits são duas vezes maiores que 32 instruções bit, o que significa mais tráfego de e para a memória e os caches. CPUs são estruturados para melhorar um monte de este custo, mas é uma ligeira --64bit aqui.

  • Mais registros são geralmente disponíveis em conjuntos de instruções mais amplas, o que causa menos tráfego de dados de e para a pilha e ou memória. Então ++ de 64 bits aqui.

  • E, como todo mundo é, sem dúvida, vai mencionar, você tem a capacidade de endereço mais memória.

  • (Quase esqueceu este) o nativo "longo" ou tamanho "int" pode subir, dependendo da arquitetura, ou seja, estruturas de dados com base nesses ficam maiores. Maior = mais memória para se movimentar, o que significa mais possível de espera em dados em movimento: --64bit se você não tiver cuidado

  • .

Dependendo da sua arquitetura, um monte de outras preocupações podem ser aplicadas também. Você pode estar certo de que os fornecedores de processador e do compilador estão trabalhando seus butts para reduzir as "-". S acima e aumentar o "++" s

Eu tenho essa base de dados 5GByte que precisa converter. Em um sistema de 64 bits, eu só colocar todos os dados em coleções. No sistema de 32 bits, eu tinha que pensar sobre a ordem em que para carregar e converter. O problema não está em tempo de execução, é engenharia tempo. A mudança para 64 bits economiza semanas de tempo de desenvolvimento.

Os problemas de compatibilidade: isso não é erro, que é uma característica. Ele mostra que tem escrito software limpo.

Existem também algumas vantagens de segurança para o uso de sistemas operativos de 64 bits. Houve alguns buffer overflow exploits que endereço contornar Space Layout Randomization pela força bruta. Em um SO de 64 bits, há simplesmente demasiado muitos endereços para este tipo de ataque seja bem sucedido.

Ele irá acelerar a compilação se seu processo de compilação é ligado à memória e você usar o seu sistema operacional de 64 bits para aumentar a quantidade de utilizável memória pelo seu sistema.

Eu esperava que fosse um pouco mais lento, eu tive essa experiência com FC10. Eu não tenho motivos reais, mas definitivamente não é o sizeof (ponteiro) questão. (*)

O meu palpite é que ele simplesmente é uma questão dos motoristas menos otimizadas ou chipsets alterados.

Além disso NTFS-3G foi engraçada sob 64 bits, enquanto ele trabalhou sob 32-bit (mesma distro, mesmo kernel mesma partição, apenas "pendurado" em algumas circunstâncias)

(*) mais compilação é rígido limite, não vinculado à CPU. Além disso, existem outras melhorias na arquitetura x86_64 que anulam esse fato (melhor PIC, mais regs, SSE2 padrão em, 686 CMOV padrão em). A menos que seu aplicativo não faz nada do que movendo-se aleatoriamente pequenos blocos ao redor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top