All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jaco Kroon <jaco@kroon.co.za>
To: kernel-janitors@vger.kernel.org
Subject: Re: [KJ] powers of 2, and the boundary case of zero
Date: Thu, 11 Jan 2007 06:41:02 +0000	[thread overview]
Message-ID: <45A5DBFE.1080102@kroon.co.za> (raw)
In-Reply-To: <Pine.LNX.4.64.0701090539520.7476@localhost.localdomain>


[-- Attachment #1.1: Type: text/plain, Size: 1275 bytes --]

Robert P. J. Day wrote:
> On Thu, 11 Jan 2007, Darren Jenkins wrote:
> 
> 
>>also was thinking we should add
>>
>>static inline unsigned long round_down_to_power_of_2(unsigned long i)
>>{
>>
>>+     i &= ~(i>>1);    ????
>>   while (i & (i - 1))
>>       i &= (i - 1);
>>
>>   return i;
>>}
>>
>>which follows from my eirlier idea.
> 
> 
> sorry, what was the rationale for that extra line up there?

It presumably gets rids of a few zeros.  Take for example 11111 as
input.  The first line will actually get the right answer off the bat as
it'll mask out the bottom 4 bits.  However, with something like 11011
it'll leave us with 10010 which will again at the very least reduce the
number of iterations through the loop.  In this case one iteration vs three.

I saw a similar idea for the round-up case where we actually test if we
don't already have a power of two, shift-left by one and and with ~i
(which is then essentially the exact same of what happens above).
Whilst it took me a few minutes to just convince myself that the
orriginal algorithms even work (one of those jewel cases) these
enhancements are pretty impressive and make mathematical sense.

For reference, here is the round-up "initialisation" statement:

    i = (i & (i-1)) ? ((i<<1) & ~i) : i )

Jaco

[-- Attachment #1.2: S/MIME Cryptographic Signature --]
[-- Type: application/x-pkcs7-signature, Size: 3233 bytes --]

[-- Attachment #2: Type: text/plain, Size: 168 bytes --]

_______________________________________________
Kernel-janitors mailing list
Kernel-janitors@lists.osdl.org
https://lists.osdl.org/mailman/listinfo/kernel-janitors

  parent reply	other threads:[~2007-01-11  6:41 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-01-09 11:18 [KJ] powers of 2, and the boundary case of zero Robert P. J. Day
2007-01-09 12:16 ` Richard Knutsson
2007-01-09 12:25 ` Robert P. J. Day
2007-01-09 13:01 ` Richard Knutsson
2007-01-09 13:04 ` Robert P. J. Day
2007-01-09 13:57 ` Darren Jenkins
2007-01-09 14:27 ` Robert P. J. Day
2007-01-09 14:39 ` Jaco Kroon
2007-01-09 14:42 ` Robert P. J. Day
2007-01-09 14:46 ` Robert P. J. Day
2007-01-09 15:25 ` Darren Jenkins
2007-01-09 15:27 ` Robert P. J. Day
2007-01-09 16:16 ` Robert P. J. Day
2007-01-09 17:31 ` Randy Dunlap
2007-01-09 18:57 ` Robert P. J. Day
2007-01-09 20:03 ` Arnaldo Carvalho de Melo
2007-01-09 22:41 ` Martin Olsen
2007-01-10  6:08 ` Robert P. J. Day
2007-01-10  8:25 ` Robert P. J. Day
2007-01-10 11:50 ` Martin Olsen
2007-01-10 12:12 ` Jaco Kroon
2007-01-10 13:31 ` Martin Olsen
2007-01-10 13:36 ` Robert P. J. Day
2007-01-10 13:40 ` Robert P. J. Day
2007-01-10 13:51 ` Robert P. J. Day
2007-01-10 13:53 ` Robert P. J. Day
2007-01-10 15:25 ` Martin Olsen
2007-01-10 15:40 ` Robert P. J. Day
2007-01-10 16:44 ` Darren Jenkins
2007-01-10 17:53 ` Martin Olsen
2007-01-10 18:04 ` Robert P. J. Day
2007-01-10 18:29 ` Martin Olsen
2007-01-10 19:44 ` Alexey Dobriyan
2007-01-10 23:01 ` Paul Bonser
2007-01-10 23:30 ` Paul Bonser
2007-01-11  2:06 ` Darren Jenkins
2007-01-11  4:33 ` Robert P. J. Day
2007-01-11  6:41 ` Jaco Kroon [this message]
2007-01-11  6:44 ` Robert P. J. Day
2007-01-11  9:30 ` Robert P. J. Day
2007-01-11 11:37 ` Paul Bonser
2007-01-11 11:40 ` Paul Bonser

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=45A5DBFE.1080102@kroon.co.za \
    --to=jaco@kroon.co.za \
    --cc=kernel-janitors@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.