Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: question about optimizing loops

Author: Gerd Isenberg

Date: 14:05:31 08/22/03

Go up one level in this thread


On August 22, 2003 at 16:02:56, Uri Blass wrote:

>I have  many cases when I want to do something for all the 1's of a number that
>is
>0-255

This nice range needs simply a switch or a function pointer array.

>
>I do something like this if I am sure that the number is not 0(I start with
>while if the number can be 0)
>
>do
>{
>  j=smallest_power[i];
>/*for example smallest_power[34]=1 because 34=2^1+2^5 and 1 is the smallest
>power in this representation*/
>  f(j);
>  i&=i-1;
>}
>while (i>0);

hopefully "i" is unsigned. I would prefere
while (i!=0);

>
>I believe that it is not optimal because I calculate information that I do not
>need and it is better to have something like

So you don't need the bit index but only the pop count and n'th bit?

>
>for (k=0;k<weight[i];k++)
>f(power[i][k]);
>

I would avoid the loop here. But wasn't there a similar discussion recently?

	simple();
	andrew();
	tim();
	heiner();
	reinhard();
	switch256();
	funcp();

>I already have the relevant array weight[i] that gives me the number of 1's but
>before generating the array power[i][k] that gives the value of the k power of i
>I prefer to ask here maybe someone has a better idea.
>
>Note that I am even not sure if the second idea is faster because I am afraid
>that calling array of 2 dimensions may be slower.

depends on sizeof power[0][0]. One additional register of course and one
possible shift left. X86-may address with [base+reg1+N*reg2] where N is 0,1,2,4
or 8.

Regards,
Gerd

>
>Uri



This page took 0 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.