[Liboil] Liboil slower than plain gcc?

Jason Sewall jasonsewall at gmail.com
Sat Dec 15 10:08:51 PST 2007

I thought I'd take liboil for a spin and I've been disappointed with
its performance.

I have this code:
float * src1 = (float*) malloc(sizeof (float) * size);
float * src2 = (float*) malloc(sizeof (float) * size);
float * dest =  (float*) malloc(sizeof (float) * size);

for(int i =0; i < size; ++i)
     src1[i] = (float)drand48()-0.5f;
     src2[i] = (float)drand48()-0.5f;

float c1 = 2.0f;
float c2 = 0.5f;

If I ask liboil to do this:
oil_vectoradd_f32(dest, sizeof(float), src1, sizeof(float), src2,
sizeof(float), size, &c1, &c2);

it ends up being about 3-4x slower than gcc with this:
for(int i = 0; i < size; ++i)
     dest[i] = c1*src1[i]+c2*src2[i];

If they are compiled with:
-DNDEBUG -O3 -funroll-all-loops -march=prescott --std=c99 -msse3 -mfpmath=sse

Am I doing something grossly wrong? Just curious; I'm very surprised
by this result. I've gotten similar results with oil_abs_f32_f32.

[sewall at localhost oiltest (master)]$ gcc --version
gcc (GCC) 4.1.2 20070925 (Red Hat 4.1.2-33)

And this is with liboil built from commit 95326889fb

More information about the Liboil mailing list