Pergunta

O que devemos esperar do suporte de ponto flutuante no compilador Delphi de 64 bits?

  • O compilador de 64 bits usará SSE para implementar a aritmética do ponto flutuante?

  • O compilador de 64 bits suportará o atual tipo flutuante de 80 bits (estendido)?

Essas questões estão intimamente relacionadas, então eu as faço como uma única pergunta.

Foi útil?

Solução

Para o bit duplo=estendido:

Leia a conta do Twitter de ALlen Bauer, Kylix_rd:

http://twitter.com/kylix_rd

Em retrospectiva, é lógico, porque embora os registros SSE2 sejam de 128 bits, eles são usados ​​como dois duplos de 64 bits.

Outras dicas

Eu fiz duas postagens sobre o assunto (aqui e ), para resumir, sim, o compilador de 64 bits usa SSE2 (precisão dupla), mas não usa SSE (precisão única). Tudo é convertido em flutuadores de precisão dupla e calculado usando SSE2 (editar: No entanto, há uma opção para controlar isso)

Isso significa que, se a matemática em flutuadores de dupla precisão é rápida, a matemática em precisão única é lenta (muitas conversões redundantes entre precisões únicas e duplas são lançadas), "estendido" é alias para "duplo", e os cálculos intermediários precisão são limitados para dobrar a precisão.

Editar: Havia uma diretiva indocumentada (na época) que controla a geração de código SSE, {$ Excessprecision Off} Ativa a geração de código SSE, que traz de volta o desempenho nas expectativas.

De acordo com Marco Van de Voort, em sua resposta para: Como devo preparar meus programas Delphi de 32 bits para um eventual compilador de 64 bits:

O X87 FPU é descontinuado no X64 e, em geral, o SSE2 será usado para o ponto de floração. Portanto, o ponto flutuante e seu manuseio de exceção podem funcionar de maneira um pouco diferente, e estendido pode não ser de 80 bits (mas de 64 bits ou, menos provável de 128 bits). Isso também se refere ao arredondamento usual (copro Controlwork) muda ao interface o código C que espera uma palavra diferente da FPU.

Phis comentou sobre essa resposta com:

Eu não diria que o X87 FPU está preterido, mas certamente é o caso de a Microsoft decidir fazer o possível para fazer assim (e eles realmente não parecem gostar de valores de FP de 80 bits), embora isso é claramente tecnicamente possível usar os carros alegóricos FPU/80 bits no Win64.

Acabei de postar uma resposta para sua outra pergunta, mas acho que deveria ir aqui:

Obviamente, ninguém, exceto a Embarcadero, pode responder isso com certeza antes do lançamento do produto.

É muito provável que qualquer compilador x64 decente use o conjunto de instruções SSE2 como linha de base e, portanto, tente fazer o máximo possível de computação de ponto flutuante usando recursos SSE, minimizando o uso da FPU x87.No entanto, também deve ser dito que não há nenhuma razão técnica que impeça o uso do FPU x87 no código de aplicação x64 (apesar dos rumores em contrário que já existem há algum tempo;se você quiser mais informações sobre esse ponto, dê uma olhada em Manual de Convenção de Chamadas de Agner Fog, especificamente capítulo 6.1 "Os registros de ponto flutuante podem ser usados ​​no Windows de 64 bits?").

Editar 1:O Delphi XE2 Win64 de fato não suporta cálculos de ponto flutuante de 80 bits prontos para uso (veja, por exemplo,discussão aqui (embora permita ler/escrever tais valores).É possível trazer esses recursos de volta ao Delphi Win64 usando operadores de registro + classe, como é feito em este tipo TExtendedX87 (embora se apliquem ressalvas).

Não saberemos ao certo como o compilador Delphi de 64 bits implementará a aritmética do ponto flutuante até que o Embarcadero realmente o envie. Qualquer coisa anterior a isso é apenas especulação. Mas uma vez que sabemos com certeza, será tarde demais para fazer qualquer coisa a respeito.

Os tweets de Allen Bauer parecem indicar que eles usarão SSE2 e que o tipo estendido pode ser reduzido para 64 bits em vez de 80 bits. Eu acho que seria uma má idéia, por várias razões. Eu escrevi meus pensamentos em um relatório da qualidade central Estendido deve permanecer um tipo de 80 bits em plataformas de 64 bits

Se você não deseja que seu código caia de precisão de 80 bits para precisão de 64 bits ao passar para Delphi de 64 bits, clique no link do QualityCentral e vote no meu relatório. Quanto mais votos, mais provável que Embarcadero escute. Se eles usam SSE2 para ponto flutuante de 64 bits, o que faz sentido, adicionar o ponto flutuante de 80 bits usando a FPU será um trabalho extra para a Embarcadero. Duvido que eles façam esse trabalho, a menos que muitos desenvolvedores o peça.

Se você realmente precisar, então você pode usar o UNIDADE TEXTENDENDX87 por Philipp M. Schlüter (Phis em So) como mencionado em Este tópico de fórum Embarcadero.

@Phis: Quando você atualiza sua resposta com as informações da minha, eu remoto a minha.

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