* Michael S. Tsirkin ([email protected]) wrote: > On Thu, Apr 07, 2016 at 12:09:52PM +0100, Dr. David Alan Gilbert wrote: > > * Eric Blake ([email protected]) wrote: > > > On 11/12/2015 12:56 PM, Dr. David Alan Gilbert wrote: > > > > > > >> One thing I still can't understand, why the unit test in host > > > >> environment shows > > > >> 'memcmp()' have better performance? > > > > > > Have you tried running under a profiler, to see if there are hotspots or > > > at least get an idea of where the time is being spent? > > > > > > > > > > > Are you aware of any program other than QEMU that also wants to do > > > > something > > > > similar? Finding whether a block of memory is zero, sounds like > > > > something > > > > that would be useful in lots of places, I just can't think which ones. > > > > > > At least dd, cp, and probably several other utilities. It would be nice > > > to post an RFE to glibc to see if they can come up with a dedicated > > > interface that is faster than memcmp(), although that still only helps > > > us when targetting a system new enough to have that interface. > > > > I've just posted that RFE: > > https://sourceware.org/bugzilla/show_bug.cgi?id=19920 > > > > Dave > > Have you guys seen the discussion in > http://rusty.ozlabs.org/?p=560#respond > > In particular it claims this is close to optimal: > > > char check_zero(char *p, int len) > { > char res = 0; > int i; > > for (i = 0; i < len; i++) { > res = res | p[i]; > } > > return res; > } > > > If you compile this function with --tree-vectorize and --unroll-loops. > > Now, this version always scans all of the buffer, so > it will be slower when buffer is *not* all-zeroes. > > Which might indicate that you need to know what your > workload is to implement compare to zero efficiently, > and if that is the case, it's not clear this is appropriate for libc.
On the contrary; anything that needs a couple of carefully chosen compiler switches and assumes a particular workload is much better optimised in a library for the general workload. Dave > > > > -- > > > Eric Blake eblake redhat com +1-919-301-3266 > > > Libvirt virtualization library http://libvirt.org > > > > > > > > > -- > > Dr. David Alan Gilbert / [email protected] / Manchester, UK -- Dr. David Alan Gilbert / [email protected] / Manchester, UK
