Re: [PATCH 3/4] diffcore-pickaxe: further refactor count_match()
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:46:18
René Scharfe [off-list ref] writes:
I get this (Ubuntu 8.10 x64, Fedora 10 x64 using the same Linux repo,
Windows Vista x64 using a different Linux repo with the same HEAD on
NTFS and msysgit, numbers are the elapsed time in seconds, best of five
runs):
Ubuntu Fedora Windows
v1.6.2-rc2 8.14 8.16 9.236
v1.6.2-rc2+[1-4] 2.43 2.45 2.995
v1.6.2-rc2+[1-4]+memmem 1.31 1.25 2.917
v1.6.2-rc2+[1-3]+memmem 1.51 1.16 8.455
Ubuntu has glibc 2.8, while Fedora 10 has glibc 2.9, with a new and more
efficient memmem() implementation. On Windows, we use our own naive
memmem() implementation.Shoot, I was not being careful enough.
So using memmem() is worthwhile. And providing a better fall-back version in compat/ can speed up this particular case to the point where the fourth patch becomes moot.
Are these numbers telling me that with a good memmem() implementation, patch 4/4 is not just moot but actively detrimental? With a long enough needle, it entirely is possible that scanning the whole image with sublinear string search algorithm would perform much better than the preprocessing patch 4/4 does which has to scan all the bytes in the common parts.