[Liboil] Is liboil still alive?

Jeff Squyres jsquyres at cisco.com
Fri Feb 20 10:26:07 PST 2009

On Feb 20, 2009, at 11:32 AM, Thiago Galesi wrote:

>> - Does oil_u8_copy() make non-temporal copies?
> Ok, AFAIK (and that's what I remember from the docs)

I re-checked the docs, and they don't say:


> So, even though non-temporal copies are faster, it's essentially down
> to what the benchmark found out. It is possible that non-temporal
> copies are not implemented, for example check liboil/sse/copy_sse.c

Ah; I hadn't looked in the source -- I had assumed that it would be  
mostly assembly.

> And you can always write your own 'u8_copy' backend as well.

We were hoping that liboil would obviate the need for us to muck in  
assembly.  :-)

(Open MPI has some assembly code in it, but the main developer of that  
is gone; it's difficult to maintain now that we no longer have anyone  
with expertise with assembly)

>> - In my benchmarking, oil_u8_copy() seems to beat gcc's memcpy() for
>> small sizes (e.g., <=128 bytes) for old versions of gcc (3.4.6/the
>> default on RHEL4) on older xeon hardware.  The docs say that
>> oil_u8_copy() is only optimized for small sizes; so that's fine.  But
>> using more recent hardware (e.g., woodcrest- or wolfdale-class
>> servers), the picture becomes much less clear about whether gcc
>> 3.4.x's memcpy() is faster than oil_u8_copy() or not.  Using other
>> compilers' memcpy() implementations (e.g., intel compiler, pathscale
>> compiler, etc.) seem to always beat oil_u8_copy(), regardless of size
>> and hardware.  Newer gcc's (e.g., 4.3.x) also seem to always beat
>> oil_u8_copy(), regardless of size and hardware.  My question is: is
>> this expected behavior?
> I'd say it's not expected behaviour :) Problem is, more and more
> optimizations are being tucked inside the silicon, as well as gcc and
> others becoming "smarter" so, I wouldn't be surprised if gcc comes
> with a smarter memcpy.
> But for more complex things liboil should perform better.

Ok, fair enough.  I was hoping for non-temporal copies, but if they're  
not there, so be it.

I do see *some* assembly in liboil/*/*copy*.c.  Does anyone know if  
any of these have non-temporal copies?  There's no real comments to  
explain, and I have no idea what the assembly for non-temporal copies  
looks like...

Jeff Squyres
Cisco Systems

More information about the Liboil mailing list