Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: On Beowulf - long post

Author: Robert Hyatt

Date: 19:55:35 06/05/01

Go up one level in this thread


On June 05, 2001 at 19:58:38, Vincent Diepeveen wrote:

>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 :)

Good compilers build a dependency graph to optimize the program.  They pick
up on this kind of stuff.  You could use the same logic on a conditional
assignment in C and it would be wrong.  If you check the ANSI C specification,
you can't assume that in a single expression, one value is tested before the
other, and be safe.

The best bet is to simply not write code that is that crappy (where one pointer
is null) and then the problem doesn't exist and everything works fine.





>
>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 :)


Maybe...



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.