Les calculs logarithmiques sont essentiels dans diverses applications scientifiques et techniques. Cet article explore l'implémentation d'une fonction log2() efficace pour les vecteurs à virgule flottante double précision à 4 éléments à l'aide d'Advanced Vector Extensions 2 (AVX2).
Intel La bibliothèque mathématique vectorielle évolutive (SVML) fournit une fonction intrinsèque __m256d _mm256_log2_pd (__m256d a) pour effectuer des opérations log2 sur des vecteurs 4 bits. Cependant, cet intrinsèque n'est disponible que dans les compilateurs Intel et aurait des inconvénients en termes de performances sur les processeurs AMD.
Pour implémenter log2() sans s'appuyer sur des intrinsèques spécifiques au compilateur, nous pouvons exploiter les approximations polynomiales. Nous pouvons exprimer log2(x) sous la forme d'une série de Taylor développée autour de x = 1, ou plus précisément, nous pouvons utiliser plusieurs termes polynomiaux pour approximer log2(mantisse) dans la plage de [1.0, 2.0].
L'implémentation C suivante fournit une fonction log2() très efficace pour les vecteurs double précision 4 bits utilisant AVX2 et un polynôme personnalisé approximation :
__m256d __vectorcall Log2(__m256d x) { // Extract exponent and normalize it // Calculate t=(y-1)/(y+1) and t**2 // Calculate log2(y) and add exponent return log2_x; }
La formule d'approximation utilisée peut être visualisée comme :
Les coefficients polynomiaux ont été ajustés pour minimiser le maximum erreur absolue sur la plage [1.0, 2.0].
Les benchmarks montrent que cette implémentation surpasse à la fois std::log2() et std::log() par une marge significative, atteignant environ 4 fois les performances de std::log2().
La précision de la mise en œuvre peut être adaptée en ajoutant davantage de termes polynomiaux. Cependant, augmenter l'ordre polynomial augmentera le nombre d'opérations à virgule flottante et réduira potentiellement les performances.
L'implémentation AVX2 fournie de log2() offre une efficacité et des performances élevées pour les calculs logarithmiques vectorisés . En exploitant des approximations polynomiales personnalisées, cette fonction fournit une solution portable et efficace pour les opérations log2 sur des vecteurs à virgule flottante double précision 4 bits.
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!