Question

J'ai besoin open source (aucune restriction sur licence) mise en œuvre de la fonction de journal, quelque chose avec la signature

__m128d _mm_log_pd(__m128d);

Il est disponible dans la bibliothèque Math Intel courte Vector (partie de la CPI), mais la CPI est la source ni libre, ni ouverte. Je cherche la mise en œuvre en utilisant uniquement intrinsics.

Il faut utiliser des approximations de fonctions rationnelles spéciales. Je besoin de quelque chose presque aussi précis que log cmath, disons 9-10 chiffres décimaux, mais plus rapide.

Était-ce utile?

La solution

Jetez un oeil à AMD libm . Il n'est pas open source, mais libre. Autant que je sache, il fonctionne sur les processeurs Intel. Sur la même page Web que vous trouverez un lien vers ACML, un autre libre math lib d'AMD. Il a tout d'AMD libm + matrice algos, FF et distributions.

Je ne sais pas implémentation open source de fonctions mathématiques doubles vectorisée de précision. Je suppose que Intel et AMD sont libs main optimisée par le fabricant du processeur et tout le monde les utilise lorsque la vitesse est importante. IIRC, il y avait une tentative de mettre en œuvre des fonctions de intrinsics mathématiques vectorisés dans GCC. Je ne sais pas comment ils ont réussi à bien faire. De toute évidence, ce n'est pas une tâche triviale.

Autres conseils

Je crois log2 est plus facile à calculer. Vous pouvez multiplier / diviser votre nombre par une puissance de deux (très rapide) de telle sorte qu'il se trouve dans (0,5, 2], et vous utilisez un

Framewave projet est Apache 2.0 sous licence et vise à être l'équivalent open source d'Intel IPP. Il a des implémentations qui sont proches de ce que vous recherchez. Vérifiez les fonctions arithmétiques de précision fixe dans la documentation.

Voici la contrepartie pour __m256d: https://stackoverflow.com/a/45898937/1915854 . Il devrait être assez trivial de le couper à __m128d. Faites-moi savoir si vous rencontrez des problèmes avec cela.

Ou vous pouvez voir ma mise en œuvre comme quelque chose d'obtenir deux numéros de __m128d à la fois.

Si vous ne trouvez pas une implémentation open source existant, il est facile de créer votre propre relativement en utilisant la méthode standard d'une série de Taylor. Voir Wikipedia pour cela et une variété d'autres méthodes.

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