Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Move generation question for the big boys

Author: Vincent Diepeveen

Date: 13:17:52 09/15/01

Go up one level in this thread


On September 15, 2001 at 15:23:29, Bruce Moreland wrote:

>On September 15, 2001 at 14:30:40, Vincent Diepeveen wrote:
>
>>On September 15, 2001 at 11:14:36, Sune Fischer wrote:
>
>>>   bb ^= mask[to_square];        // remove the bit
>>>
>>>   movelist[++counter].from=from_square;
>>>   movelist[counter].to=to_square;
>>>   movelist[counter].piece=QUEEN;
>>>   movelist[counter].capturedpiece=enemy.piece[board.id[to_square]];
>>
>>this looks ugly. Using a pointer here would be way faster.
>
>Not necessarily.  If the "counter" variable is enregistered by the compiler, you
>end up with about the same thing as if you used a pointer, but it also depends
>upon how large the elements of "movelist" are.

If compilers optimized very well, then our problems would be solved Bruce,
we could go write our programs in JAVA or C++ and let the compiler handle
the problems of not allocating and removing objects.

Also we would be able to use old Qbasic code in a very efficient way then.

That's not what happens however. Usual it's smart to NOT trust the compiler.

When patterns get complex then i saw that visual c++ makes huge optimization
errors.

Like if i check for 2 non-array/pointer entities for being zero:

if( a & b )
  then do this and that;

to produce some crap assembly:
  CMP EAX,0
  JNZ LOOP
  CMP EDX,0
  JNZ LOOP1

Now already people will complain: "you don't need special CMP for
2 different statements". Well they're right.

In fact you don't need 2 compares even. All you need is something
primitive like:

  ADD EAX,EDX
  CMP EAX,0
  JNZ LOOP1

However i would need to learn assembly for this or i must rewrite
my C code. The compiler isn't smart Bruce. The compiler is very stupid
when talking about source connections. So i have to write:
  if( a+b )
    then do this and that;

>Using pointers will usually help the compiler out, because it can just indirect
>through a value, rather than having to deal with scaling the value and adding it
>to a constant.  But in some circumstances, scaling it and adding it to a
>constant is free.

In general the above construction makes no sense. Optimizing it with a
pointer is always safer!

>bruce



This page took 0.01 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.