Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: On Beowulf - long post

Author: Vincent Diepeveen

Date: 16:58:38 06/05/01

Go up one level in this thread


On June 05, 2001 at 14:04:42, Robert Hyatt wrote:

>On June 05, 2001 at 11:29:41, Vincent Diepeveen wrote:
>
>>On June 05, 2001 at 11:14:29, Robert Hyatt wrote:
>>
>>>>
>>>>Now see what i get in beowulf. Instead of that in 2001 dudes program
>>>>better they program things out FOR EVERY PIECE.
>>>>
>>>>Even blackpawns and whitepawns are written out.
>>>>
>>>>Man such a student i would directly ship back.
>>>>
>>>>   "Please make the code more general student, if you multiply a 2048 x 2048
>>>>    array you don't write out every multiplication either!".
>>>>
>>>>See here below the horror which i found in moves.c from beowulf project.
>>>>
>>>>How do you plan to let people learn from this code?
>>>>
>>>>They must learn to "write everything out"??
>>>>
>>>>Please use a few for loops, even in bitboards you can do that,
>>>>or have you forgotten how loops work?
>>>
>>>Depends on the purpose.  "unrolling" is a well-known way to speed up code.
>>>Compact does not always equal fast.  Unrolling also eliminates some tests and
>>>branches, which is also good.
>>
>>I know, where did you hear me talk about getting it faster this generator?
>>
>>Dann Corbitt said this project was setup to let people learn how to write
>>their own chessprogram and to show how algorithms and implementing
>>a chessprogram in a nice manner works.
>>
>>So my comment on this piece of code is that it's not written in a way
>>where students learn from.
>>
>>They learn directly how to hack from this: "write everything out".
>>
>>In this piece of crap code i see everywhere:
>>
>>    if (side == WHITE)
>>        tsq = B->WhiteKnights;
>>    else
>>        tsq = B->BlackKnights;
>>
>>Note you can eliminate these branches, which speeds code up bigtime.
>
>A decent compiler won't use a branch there _anyway_.  It will use a
>conditional move.

I'm no compiler expert, but it might not generate it,
because it might not know that it's legal to access
B->WhiteKnights as B could be NULL. That of course it could
already deduce that B isn't NULL because it gets referenced anyway
is a step which would surprise me if compilers take it :)

Lucky we have some compiler experts here.

Now when do i get a visual c++ compiler which can generate PIII code,
mine only generates stupid 486 code which btw isn't having any
CMOV instructions :)

However those compilers that do generate a CMOV here still are
slower as that 486 compiler. Don't ask me why. Just measure the
speed diff :)

>
>>
>>In a test to generate for white a few million of times a list of moves
>>the branches will be correctly predicted, but normally spoken you get
>>a big misprediction there as then you generate for white and next
>>move for black, that hurts :)

>Just don't do a branch.  :)

>
>>
>>Apart from that it's very ugly to see code like that,
>>i prefer more compact code to teach students and those who
>>want to start their own program!
>
>What they see is what they will do.  I think it better to show how it
>_should_ be done, as opposed to teaching bad habits by showing how it
>could be done more concisely.

I'm not here to reveal code of mine. All programs here get 2 times
faster suddenly :)






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.