Question

Que devons-nous attendre du soutien à virgule flottante dans le compilateur Delphi 64 bits?

  • utiliserai du compilateur 64 bits SSE à mettre en œuvre l'arithmétique en virgule flottante?

  • Will compilateur 64 bits supporte la courant de type flottante de 80 bits (Extended)?

Ces questions sont étroitement liées, donc je leur demande comme une seule question.

Était-ce utile?

La solution

Pour le bit à double = étendu:

compte Twitter de Bauer Lire allen Kylix_rd:

http://twitter.com/kylix_rd

Avec le recul logique, car si regs SSE2 sont 128 bits, ils sont utilisés comme deux doubles 64 bits.

Autres conseils

J'ai fait deux postes sur le sujet ( ici et il ), pour résumer, oui, le compilateur utilise 64 bits SSE2 (double précision), mais il n'utilise pas SSE (simple précision). Tout est converti en flotteurs double précision, et calculée en utilisant SSE2 ( modifier mais il y a une option pour le contrôle que)

Ce moyen f.i. que si les mathématiques sur les flotteurs à double précision est rapide, les mathématiques sur simple précision est lent (beaucoup de conversions redondantes entre precisions simples et doubles sont jetés), « prolongée » est un alias de « Double », et les calculs intermédiaires précision est limitée à double précision .

Modifier Il y avait une directive non documentée (à l'époque) que les contrôles de génération de code SSE, {$ EXCESSPRECISION OFF} génération de Active le code SSE, qui apporte des performances de retour dans les attentes.

Selon Marco van de Voort dans sa réponse à: Comment dois-je préparer mes 32 bits programmes Delphi pour un compilateur 64 bits final :

  

x87 FPU est dépréciée sur x64, et en général SSE2 sera utilisé pour le point florating. donc à virgule flottante et la gestion des exceptions pourrait fonctionner un peu différemment, et peut-être pas 80 bits étendu (mais 64 bits ou, moins probablement 128 bits). Cela concerne également l'arrondissement habituelle (copro controlwork) change lorsque l'interface wiht du code C qui attend un autre mot FPU.

pHIS commenté cette réponse avec:

  

Je ne dirais pas que le x87 FPU est dépréciée, mais il est certain que Microsoft a décidé de faire de leur mieux pour faire de cette façon (et ils ne semblent vraiment pas comme 80 bits valeurs FP) , bien qu'il soit clairement techniquement possible d'utiliser les flotteurs FPU / 80 bits sur Win64.

Je viens posté une réponse à votre autre question, mais je pense qu'il devrait être envoyé ici:

De toute évidence, personne, sauf pour Embarcadero peut répondre à cette certitude avant que le produit soit libéré.

Il est très probable que tout compilateur x64 décent utilisera le jeu d'instructions SSE2 comme base de référence et donc tenter de faire comme calcul beaucoup à virgule flottante en utilisant dispose SSE possible, réduisant au minimum l'utilisation de la FPU x87. Cependant, il faut dire aussi qu'il n'y a aucune raison technique qui empêcherait l'utilisation du x87 FPU dans le code d'application x64 (en dépit des rumeurs contraires qui ont été autour depuis un certain temps, si vous voulez plus d'informations sur ce point, s'il vous plaît jetez un oeil à Agner Manuel Fog Convention d'appel , en particulier le chapitre 6.1 « registres à virgule flottante peuvent être utilisé dans Windows 64 bits? »).

Modifier 1 : Delphi XE2 Win64 ne fait pas 80 supporte peu les calculs à virgule flottante de la boîte (voir par exemple discussuion ici (même si elle permet de lire / écrire des valeurs) Retour à Delphi Win64. on peut apporter ces fonctionnalités en utilisant un disque + les opérateurs de classe, comme cela se fait dans ce type TExtendedX87 (bien que des mises en garde sont applicables).

Nous ne saurons pas vraiment comment le compilateur Delphi 64 bits va mettre en œuvre l'arithmétique en virgule flottante jusqu'à ce que Embarcadero réellement expédie. Tout ce qui avant qui est juste la spéculation. Mais une fois que nous savons que ce sera trop tard pour faire quoi que ce soit à ce sujet.

Les tweets de Allen Bauer ne semblent indiquer qu'ils utiliseront SSE2 et que le type prolongé peut être réduit à 64 bits au lieu de 80 bits. Je pense que ce serait une mauvaise idée, pour diverses raisons. J'ai écrit mes pensées dans un rapport QualityCentral devrait rester un étendu de type 80 bits sur les plates-formes 64 bits

Si vous ne voulez pas que votre code pour tomber de précision de 80 bits à 64 bits de précision lorsque vous passez à 64 bits Delphi, cliquez sur le lien QualityCentral et voter pour mon rapport. La voix de plus, l'Embarcadero écouteront plus probable. S'ils utilisent SSE2 pour virgule flottante 64 bits, ce qui est logique, puis en ajoutant 80 bits à virgule flottante en utilisant la FPU sera un travail supplémentaire pour Embarcadero. Je doute qu'ils vont faire ce travail à moins que beaucoup de développeurs demandent.

Si vous avez vraiment besoin, vous pouvez utiliser l'unité TExtendedX87 par Philipp M. Schlüter de ( ce fil de discussion Embarcadero .

@PhiS:. Lorsque vous mettez à jour votre réponse avec les informations de la mienne, je vais supprimer le mien

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top