Maison >développement back-end >C++ >Comment implémenter efficacement log2(__m256d) dans AVX2 sans les dépendances du compilateur Intel ?
Dans le contexte d'AVX2, la fonction __m256d _mm256_log2_pd (__m256d a) d'Intel n'est pas compatible avec d'autres compilateurs qu'Intel et présenterait des performances réduites sur les processeurs AMD. Pour résoudre ce problème, explorons une implémentation alternative qui offre efficacité et compatibilité étendue.
En général, log2(ab) est calculé comme log2(a) log2 (b). Puisque a est représenté par une mantisse 2^exposant , le calcul se simplifie en exposant log2(mantisse). La plage limitée de mantisse (1,0 à 2,0) permet une approximation polynomiale personnalisée pour calculer log2 (mantisse).
Les développements en série de Taylor sont couramment utilisés comme points de départ pour les coefficients, mais Un ajustement minimax est recommandé pour minimiser les erreurs sur la plage cible. Pour une plus grande précision autour des valeurs proches de 1,0, la mantisse-1,0 peut être utilisée comme entrée polynomiale, éliminant ainsi le besoin d'un terme constant.
Le niveau de précision souhaité influencera les choix de mise en œuvre . Une plus grande précision se fait généralement au détriment de la vitesse en raison des étapes de calcul supplémentaires. La bibliothèque VCL d'Agner Fog fournit des fonctions très précises mais utilise des techniques complexes qui peuvent ne pas être essentielles pour toutes les applications.
La fonction log2 de VCL implique les étapes suivantes :
Pour améliorer la précision :
Pour optimiser la vitesse :
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!