[Liboil] Is liboil still alive?
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
> 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
(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
More information about the Liboil