O que ' é tão especial sobre x64 x x86? [fechado]

Fechado . Esta pergunta precisa de detalhes ou clareza . Atualmente não está aceitando respostas.

Comentários

  • Duplicado de stackoverflow.com/questions/607322/… , que infelizmente posso ' sinalizar porque ' está em SO, não em programadores.
  • @Matthew Read: Itanium falhou espetacularmente no mercado porque o ISA era notoriamente difícil de escrever compiladores. O mercado de HPC já havia desistido muito antes de a AMD lançar suas extensões.
  • @Mathew, você poderia dizer isso sobre a Intel! Se não fosse ' t para compatibilidade com versões anteriores, estaríamos trabalhando em CPUs com conjuntos de instruções lógicas e ordem de bytes de rede
  • @Matthew: Você já olhou para o Itanium conjunto de instruções? Que pesadelo! Mover o agendamento de instruções para o compilador foi uma má ideia. Se você deseja um bom modelo de 64 bits, procure DEC ' s Alpha.
  • @Mathew, não subestime a importância de uma plataforma ser compatível com versões anteriores.

Resposta

A única diferença real que você “notaria ao usar um HLL será o tamanho do código, e descobrir que alguns recursos / bibliotecas ainda não estão disponíveis para x64. Ah, e o código x64 tende a ter menos desempenho, pelo menos no .NET. O aplicativo em que estou trabalhando roda cerca de 20% mais rápido quando compilo para x86. Não sei se é porque uso mais largura de banda de barramento movendo quantidades de 8 bytes ou se há alguma “fragmentação” acontecendo para adaptar APIs de 32 bits para 64 bits.

Comentários

  • Não tanto a largura de banda do barramento dos movimentos, mas o fato de que se você lidar com quantidades de 64 bits em comparação com 32 bits, você ' reduziu efetivamente o tamanho do cache pela metade.
  • @Brian: Excelente ponto, eu não ' pensei nisso.
  • Particularmente com .NET com muitas referências, onde tudo é um ponteiro (referência).

Resposta

No nível que você está falando (.NET), há muito pouca diferença. Quando você está usando código totalmente gerenciado, o JIT compilará automaticamente seu código e funcionará da mesma forma, com características de desempenho diferentes. Para algumas coisas será mais rápido (processar muitos dados, os dados podem ser processados em blocos de 64 bits, mais registros disponíveis etc), e para outros mais lento (dados de 64 bits (ou seja, ponteiros) é mais lento para carregar no cache para iniciantes , o que significa mais dados e transferências mais lentas da memória principal).

Você realmente só precisa se preocupar com a diferença ao usar código não gerenciado. Este blog apresenta uma boa lista dos problemas.

Comentários

  • Você não ' tem dados de 64 bits, a menos que você os especifique. Os ponteiros são promovidos para 64 bits, mas ints e floats permanecem os mesmos. Quase todos os sistemas de 32 bits suportam 64 bits float (double), e muitos suportam 64 bits int (long long). 64bit também abre novos recursos, incluindo mais registros visíveis ao usuário.
  • @Omega, Ponteiros são dados. Eles devem ser movidos para o cache para serem usados. A execução em 64 bits significa que cada referência ou anulação de referência pode potencialmente mover um ou mais desses para o cache e também expande cada objeto que contém referências. Mas você está correto ao dizer que as metades da declaração estão incorretas. Eu vou mudar isso. Obrigado.
  • Na minha experiência, os ponteiros não são ' muito comuns. Mas eu não ' não faço OOP e tive uma experiência inicial muito dolorosa com indicadores ruins, então só os uso quando absolutamente necessário. Portanto, os ponteiros IMO não ' não ocupam muito espaço de endereço. Os compiladores modernos OTOH geram muitos desdobramentos de loop, peeling de loop e código de caso especial, de modo que o tamanho do código pode se tornar muito grande.
  • @Omega, toda vez que você faz referência a uma instância de objeto complexo em uma linguagem gerenciada um ponteiro sob o capô.

Resposta

Os programas .Net que serão escritos para sistemas de 64 bits terão maior espaço de endereço e, portanto, será muito mais rápido do que os programas baseados em x86-32 bits. Também os compiladores de linguagem .NET mais recentes produzem muito código otimizado. O JIT também foi aprimorado nos últimos anos e agora você pode fazer a otimização JIT Multi-core. Os depuradores também foram aprimorados. Enquanto isso, código melhor e otimizado é produzido para sistemas baseados em 64 bits.

Comentários

  • Na verdade, não.Como o principal comentário mencionado há mais de um ano, x86-64 tem um conjunto de registros muito melhor e não pode ser considerado uma " extensão ". Em seguida, o espaço de endereço não ' torna os programas mais rápidos. Em seguida, sua participação no mercado. 64 bits é o líder atualmente, 32 bits a minoria (inventário Steam, agosto de 2012).
  • Isso ( en.wikipedia.org/wiki/X86-64 ) diz que o X86-64 é uma extensão do x86. Pode ser que o espaço de endereço não afete a execução direta dos programas, mas pode afetar a memória, o que tornará a execução do programa lenta. No desenvolvimento de sistemas de 64 bits, você pode ter poucos empregos a mais, mas não uma grande figura. Para o mercado de trabalho, não ' veja apenas os países avançados, mas leve os países do terceiro mundo para os países também. Para uma boa referência, consulte: arstechnica.com/features/2008/09/x86-64 .
  • Você ' re citando um artigo de 4 anos. Praticamente não há processadores x86 de 32 bits produzidos hoje, em 2012, e isso inclui a CPU de baixo custo ' s voltada para países do terceiro mundo.
  • Em Os países do terceiro mundo, que representam uma grande proporção da população mundial, usam esses sistemas regularmente. Mesmo que novos sistemas venham, mas a taxa de compra não é boa em comparação com os sistemas móveis.
  • @Badar duvidoso. Vejo processadores de 64 bits para computadores de baixo e médio alcance aqui na América Latina. Eu tendo a concordar que as CPUs de 32 bits acabaram, pelo menos para desktops e laptops de médio porte.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *