login
Header Space

 
 

Re: [PATCH 3/2] Avoid unnecessary strlen() calls

Score:
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: Linus Torvalds <torvalds@...>
Cc: Junio C Hamano <junkio@...>, Nicolas Pitre <nico@...>, Morten Welinder <mwelinder@...>, Git Mailing List <git@...>
Date: Monday, March 19, 2007 - 11:05 pm

Hi,

On Sun, 18 Mar 2007, Linus Torvalds wrote:


I felt a little left out in all that performance slashing, and so I 
thought maybe, just maybe, a small change in xdl_hash_record() can do 
wonders (since it _is_ really simple, but still takes almost a 6th of the 
CPU time). I don't have a proper test case setup, so maybe you want to try 
this:

-- snipsnap --
[PATCH] xdiff/xutils.c(xdl_hash_record): factor out whitespace handling

Since in at least one use case, xdl_hash_record() takes over 15% of the
CPU time, it makes sense to even micro-optimize it. For many cases, no
whitespace special handling is needed, and in these cases we should not
even bother to check for whitespace in _every_ iteration of the loop.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>

---

	Please do not consider this patch _unless_ it is proven to enhance 
	the profile statistics substantially.

 xdiff/xutils.c |   22 ++++++++++++++++++++--
 1 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/xdiff/xutils.c b/xdiff/xutils.c
index 3653864..bf91c0f 100644
--- a/xdiff/xutils.c
+++ b/xdiff/xutils.c
@@ -236,12 +236,13 @@ int xdl_recmatch(const char *l1, long s1, const char *l2, long s2, long flags)
 	return 0;
 }
 
