2013-05-30 4 views
0

Я установил, что реализации Microsoft exp (double) в библиотеке VS2010 C используют разные алгоритмы на платформах Win32 (т.е. 32-разрядных x86) и x64, хотя я включил SSE2 для платформы x86 и проверил, что путь кода SSE2 берется в пределах exp(). К сожалению, для некоторых операндов разные алгоритмы дают несколько разные результаты (на 1ulp). В этих случаях любой результат в принципе приемлем для нас, но отсутствие согласованности между сборками Win32 и x64 является проблематичным для нас во время тестирования. Где я могу найти хорошую (то есть точную и быструю) альтернативную реализацию exp (double), которую я могу использовать на обеих платформах? Я был бы рад иметь решение для сборки кода с помощью инструкций SSE2, и я могу перевести его с 32 до 64 бит или v.v. если необходимо.Где можно найти хорошую реализацию exp (double) с помощью инструкций SSE2 на x86/x64?

ответ

0

Возможно, лучше полагаться на компилятор и использовать реализацию exp с http://www.netlib.org/fdlibm/e_exp.c. Это точная реализация (1ulp). Компиляция с помощью sse2 включена, как для x86 en x64, так и на этих платформах результаты должны быть одинаковыми. Исходный код не предлагает много возможностей для использования mulpd (или _mm_mul_pd) и addpd вместо mulsd и addss. Поэтому решение ассемблерного кода может оказаться не очень выгодным.