Optimized with SSE2 sinf and cof for x86_32

Dmitrieva Liubov liubov.dmitrieva@gmail.com
Fri Jun 22 14:32:00 GMT 2012


This is a patch proposing manually optimized and high-performance sinf
and cosf versions with excellent precision.

Performance on main path [-10000; 10000] is more than  26X better.

Other important intervals are here (ratio of cycles).

      (random)           Ist.   Bulld.   Atom   Neh.   AVX
   cosf    |x|<0.78    1,9    2,72   1,65   1,89   1,79  times
   cosf    |x|<1.57    1,55    1,84   1,75   1,70   1,55  times
   cosf    |x|<2.35    1,64    2,08   1,78   1,75   1,66  times
   cosf    |x|<3.14    1,97    2,86   1,97   1,87   2,12  times
   cosf    |x|<3.92    2,15    3,50   2,08   2,01   2,33  times
   cosf    |x|<4.71    2,29    3,89   2,15   2,07   2,43  times
   cosf    |x|<5.49    2,39    4,70   2,21   2,06   2,52  times
   cosf    |x|<6.28    2,47    4,62   2,25   2,14   2,58  times
   cosf    |x|<7.06    2,54    4,63   2,28   2,16   2,64  times
   cosf    |x|<7.85    2,43    4,48   2,27   2,10   2,63  times
   cosf    |x|<8.63    2,30    4,47   2,23   2,04   2,56  times
   cosf    |x|<9.42    2,21    4,18   2,20   1,99   2,51  times
   cosf    |x|<100     2,53    5,43   2,28   2,34   2,01  times
   cosf    |x|<1000   19,82   20,50  19,88  17,96  18,37 times
   cosf    |x|<10000  25,98  29,78   24,95  23,63  23,52 times
   cosf    |x|<1e10   18,92   28,74   20,97 16,16  18,78 times


   sinf    |x|<0.78    1,39    1,75   1,31   1,30   1,28  times
   sinf    |x|<1.57    1,47    1,78   1,65   1,62   1,67  times
   sinf    |x|<2.35    1,64    2,10   1,77   1,79   1,77  times
   sinf    |x|<3.14    1,94    2,85   1,95   1,88   2,09  times
   sinf    |x|<3.92    2,12    3,38   2,04   1,91   2,30  times
   sinf    |x|<4.71    2,31    3,95   2,14   1,96   2,42  times
   sinf    |x|<5.49    2,66    4,57   2,21   2,15   2,51  times
   sinf    |x|<6.28    2,53    4,67   2,24   2,17   2,56  times
   sinf    |x|<7.06    2,52    4,54   2,23   2,11   2,62  times
   sinf    |x|<7.85    2,43    4,54   2,24   2,08   2,59  times
   sinf    |x|<8.63    2,33    4,62   2,21   2,09   2,53  times
   sinf    |x|<9.42    2,27    4,28   2,17   1,96   2,51  times
   sinf    |x|<100     2,52    5,32   2,26   2,34   2,01  times
   sinf    |x|<1000    20,12   20,42  19,89  18,24  18,48 times
   sinf    |x|<10000   26,26   26,73  25,00  23,11  23,79 times
   sinf    |x|<1e10    18,76   28,73  20,90  16,09  18,49 times



Testing passed for new sinf/cosf with our proprietary test system that
tests on many intervals with different steps, checks for special
values (from ISO C) and corner cases. Test using “make check” from
GLIBC was ok too.

Our test system observed more than 1e4 ulp errors for |x|>1e4 for
current GLIBC. New asm versions, provided here, are maximum 0.500121
ulp for sinf, 0.500573 ulp for cosf.


ChangeLog:

2012-06-22  Liubov Dmitrieva  <liubov.dmitrieva@gmail.com>

	* sysdeps/i386/i686/fpu/multiarch/Makefile: Update
	(sysdep_routines): Add s_sinf-sse2, s_conf-sse2

	* sysdeps/i386/i686/fpu/multiarch/s_sinf-sse2.S New file
	* sysdeps/i386/i686/fpu/multiarch/s_cosf-sse2.S New file
	* sysdeps/i386/i686/fpu/multiarch/s_sinf.c New file
	* sysdeps/i386/i686/fpu/multiarch/s_cosf.c New file
	* sysdeps/ieee754/flt-32/s_sinf.c Update
	(SINF): Add macro for using routine as __sinf_ia32
	* sysdeps/ieee754/flt-32/s_cosf.c Update
	(COSF): Add macro for using routine as __cosf_ia32

	* sysdeps/i386/i686/fpu/multiarch/e_expf-sse2.S Fix Copyright
	* sysdeps/i386/i686/fpu/multiarch/e_expf.c Fix Copyright


--
Liubov Dmitrieva

Software Engineer
Intel Corporation
-------------- next part --------------
A non-text attachment was scrubbed...
Name: sinf_cosf_x86_32.patch
Type: application/octet-stream
Size: 40728 bytes
Desc: not available
URL: <http://sourceware.org/pipermail/libc-alpha/attachments/20120622/52db6588/attachment.obj>


More information about the Libc-alpha mailing list