On Tue, 2 Mar 1999, Chris Jacobson wrote: >I was reviewing George's Buffer code (I run a mix of 1.9 and 2.0 and my >own mods), and realized the magnitude/bitcounting/rounding code was a bit >... superfluous. > >George, did you compare the current code for finding the next largest >power of 2, to the simple loop: > >for (i = 0; i < 32; i++) > if ((1 << i) >= size) > break; You mean round_to_pow2? It would be this without shortcuts: static size_t round_to_pow2(size_t y) { size_t x = (1 << SIZE_T_HIGHBIT); /* Set the highest bit possible... */ while ((y & x) == 0) /* Scan for the highest bit in target. */ x >>= 1; /* Bit not found in target, shift mask right one bit. */ if (x == y) /* If the numbers are equal, it's already rounded. */ return x; return (x << 1); /* Numbers don't match, round up to compensate. */ } >Normally I would presume you did, but the current code seems like such >overkill that I am left to wonder if someone had spiked your coffee that >day <g>, if you were just feeling creative, if your routines had other >purposes that have yet to reach the light of day in Pre-2.0 code, or if >they are actually faster. I was bored and benchmark happy. If you're interested, take a look at http://www.circlemud.org/~greerga/bench.c It goes from 3,600 usec to 8,800 usec without the shortcuts for an even distribution from 32,767 to 0. I expected those to be the standard values requested in the buffer allocations. As given, yours took ~19,000 usec for the same loop. There's a reason I shift the value first and then shift it down one every time. Making it shift the whole thing every time is slow. If I change yours to: static size_t chris_round(unsigned int size) { unsigned int i = (1 << 0); for (i = (1 << 0); i < (1 << 31); i <<= 1) if (i >= size) break; return i; } And remove my shorcuts, then it compares as: #1 (my) : 8882 usec #2 (cr) : 7325 usec Otherwise, with shortcuts: #1 (my) : 3576 usec #2 (stk): 6520 usec But I suppose they could be added to yours somehow, I'll look into it sometime. -- George Greer greerga@circlemud.org http://www.circlemud.org/~greerga/ +------------------------------------------------------------+ | Ensure that you have read the CircleMUD Mailing List FAQ: | | http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html | +------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/15/00 PST