-unsigned long xdl_hash_record(char const **data, char const *top, long flags) {
+static unsigned long xdl_hash_record_with_whitespace(char const **data,
+		char const *top, long flags) {
 	unsigned long ha = 5381;
 	char const *ptr = *data;
 
 	for (; ptr < top && *ptr != '\n'; ptr++) {
-		if (isspace(*ptr) && (flags & XDF_WHITESPACE_FLAGS)) {
+		if (isspace(*ptr)) {
 			const char *ptr2 = ptr;
 			while (ptr + 1 < top && isspace(ptr[1])
 					&& ptr[1] != '\n')
@@ -270,6 +271,23 @@ unsigned long xdl_hash_record(char const **data, char const *top, long flags) {
 }
 
 
+unsigned long xdl_hash_record(char const **data, char const *top, long flags) {
+	unsigned long ha = 5381;
+	char const *ptr = *data;
+
+	if (flags & XDF_WHITESPACE_FLAGS)
+		return xdl_hash_record_with_whitespace(data, top, flags);
+
+	for (; ptr < top && *ptr != '\n'; ptr++) {
+		ha += (ha << 5);
+		ha ^= (unsigned long) *ptr;
+	}
+	*data = ptr < top ? ptr + 1: ptr;
+
+	return ha;
+}
+
+
 unsigned int xdl_hashbits(unsigned int size) {
 	unsigned int val = 1, bits = 0;
 
-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
cleaner/better zlib sources?, Linus Torvalds, (Thu Mar 15, 9:04 pm)
Re: cleaner/better zlib sources?, Davide Libenzi, (Thu Mar 15, 9:33 pm)
Re: cleaner/better zlib sources?, Davide Libenzi, (Thu Mar 15, 10:06 pm)
Re: cleaner/better zlib sources?, Jeff Garzik, (Thu Mar 15, 9:11 pm)
Re: cleaner/better zlib sources?, Linus Torvalds, (Thu Mar 15, 9:46 pm)
Re: cleaner/better zlib sources?, Linus Torvalds, (Thu Mar 15, 9:54 pm)
Re: cleaner/better zlib sources?, Davide Libenzi, (Thu Mar 15, 10:43 pm)
Re: cleaner/better zlib sources?, Linus Torvalds, (Thu Mar 15, 10:56 pm)
Re: cleaner/better zlib sources?, Davide Libenzi, (Thu Mar 15, 11:16 pm)
Re: cleaner/better zlib sources?, Linus Torvalds, (Fri Mar 16, 12:21 pm)
Re: cleaner/better zlib sources?, Nicolas Pitre, (Fri Mar 16, 1:06 pm)
Re: cleaner/better zlib sources?, Linus Torvalds, (Fri Mar 16, 1:51 pm)
Re: cleaner/better zlib sources?, Nicolas Pitre, (Fri Mar 16, 2:09 pm)
Re: cleaner/better zlib sources?, Jeff Garzik, (Fri Mar 16, 12:35 pm)
Re: cleaner/better zlib sources?, Shawn O. Pearce, (Fri Mar 16, 7:22 pm)
Re: cleaner/better zlib sources?, Nicolas Pitre, (Fri Mar 16, 1:12 pm)
Re: cleaner/better zlib sources?, Matt Mackall, (Fri Mar 16, 12:42 pm)
Re: cleaner/better zlib sources?, Linus Torvalds, (Fri Mar 16, 12:51 pm)
Re: cleaner/better zlib sources?, Davide Libenzi, (Fri Mar 16, 12:24 pm)
Re: cleaner/better zlib sources?, Linus Torvalds, (Fri Mar 16, 12:35 pm)
Re: cleaner/better zlib sources?, Davide Libenzi, (Fri Mar 16, 3:21 pm)
Re: cleaner/better zlib sources?, Linus Torvalds, (Fri Mar 16, 8:01 pm)
Re: cleaner/better zlib sources?, Linus Torvalds, (Fri Mar 16, 9:11 pm)
Re: cleaner/better zlib sources?, Nicolas Pitre, (Fri Mar 16, 11:28 pm)
Re: cleaner/better zlib sources?, Linus Torvalds, (Sat Mar 17, 1:55 pm)
Re: cleaner/better zlib sources?, Linus Torvalds, (Sat Mar 17, 3:40 pm)
[PATCH 2/2] Implement a simple delta_base cache, Linus Torvalds, (Sat Mar 17, 3:44 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Linus Torvalds, (Sat Mar 17, 6:44 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Linus Torvalds, (Sat Mar 17, 5:45 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Morten Welinder, (Sat Mar 17, 9:14 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Avi Kivity, (Sun Mar 18, 2:28 am)
Re: [PATCH 2/2] Implement a simple delta_base cache, Linus Torvalds, (Sat Mar 17, 9:29 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Linus Torvalds, (Sat Mar 17, 9:44 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Nicolas Pitre, (Sat Mar 17, 9:38 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Linus Torvalds, (Sat Mar 17, 9:55 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Nicolas Pitre, (Sat Mar 17, 10:03 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Linus Torvalds, (Sat Mar 17, 10:20 pm)
[PATCH 3/2] Avoid unnecessary strlen() calls, Linus Torvalds, (Sat Mar 17, 11:06 pm)
Re: [PATCH 3/2] Avoid unnecessary strlen() calls, Junio C Hamano, (Sun Mar 18, 5:45 am)
Re: [PATCH 3/2] Avoid unnecessary strlen() calls, Linus Torvalds, (Sun Mar 18, 11:54 am)
Re: [PATCH 3/2] Avoid unnecessary strlen() calls, Junio C Hamano, (Mon Mar 19, 11:16 pm)
Re: [PATCH 3/2] Avoid unnecessary strlen() calls, Linus Torvalds, (Tue Mar 20, 12:31 am)
Re: [PATCH 3/2] Avoid unnecessary strlen() calls, Shawn O. Pearce, (Tue Mar 20, 12:39 am)
Re: [PATCH 3/2] Avoid unnecessary strlen() calls, Linus Torvalds, (Tue Mar 20, 12:57 am)
Re: [PATCH 3/2] Avoid unnecessary strlen() calls, Johannes Schindelin, (Mon Mar 19, 11:05 pm)
Re: [PATCH 3/2] Avoid unnecessary strlen() calls, Shawn O. Pearce, (Mon Mar 19, 11:29 pm)
Re: [PATCH 3/2] Avoid unnecessary strlen() calls, Shawn O. Pearce, (Mon Mar 19, 11:40 pm)
Re: [PATCH 3/2] Avoid unnecessary strlen() calls, Linus Torvalds, (Tue Mar 20, 12:11 am)
Re: [PATCH 3/2] Avoid unnecessary strlen() calls, Junio C Hamano, (Tue Mar 20, 1:44 am)
Re: [PATCH 3/2] Avoid unnecessary strlen() calls, Shawn O. Pearce, (Tue Mar 20, 12:18 am)
Re: [PATCH 3/2] Avoid unnecessary strlen() calls, Linus Torvalds, (Tue Mar 20, 12:45 am)
Re: [PATCH 3/2] Avoid unnecessary strlen() calls, Linus Torvalds, (Sun Mar 18, 11:57 am)
Re: [PATCH 3/2] Avoid unnecessary strlen() calls, Shawn O. Pearce, (Sun Mar 18, 5:38 pm)
Re: [PATCH 3/2] Avoid unnecessary strlen() calls, Linus Torvalds, (Sun Mar 18, 5:48 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Nicolas Pitre, (Sat Mar 17, 11:00 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Linus Torvalds, (Sat Mar 17, 11:31 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Robin Rosenberg, (Sun Mar 18, 6:53 am)
Re: [PATCH 2/2] Implement a simple delta_base cache, Linus Torvalds, (Sun Mar 18, 1:34 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Robin Rosenberg, (Sun Mar 18, 2:29 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, David Brodsky, (Mon Mar 19, 9:16 am)
Re: [PATCH 2/2] Implement a simple delta_base cache, Robin Rosenberg, (Tue Mar 20, 2:35 am)
Re: [PATCH 2/2] Implement a simple delta_base cache, David Brodsky, (Tue Mar 20, 5:13 am)
Re: [PATCH 2/2] Implement a simple delta_base cache, Linus Torvalds, (Tue Mar 20, 10:37 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Nicolas Pitre, (Tue Mar 20, 10:54 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Shawn O. Pearce, (Sun Mar 18, 5:25 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Julian Phillips, (Sun Mar 18, 1:30 am)
Re: [PATCH 2/2] Implement a simple delta_base cache, Linus Torvalds, (Sun Mar 18, 1:23 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Junio C Hamano, (Sat Mar 17, 7:12 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Linus Torvalds, (Sat Mar 17, 7:24 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Jon Smirl, (Sat Mar 17, 7:52 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Junio C Hamano, (Sat Mar 17, 6:37 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Nicolas Pitre, (Sat Mar 17, 9:13 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Junio C Hamano, (Sun Mar 18, 3:47 am)
Re: [PATCH 2/2] Implement a simple delta_base cache, Linus Torvalds, (Sat Mar 17, 7:09 pm)
Re: [PATCH 2/2] Implement a simple delta_base cache, Linus Torvalds, (Sat Mar 17, 7:54 pm)
Re: cleaner/better zlib sources?, Shawn O. Pearce, (Sat Mar 17, 1:19 am)
Re: cleaner/better zlib sources?, Matt Mackall, (Thu Mar 15, 9:14 pm)
Re: cleaner/better zlib sources?, Shawn O. Pearce, (Thu Mar 15, 9:10 pm)
speck-geostationary