ChessUSA.com TalkChess.com
Hosted by Your Move Chess & Games
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

C# Performance
Post new topic    TalkChess.com Forum Index -> Computer Chess Club: Programming and Technical Discussions Flat
View previous topic :: View next topic  
Author Message
Mark Pearce



Joined: 12 Jan 2012
Posts: 61
Location: London, England

PostPost subject: Re: C# Performance    Posted: Sat Jan 28, 2012 12:59 am Reply to topic Reply with quote

Richard Allbert wrote:
As a (very unreliable) indicator, I put together the above skeleton in C++ and ran Generate on the starting position for 2000000 loops. This took just over 2s for the C++ program but over 14s for the C#.


If I understand what you're saying (20 moves generated 2M times), that's 20M move generations per second for C++ and 2.86M for C#. My fledgling C# chess engine (using bitboards) on a single core (i7 2600K) does about 60M raw move generations per second, and that was with almost no optimisation.

So my feeling is that you should be able to go an order of magnitude faster. As Gary says, try using an immutable struct rather than class for Move. Mine looks like this:

Code:
internal struct Move
{
  internal Move(byte squareFrom, byte squareTo, byte pieceMoved, byte pieceCaptured, byte piecePromoted)
  {
    this.SquareFrom = squareFrom;
    this.SquareTo = squareTo;
    this.PieceMoved = pieceMoved;
    this.PieceCaptured = pieceCaptured;
    this.PiecePromoted = piecePromoted;
  }
 
  // The FROM square.
  // Bits 1-3 are the board file, bits 4-6 are the board rank, bits 7-8 are unused.
  internal readonly byte SquareFrom;

  // The TO square.
  // Bits 1-3 are the board file, bits 4-6 are the board rank, bits 7-8 are unused.
  internal readonly byte SquareTo;

  // The MOVED piece.
  // Bits 1-3 are the piece type, bit 4 is the piece colour, bits 5-8 are unused.
  internal readonly byte PieceMoved;
       
  // The CAPTURED piece.
  // Bits 1-3 are the piece type, bit 4 is the piece colour, bits 5-8 are unused.
  internal readonly byte PieceCaptured;
       
  // The PROMOTED piece.
  // Bits 1-3 are the piece type, bit 4 is the piece colour, bits 5-8 are unused.
  // NB Overloaded to represent EN-PASSANT capture if promoted piece is a pawn.
  // NB Overloaded to represent CASTLING if promoted piece is a king.
  internal readonly byte PiecePromoted;
}


A generic List<Move> with a pre-defined maximum length for holding moves can be just as fast as using arrays, as List uses an array internally:

Code:
List<Move> moveList = new List<Move>(48);


And definitely avoid 2-dimensional arrays!

In case it's of any use to you, here's a fragment showing my bitboard-oriented code for generating all the moves for the White knights:

Code:
// White KNIGHTS.
UInt64 remainingPieces = this.WhiteKnights;

// Generate the moves for each knight...
while (remainingPieces != 0)
{
  squareFrom = BitOperations.BitScanForward(remainingPieces);
  generatedMoves = Constants.ATTACKS_KNIGHT[squareFrom] & eligibleSquares;
  while (generatedMoves != 0)
  {
    squareTo = BitOperations.BitScanForward(generatedMoves);
    moveList.Add(new Move(squareFrom, squareTo, Constants.WHITE_KNIGHT, this.Squares[squareTo], Constants.EMPTY));
    generatedMoves ^= Constants.BITSET[squareTo];
  }
  // Finished with this knight - move on to the next one.
  remainingPieces ^= Constants.BITSET[squareFrom];
}

