[Liboil] exp, log

Stephane Fillod f8cfe at free.fr
Thu Mar 16 00:22:19 PST 2006

On Wed, Mar 15, 2006 at 05:14:05PM -0500, James Bergstra wrote:
> The problem which motivates this email is that if you write a loop like
> for (int i = 0; i < 256; ++i) y[i] = exp(x[i]);
> and compile it with gcc, you get code that runs much slower than if you make a
> call to amd's libacml_mv

..because amd's libacml_mv is doing what liboil should have done ;-)
BTW, I was not aware of the amd's libacml_mv. Can you talk a bit more
about it?

> vrda_exp(256, x, y);
> My question for the list is whether you think liboil might tackle the problem of
> vectorized functions like exp, log, cos, sin, sincos, cabs, etc... or whether
> these should be left for a compiler?   I believe that the answer should be
> "both"... first liboil, and the compiler :)

My answer would be, if your application has a need for it, then go ahead and
add it to liboil.

BTW, I have a patch in my tree which adds sin/cos/sincos (fixpoint with float
result) speedup. They are much needed in some application (DSP, ..). I can send
the ref/ API proposal as a starting point.

> The other aspect of implementing vectorized functions like these is demonstrated
> by the fact that amd's library has routines like
> __vrd1_exp()
> __vrd2_exp()
> __vrd4_exp()
> that compute 1, 2, and 4 exp(x) values per call.  I don't know of any open
> implementation of such functions.

In the amd's libacml_mv, why not wrapping (optionaly) the libacml_mv calls in liboil, 
and let the competition (individual call timing) decide ?
Talking about computing only 1, 2, and 4 values per call, normaly, liboil
does not chase such low optimizition gain. But you should know this already
by profiling your application first.


More information about the Liboil mailing list