2013-05-30 5 views
0

J'ai établi que les implémentations Microsoft de exp (double) dans la bibliothèque VS2010 C utilisent des algorithmes différents sur les plates-formes Win32 (ie 32 bits x86) et x64, même si j'ai activé SSE2 pour la plate-forme x86 le chemin du code SSE2 est pris dans exp(). Malheureusement, les différents algorithmes produisent des résultats légèrement différents (de 1 μp) pour certains opérandes. Dans ces cas, l'un ou l'autre résultat nous est acceptable en principe, mais le manque de cohérence entre les versions Win32 et x64 est problématique pour nous lors des tests. Où puis-je trouver une bonne alternative (c'est-à-dire précise et rapide) de l'exp (double) que je peux utiliser sur les deux plates-formes? Je serais heureux d'avoir une solution de code d'assemblage en utilisant les instructions SSE2, et je peux le traduire de 32 à 64 bits ou v.v. si nécessaire.Où puis-je trouver une bonne implémentation de exp (double) en utilisant les instructions SSE2 sur x86/x64?

Répondre

0

Il est probablement préférable de s'appuyer sur le compilateur et d'utiliser l'implémentation exp de http://www.netlib.org/fdlibm/e_exp.c. C'est une implémentation précise (1ulp). Compilez avec sse2 on, à la fois pour x86 et x64 et les résultats devraient être exactement les mêmes sur ces plateformes. Le code source n'offre pas beaucoup d'opportunités pour utiliser mulpd (ou _mm_mul_pd) et addpd au lieu de mulsd et addss. Par conséquent, une solution de code d'assemblage peut ne pas être très rentable.

Questions connexes