Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Parallel algorithms in chess programming

Author: Vincent Diepeveen

Date: 15:51:46 04/18/01

Go up one level in this thread


On April 18, 2001 at 09:04:42, José Carlos wrote:

>On April 18, 2001 at 05:25:52, Vincent Diepeveen wrote:
>
>>On April 17, 2001 at 16:07:35, José Carlos wrote:
>>
>>>On April 17, 2001 at 14:51:45, Gian-Carlo Pascutto wrote:
>>>
>>>>On April 17, 2001 at 13:30:22, Vincent Diepeveen wrote:
>>>>
>>>>>> Are you sure you spend most of your time in eval? My problem is inCheck()
>>>>>>since ever. That's where my prog spends most of the time.
>>>>>>  The good thing is that, everytime I want to improve the speed of my
>>>>>>program, I know exactly where to focus on :)
>>>>>>  I suggest you to profile your program to know exactly where the time is
>>>>>>spend, although probably you've already done this.
>>>>>>
>>>>>>  José C.
>>>>>
>>>>>How can this eat system time anyway?
>>>>
>>>>If you dont have any attack information available incheck can be
>>>>costly. In Sjeng it topped the running profile a long time, though only
>>>>with 15%-20% of the total time or so.
>>>>
>>>>I speeded my incheck/legal_move up greatly by looking at the move last
>>>>played and figuring out if it could possibly have put the king in check.
>>>
>>>  Exactly. That's what I'm doing right now. But actually my makemove() function
>>>is about 5000 lines !!! And I still haven't remove half the inCheck() calls !!
>>>  This is driving me mad, since there're a lot of rare cases that you must take
>>>into account. Really hard, but I hope it's worth the effort.
>>
>>what do you do in makemove?
>>
>>If you do next:
>>
>> if( possiblecheck[piece][fromfield][kingfield]
>>  && scanbetween(piece,fromfield,kingfield) )
>
>  I see. You have all that information stored in a table, so a lookup is enough.
>But anyway, suppose you're already in check. Now you capture a pawn en passant.
>Are you still in check after that?
>  You have to check if the captured pawn was checking your king. Depending on
>whether that's true or false, you much check if both pawns disappearing open a
>line for an enemy sliding piece towards your king. If all of that if false, you
>still need to check if there was another piece cheking your king (it could be a
>double check), etc...
>  I don't see how you know it so easily.

well in diep this problem is of course never happening as i do
attacktables incremental.

if i wouldn't have attacktables incremental and i have a compile flag
to switch'em off, then i simply capture the king from the board and
return mate score if i capture the king.

Just capture the king. Easy.

Why call a function always if the few cases that escape attention hardly
happen?

I don't need to know that i'm in check at all. I just capture the king
if i can get it. It's worth a bit more as capturing a queen of course,
so sorting will quickly pick it out.

You focussed perhaps too much on an exception which rarely happened?


>  José C.
>
>>i do not see how figuring out whether such a move is a check can cost
>>more as say 1% system time even in a program getting half a million
>>nodes a second at a PII450.
>>
>>Best regards,
>>Vincent
>>
>>>  José C.
>>>
>>>>You can apply a lot of tricks to make this very fast.
>>>>
>>>>Now it is way down on the profile (>3% or so), and my program became about
>>>>6% faster. Now need to find a way to get SEE attack info quicker :)
>>>>
>>>>--
>>>>GCP



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.