Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: question about optimizing loops

Author: Uri Blass

Date: 15:23:19 08/22/03

Go up one level in this thread


On August 22, 2003 at 17:05:31, Gerd Isenberg wrote:

>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 remember but it was a different case and I got a decision there to use
some if's
if (dirnow&192)
{
  if (dirnow&128)
  {
  }
  if (dirnow&64)
  {
  }
}
if (dirnow&63)
{
}

In the cases that I used it at that time usually there were only few 1's and now
there are usually more 1's so I do not like if's because there are more if that
the program needs to do.

I can maybe use
switch that is not switch 256 because the number of possibilities is smaller.

when i is directions of the king then there are less cases
basically 4 corners
8 squares near the corner
4 type of squares in the first rank or first file and other squares so I have
only 17 cases.

Note that people always push me for assembler and I want to see what I can
improve by simple logic that is independent of assembler.

The problem here is also that I want to save the value of i to use it later and
the original solution when I change the value of i does not give me it.

I decided that I do not like long code so I reject the switch solution.
I am afraid that long code may cause problems later even if it is slightly
faster and when I add more code the thing that was faster is suddenly going to
become slower.

I feel that the code that i have do things that I do not need because I need to
save a copy of i.

This was the reason that I thought about the alternative that one of its
advantages is that I do not need to do it

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

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.