_________________
Theory is when you know something, but it doesn't work. Practice is when something works, but you don't know why. Chess programmers combine theory and practice: Nothing works and they don't know why.
Back to top
View user's profile Send private message Visit poster's website
Display posts from previous:   
Subject Author Date/Time
C# Performance Richard Allbert Fri Jan 27, 2012 8:41 pm
      Re: C# Performance Kevin Hearn Fri Jan 27, 2012 9:01 pm
            Re: C# Performance Richard Allbert Fri Jan 27, 2012 9:13 pm
      Re: C# Performance Gary Fri Jan 27, 2012 9:07 pm
            Re: C# Performance Richard Allbert Fri Jan 27, 2012 9:17 pm
                  Re: C# Performance Gary Fri Jan 27, 2012 10:09 pm
      Re: C# Performance Mark Pearce Sat Jan 28, 2012 12:59 am
            Re: C# Performance Richard Allbert Sat Jan 28, 2012 8:44 am
                  Re: C# Performance Sven Schüle Sat Jan 28, 2012 9:48 am
                        Re: C# Performance Richard Allbert Sat Jan 28, 2012 10:25 am
                              Re: C# Performance Richard Allbert Sat Jan 28, 2012 11:41 am
                  Re: C# Performance Mark Pearce Sat Jan 28, 2012 11:44 am
            Re: C# Performance Richard Allbert Sat Jan 28, 2012 10:31 am
      Re: C# Performance Marco Costalba Sat Jan 28, 2012 1:09 pm
            Re: C# Performance Lucas Braesch Sat Jan 28, 2012 1:52 pm
            Re: C# Performance Richard Allbert Sat Jan 28, 2012 2:05 pm
                  Re: C# Performance Marco Costalba Sat Jan 28, 2012 2:30 pm
                        Re: C# Performance Richard Allbert Sat Jan 28, 2012 5:22 pm
                              Re: C# Performance Sven Schüle Sat Jan 28, 2012 6:02 pm
                                    Re: C# Performance Richard Allbert Sat Jan 28, 2012 6:12 pm
                                    Re: C# Performance Robert Purves Sat Jan 28, 2012 10:17 pm
                              Re: C# Performance Marco Costalba Sat Jan 28, 2012 10:25 pm
                  Re: C# Performance Thomas Petzke Sat Jan 28, 2012 4:21 pm
      Re: C# Performance Richard Allbert Mon Jan 30, 2012 12:52 pm
            Re: C# Performance Marco Costalba Mon Jan 30, 2012 6:37 pm
                  Re: C# Performance Richard Allbert Wed Feb 01, 2012 6:55 pm
                        Re: C# Performance Marco Costalba Wed Feb 01, 2012 7:18 pm
            Re: C# Performance Mark Pearce Mon Jan 30, 2012 9:55 pm
                  Re: C# Performance Richard Allbert Wed Feb 01, 2012 6:57 pm
                        Re: C# Performance Mark Pearce Wed Feb 01, 2012 9:59 pm
            Re: C# Performance Mark Pearce Fri Feb 03, 2012 1:34 am
                  Re: C# Performance Robert Purves Fri Feb 03, 2012 3:26 am
                        Re: C# Performance Mark Pearce Fri Feb 03, 2012 9:28 am
                              Re: C# Performance Sven Schüle Fri Feb 03, 2012 9:45 am
                                    Re: C# Performance Mark Pearce Sat Feb 04, 2012 7:57 pm
                                          Re: C# Performance Sven Schüle Sat Feb 04, 2012 10:36 pm
                                                Re: C# Performance Mark Pearce Sat Feb 04, 2012 11:49 pm
                                                      Re: C# Performance Sven Schüle Sun Feb 05, 2012 12:51 am
                                                            Re: C# Performance Mark Pearce Sun Feb 05, 2012 1:05 am
                              Re: C# Performance Sven Schüle Fri Feb 03, 2012 10:04 am
                                    Re: C# Performance Mark Pearce Fri Feb 03, 2012 11:40 am
                                          Re: C# Performance Richard Allbert Sat Feb 04, 2012 7:10 pm
                                                Re: C# Performance Lucas Braesch Sat Feb 04, 2012 8:31 pm
                                                      Re: C# Performance Mark Pearce Sat Feb 04, 2012 10:23 pm
                                                            Re: C# Performance Mark Pearce Sun Feb 05, 2012 12:23 am
                                                                  Re: C# Performance Lucas Braesch Sun Feb 05, 2012 2:57 am
                                                                        Re: C# Performance Mark Pearce Sun Feb 05, 2012 11:40 am
                                                                              Re: C# Performance Richard Allbert Mon Feb 06, 2012 6:29 pm
                                                                                    Re: C# Performance Richard Allbert Mon Feb 06, 2012 6:29 pm
                                                                                          Re: C# Performance Richard Allbert Mon Feb 06, 2012 6:30 pm
                                                                                          Re: C# Performance Richard Allbert Mon Feb 06, 2012 6:45 pm
                                                                                          Re: C# Performance Gary Mon Feb 06, 2012 7:00 pm
                                                                                          Re: C# Performance Richard Allbert Mon Feb 06, 2012 7:12 pm
                                                                                          Re: C# Performance Sven Schüle Mon Feb 06, 2012 10:50 pm
                                                                                          Re: C# Performance Richard Allbert Tue Feb 07, 2012 9:52 am
                                                                                          Re: C# Performance Richard Allbert Tue Feb 07, 2012 9:53 am
                                                                                          Re: C# Performance Richard Allbert Tue Feb 07, 2012 9:53 am
                                                                                          Re: C# Performance Richard Allbert Tue Feb 07, 2012 9:54 am
                                                                                          Re: C# Performance Mark Pearce Tue Feb 07, 2012 1:59 pm
                                                                                          Re: C# Performance Richard Allbert Tue Feb 07, 2012 2:54 pm
                                                                                          Re: C# Performance Richard Allbert Tue Feb 07, 2012 3:06 pm
                                                                                          Re: C# Performance Mark Pearce Tue Feb 07, 2012 5:17 pm
                                                                                          Re: C# Performance Richard Allbert Tue Feb 07, 2012 6:10 pm
                                                                                          Re: C# Performance Richard Allbert Tue Feb 07, 2012 6:20 pm
                                                                                          Re: C# Performance Mark Pearce Tue Feb 07, 2012 8:02 pm
                                                                                          Re: C# Performance Richard Allbert Tue Feb 07, 2012 9:19 pm
                                                                                          Re: C# Performance Mark Pearce Tue Feb 07, 2012 10:20 pm
                                                                                          Re: C# Performance Richard Allbert Wed Feb 08, 2012 7:47 am
                                                                                          Re: C# Performance Richard Allbert Wed Feb 08, 2012 7:57 am
                                                                                          Re: C# Performance Sven Schüle Wed Feb 08, 2012 10:09 am
                                                                                          Re: C# Performance Mark Pearce Wed Feb 08, 2012 12:16 pm
                                                                                          Re: C# Performance Vincent Diepeveen Sat Feb 18, 2012 10:03 pm
                                                                                          Re: C# Performance Mark Pearce Wed Feb 08, 2012 9:30 am
                                                                                          Re: C# Performance Richard Allbert Wed Feb 08, 2012 12:02 pm
                                                                                          Re: C# Performance Richard Allbert Wed Feb 08, 2012 12:34 pm
                                                                                          Re: C# Performance Mark Pearce Wed Feb 08, 2012 12:56 pm
                                                                                          Re: C# Performance Richard Allbert Wed Feb 08, 2012 1:18 pm
                                                                                          Re: C# Performance Richard Allbert Wed Feb 08, 2012 2:30 pm
                                                                                          Re: C# Performance Richard Allbert Wed Feb 08, 2012 2:34 pm
                                                                                          Re: C# Performance Mark Pearce Wed Feb 08, 2012 3:02 pm
                                                                                          Re: C# Performance Richard Allbert Wed Feb 08, 2012 3:27 pm
                                                                                          Re: C# Performance Richard Allbert Wed Feb 08, 2012 3:29 pm
                                                                                          Re: C# Performance Richard Allbert Wed Feb 08, 2012 3:59 pm
                                                                                          Re: C# Performance Richard Allbert Wed Feb 08, 2012 4:04 pm
                                                                                          Re: C# Performance Mark Pearce Wed Feb 08, 2012 6:07 pm
                                                                                          Re: C# Performance Richard Allbert Thu Feb 09, 2012 10:41 am
                                                                                          Re: C# Performance Mark Pearce Thu Feb 09, 2012 1:47 pm
                                                                                          Re: C# Performance Richard Allbert Thu Feb 09, 2012 2:56 pm
                                                                                          Re: C# Performance Mark Pearce Sat Feb 11, 2012 4:41 pm
                                                                                          Re: C# Performance Richard Allbert Sun Feb 12, 2012 8:34 am
                                                                                          Re: C# Performance Lucas Braesch Sun Feb 12, 2012 10:52 am
                                                                                          Re: C# Performance Richard Allbert Sun Feb 12, 2012 12:26 pm
                                                                                          Re: C# Performance Ron Murawski Mon Feb 13, 2012 5:26 am
                                                                                          Re: C# Performance Lucas Braesch Mon Feb 13, 2012 5:52 am
                                                                                          Re: C# Performance Richard Allbert Mon Feb 13, 2012 6:27 am
                                                                                          Re: C# Performance Ron Murawski Tue Feb 14, 2012 6:38 am
                                                                                          Re: C# Performance Lucas Braesch Tue Feb 14, 2012 8:22 am
                                                                                          Re: C# Performance Mark Pearce Tue Feb 14, 2012 11:30 pm
                                                                                          Re: C# Performance Richard Allbert Thu Feb 16, 2012 10:49 am
                                                                                          Re: C# Performance Mark Pearce Sat Feb 18, 2012 12:34 pm
                                                                                          Re: C# Performance Richard Allbert Mon Feb 20, 2012 9:19 pm
                                                                                          Re: C# Performance Mark Pearce Tue Feb 21, 2012 8:33 am
                                                                                          Re: C# Performance Richard Allbert Tue Feb 21, 2012 6:37 pm
                                                                                          Re: C# Performance Vincent Diepeveen Sat Feb 18, 2012 10:19 pm
                                                                                          Re: C# Performance Mark Pearce Sun Feb 12, 2012 2:01 pm
                                                                                          Re: C# Performance Richard Allbert Sun Feb 12, 2012 4:40 pm
                                                                                          Re: C# Performance Vincent Diepeveen Sat Feb 18, 2012 10:06 pm
                                                                                          Re: C# Performance Mark Pearce Sun Feb 19, 2012 1:01 pm
                                                                                          Re: C# Performance Vincent Diepeveen Sun Feb 19, 2012 5:25 pm
                                                                                          Re: C# Performance Mark Pearce Sun Feb 19, 2012 7:04 pm
                                                                                          Re: C# Performance Vincent Diepeveen Sun Feb 19, 2012 9:17 pm
                                                                                          Re: C# Performance Mark Pearce Sun Feb 19, 2012 11:33 pm
                                                                                          Re: C# Performance Richard Allbert Sun Feb 19, 2012 9:22 pm
                                                                                          Re: C# Performance Vincent Diepeveen Sun Feb 19, 2012 9:32 pm
                                                                                          Re: C# Performance Vincent Diepeveen Sun Feb 19, 2012 9:37 pm
                                                                                          Re: C# Performance Vincent Diepeveen Sun Feb 19, 2012 10:06 pm
                                                                                          Re: C# Performance Lucas Braesch Wed Feb 08, 2012 10:56 am
                                                                                          Re: C# Performance Mark Pearce Wed Feb 08, 2012 11:30 am
                                                                                          Re: C# Performance Richard Allbert Wed Feb 08, 2012 12:04 pm
                                                                                          Re: C# Performance Tony Soares Tue Feb 07, 2012 3:47 am
                                                                                          Re: C# Performance Richard Allbert Tue Feb 07, 2012 9:55 am
                                          Re: C# Performance Mark Pearce Sat Feb 04, 2012 8:37 pm
Post new topic    TalkChess.com Forum Index -> Computer Chess Club: Programming and Technical Discussions

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum




Powered by phpBB © 2001, 2005 phpBB Group
Enhanced with Moby Threads