Ingo Molnar wrote: > * Jonathan Nieder <jrnieder@xxxxxxxxx> wrote: >> E.g., how would something like >> >> const unsigned int *start1 = (const unsigned int *) sha1; >> const unsigned int *start2 = (const unsigned int *) sha2; >> >> if (likely(*start1 != *start2)) { >> if (*start1 < *start2) >> return -1; >> return +1; >> } >> return memcmp(sha1 + 4, sha2 + 4, 16); >> >> perform? > > Note that this function wont work on like 99% of the systems out there due to > endianness assumptions in Git. Yes, I was greedy and broke the semantics, and my suggestion was nonsensical for other reasons (e.g., alignment), too. I should have written something like: if (likely(*sha1 != *sha2)) { if (*sha1 < *sha2) return -1; return +1; } return memcmp(sha1, sha2, 20); since speeding it up 255/256 times seems good enough already. > Also, your hypothetical smart compiler would recognize the above as equivalent > to memcmp(sha1, sha2, 20) and could rewrite it again - so we'd be back to > square 1. True. The real point is a "likely" to explain to human readers what is happening. > Having said that, it would be nice if someone could test these two patches on a > modern AMD box, using the perf stat from here: > > http://people.redhat.com/mingo/tip.git/README > > cd tools/perf/ > make -j install > > and do something like this to test git gc's performance: > > $ perf stat --sync --repeat 10 ./git gc > > ... to see whether these speedups are generic, or somehow Intel CPU specific. Sounds like fun. Will try to find time to play around with this in the next few days. > Well i messed up endianness in an early version of this patch and 'git gc' was > eminently unhappy about it! I have not figured out which part of Git relies on > the comparison result though - most places seem to use the result as a boolean. I think hashcmp is used to run binary searches within a packfile index. Thanks for explaining. Regards, Jonathan -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html