Conversions double/int64 avec SSE/AVX
Le jeu d'instructions SSE2 fournit des éléments intrinsèques pour convertir des vecteurs entre des flottants simple précision et 32 bits entiers, mais il n'existe pas d'équivalents pour les entiers double précision et 64 bits. AVX ne dispose pas non plus de ces conversions.
Support limité d'AVX512
AVX512 introduit des éléments intrinsèques pour la conversion vers et depuis des entiers 64 bits, signés et non signés. Cependant, AVX2 et les configurations antérieures ne disposent pas de cette fonctionnalité.
Approximativement les conversions Int64
Pour AVX2 et versions antérieures, il existe des méthodes pour simuler une double précision vers/depuis les conversions uint64 et int64. avec des limitations de plage de valeurs spécifiques et un comportement d'arrondi.
Fast Double ≪-> Conversion uint64_t :
Cette méthode fonctionne pour les valeurs comprises dans la plage [0, 2^52). En ajoutant un nombre magique et en masquant les bits supérieurs, vous pouvez obtenir une approximation de la représentation uint64_t du double.
Fast Double <-> Conversion int64_t :
Similaire à la version uint64_t, cette approximation fonctionne pour les valeurs comprises entre [-2^51, 2^51].
Plage complète Int64 <- > Double conversion :
uint64_t -> double :
Cette méthode utilise 5 instructions pour représenter la gamme complète de int64 sous forme de double.
int64_t -> double :
Cette conversion nécessite 6 instructions et arrondit correctement au double représentable le plus proche.
Conclusion
AVX512 fournit un support direct pour le double /int64, mais pour les configurations antérieures, les approximations fournies offrent des solutions efficaces avec une plage de valeurs spécifique et des contraintes de comportement d'arrondi.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!