move generator speed

Discussion of chess software programming and technical issues.

Moderators: hgm, Rebel, chrisw

elcabesa
Posts: 855
Joined: Sun May 23, 2010 1:32 pm

move generator speed

Post by elcabesa »

looking at my engine performances I have found my move generator is very slow.

trying to evalutate his speed I enabled only knight move generation.

it looks like:

Code: Select all


public void generaMosseCavallo&#40;ref List<mossa> m,color c,bool cattura&#41;
        &#123;
            ulong cavallo;
            pezzo.piece p;
            ulong tempAmici;
            ulong tempNemici;
            if &#40;activeColor == c&#41;
            &#123;
                tempAmici = amici;
                tempNemici = nemici;
            &#125;
            else
            &#123;
                tempAmici = nemici;
                tempNemici = amici;
            &#125;
            if &#40;c == color.white&#41;
            &#123;
                p= pezzo.piece.whiteKnights;
                cavallo = whiteKnightBitBoard;
            &#125;
            else &#123;
                cavallo = blackKnightBitBoard;
                p= pezzo.piece.blackKnights;
            &#125;
            

            while&#40;cavallo!=0&#41;&#123;
                ulong bb = bitboards.getBitboardLSB1&#40;cavallo&#41;;// ritorna bitboard dell LSB1
                ulong mosse = chesslib.generaMosse.tableMosseCavallo&#91;bitboards.bitScanForward&#40;cavallo&#41;&#93;;
                if &#40;cattura&#41;
                &#123;
                    mosse &= tempNemici;
                &#125;
                else
                &#123;
                    mosse &= ~caseOccupate;
                &#125;
                
                while &#40;mosse != 0&#41; &#123;
                    ulong bm = bitboards.getBitboardLSB1&#40;mosse&#41;;// ritorna bitboard dell LSB1
                    mossa mo = new mossa&#40;p, bb, bm, false, false&#41;;
                    m.Add&#40;mo&#41;;
                    mosse &= mosse - 1;// resettla LSB1

                &#125;

                cavallo &=cavallo-1;// resettla LSB1
            &#125;
            
        &#125;

it set some variable, and then for every knight it get from bitboard it generate the moves using a lookup table, and then add the moves to the movelist.
I used refences everywhere it's possible.
this is a c# code!!!! so i can't use any assembler code to speedup the code.

ony my slow pc ( AMD sempron 2600+) i can only get a 300kn/s form this movegenerator. (i'm still not using any kind of hash)

am I doing some error in the programmation or do you think this will be the maximum speed i can reach with c# code? is this speed a good speed without hash?
elcabesa
Posts: 855
Joined: Sun May 23, 2010 1:32 pm

Re: move generator speed

Post by elcabesa »

i'm sorry, but i posted this thread to the wrong forum, can someone move the thread to the right forum? (Computer Chess Club: Programming and Technical Discussions) :)
swami
Posts: 6640
Joined: Thu Mar 09, 2006 4:21 am

Re: move generator speed

Post by swami »

Done.
elcabesa wrote:i'm sorry, but i posted this thread to the wrong forum, can someone move the thread to the right forum? (Computer Chess Club: Programming and Technical Discussions) :)
Dann Corbit
Posts: 12540
Joined: Wed Mar 08, 2006 8:57 pm
Location: Redmond, WA USA

Re: move generator speed

Post by Dann Corbit »

Your perft is quite slow. Have you tried a profiler? I suspect that the new operator might be causing the slow speed.

Most of these use hashing, but that will give only a constant speedup.

Code: Select all

c&#58;\pgn\winboard-engines\iperft>i-perft.exe 6

i-perft 1.0 &#40;c&#41; 2006-2008 AJ Siemelink


   +---+---+---+---+---+---+---+---+
 8 |*r*|*n*|*b*|*q*|*k*|*b*|*n*|*r*|
   +---+---+---+---+---+---+---+---+
 7 |*p*|*p*|*p*|*p*|*p*|*p*|*p*|*p*|
   +---+---+---+---+---+---+---+---+
 6 |   |   |   |   |   |   |   |   |
   +---+---+---+---+---+---+---+---+
 5 |   |   |   |   |   |   |   |   |
   +---+---+---+---+---+---+---+---+
 4 |   |   |   |   |   |   |   |   |
   +---+---+---+---+---+---+---+---+
 3 |   |   |   |   |   |   |   |   |
   +---+---+---+---+---+---+---+---+
 2 |&#40;P&#41;|&#40;P&#41;|&#40;P&#41;|&#40;P&#41;|&#40;P&#41;|&#40;P&#41;|&#40;P&#41;|&#40;P&#41;|
   +---+---+---+---+---+---+---+---+
 1 |&#40;R&#41;|&#40;N&#41;|&#40;B&#41;|&#40;Q&#41;|&#40;K&#41;|&#40;B&#41;|&#40;N&#41;|&#40;R&#41;|
   +---+---+---+---+---+---+---+---+
     a   b   c   d   e   f   g   h

perft 1           20     0.00s    1.$ mnps 1627.2 ticks/op
perft 2          400     0.00s    1.$ mnps   34.5 ticks/op
perft 3         8902     0.00s    1.$ mnps   23.7 ticks/op
perft 4       197281     0.00s    1.$ mnps   24.3 ticks/op
perft 5      4865609     0.03s  157.0 mnps   23.5 ticks/op
perft 6    119060324     0.95s  125.2 mnps   23.9 ticks/op

Code: Select all

c&#58;\pgn\winboard-engines\oliperft>OliPerft.exe
 r n b q k b n r
 p p p p p p p p
 . . . . . . . .
 . . . . . . . .
 . . . . . . . .
 . . . . . . . .
 P P P P P P P P
 R N B Q K B N R

1&#58;20&#58;20
2&#58;400&#58;420
3&#58;8902&#58;9322
4&#58;197281&#58;206603
5&#58;4865609&#58;5072212
6&#58;119060324&#58;124132536

Nodes&#58; 124132536 ms&#58; 794 knps&#58; 156338

Code: Select all

c&#58;\pgn\winboard-engines\omniperft\x64\Release>omniperft.exe
OmniPerft 1.0 by Ilari Pihlajisto

r n b q k b n r
p p p p p p p p
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
P P P P P P P P
R N B Q K B N R
FEN&#58; rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
perft 6
Perft with 4 thread&#40;s&#41;
119060324
Elapsed time&#58; 11 second&#40;s&#41;

Code: Select all

c&#58;\pgn\winboard-engines\perft\x64\Release>perft 6
 - - - - - - - - - - - -
 - - - - - - - - - - - -
 - - r n b q k b n r - -
 - - p p p p p p p p - -
 - - . . . . . . . . - -
 - - . . . . . . . . - -
 - - . . . . . . . . - -
 - - . . . . . . . . - -
 - - P P P P P P P P - -
 - - R N B Q K B N R - -
 - - - - - - - - - - - -
 - - - - - - - - - - - -

Quick Perft by H.G. Muller
Perft mode&#58; No hashing, bulk counting in horizon nodes

perft&#40;1&#41;=20 ( 0.000 sec&#41;

perft&#40;2&#41;=400 ( 0.000 sec&#41;

perft&#40;3&#41;=8902 ( 0.000 sec&#41;

perft&#40;4&#41;=197281 ( 0.002 sec&#41;

perft&#40;5&#41;=4865609 ( 0.042 sec&#41;

perft&#40;6&#41;=119060324 ( 1.017 sec&#41;

Code: Select all

c&#58;\pgn\winboard-engines\perft_code_16_08\Release>movei-perft.exe
WARNING&#58; Nalimov tablebase path incorrectly defined or tablebase files missing.
WARNING&#58; Have you set the environmental variable NALIMOV_PATH correctly?
No endgame tables found

for perft on epd file you need to print perftepd and after it space andthe following list of 4 variables with spaces between themThe varaibles are the depth and the name of the input filethe name of t
he outfile and the frequency that you get input
the frequency needs to be some number 2^n-1for example 2^13-1=8191 means that you see output every 8192 positionsthe output is both in the screen and in the output filewaiting for xboard command

xboard
new
post
perft 6
no problem in allocating perft hash tables
 a2a3  4463267
  a2a4  5363555
  b2b3  5310358
  b2b4  5293555
  c2c3  5417640
  c2c4  5866666
  d2d3  8073082
  d2d4  8879566
  e2e3  9726018
  e2e4  9771632
  f2f3  4404141
  f2f4  4890429
  g2g3  5346260
  g2g4  5239875
  h2h3  4463070
  h2h4  5385554
  b1a3  4856835
  b1c3  5708064
  g1f3  5723523
  g1h3  4877234
 telluser perft&#40;6&#41; = 119060324,time=1016
Dann Corbit
Posts: 12540
Joined: Wed Mar 08, 2006 8:57 pm
Location: Redmond, WA USA

Re: move generator speed

Post by Dann Corbit »

Do a web search for "Distributed Perft" and you will find a really fast move generator in C#.

Compare what he did with what you are doing for insight.

Just a suggestion.
elcabesa
Posts: 855
Joined: Sun May 23, 2010 1:32 pm

Re: move generator speed

Post by elcabesa »

i lloked into "distribuited perft" is a c# program, but it uses "sharper" to compute the real perft work :)
Dann Corbit
Posts: 12540
Joined: Wed Mar 08, 2006 8:57 pm
Location: Redmond, WA USA

Re: move generator speed

Post by Dann Corbit »

elcabesa wrote:i lloked into "distribuited perft" is a c# program, but it uses "sharper" to compute the real perft work :)
Here are some dot net chess programs:

Code: Select all

c&#58;\dotnetchess\CheckMate
c&#58;\dotnetchess\chEngine\ChEngine
c&#58;\dotnetchess\chEngine\ChEngine\Properties
c&#58;\dotnetchess\chEngine\FelpoEngine
c&#58;\dotnetchess\chEngine\FelpoEngine\Properties
c&#58;\dotnetchess\chEngine\NetChEngine
c&#58;\dotnetchess\chEngine\NetChEngine\Properties
c&#58;\dotnetchess\chEngine\TestGen
c&#58;\dotnetchess\chEngine\TestGen\Properties
c&#58;\dotnetchess\chessengine
c&#58;\dotnetchess\chessengine\Backup
c&#58;\dotnetchess\ChessGameStarterKit\Chess
c&#58;\dotnetchess\ChessGameStarterKit\Chess\Components
c&#58;\dotnetchess\ChessGameStarterKit\Chess\Forms
c&#58;\dotnetchess\ChessGameStarterKit\Chess\Properties
c&#58;\dotnetchess\ChessGameStarterKit\Chess\Source
c&#58;\dotnetchess\ChessGameStarterKit\ChessAIEngine\Engine
c&#58;\dotnetchess\ChessGameStarterKit\ChessAIEngine\Properties
c&#58;\dotnetchess\chesstools
c&#58;\dotnetchess\Connect4
c&#58;\dotnetchess\cs-chess\Backup\Chess
c&#58;\dotnetchess\cs-chess\Backup\ChessGui
c&#58;\dotnetchess\cs-chess\Chess
c&#58;\dotnetchess\cs-chess\ChessGui
c&#58;\dotnetchess\csboard-0.9\csboard
c&#58;\dotnetchess\csboard-0.9\csboard\Backup
c&#58;\dotnetchess\csboard-0.9\csboard\Backup\Properties
c&#58;\dotnetchess\csboard-0.9\csboard\Properties
c&#58;\dotnetchess\csboard-0.9\pgnlib
c&#58;\dotnetchess\csboard-0.9\pgnlib\Properties
c&#58;\dotnetchess\csboard-0.9\src
c&#58;\dotnetchess\csboard-0.9\src\game
c&#58;\dotnetchess\csboard-0.9\src\ics
c&#58;\dotnetchess\csboard-0.9\src\mono_i18n\custom.catalog
c&#58;\dotnetchess\csboard-0.9\src\mono_i18n\gnu.gettext
c&#58;\dotnetchess\csboard-0.9\src\mono_i18n\mono.unix.catalog
c&#58;\dotnetchess\csboard-0.9\src\parser
c&#58;\dotnetchess\csboard-0.9\src\viewer
c&#58;\dotnetchess\csboard-0.9\src\viewer\plugins\ecodb
c&#58;\dotnetchess\csboard-0.9\src\viewer\plugins\gamedb
c&#58;\dotnetchess\csboard-0.9\src\viewer\plugins\printer
c&#58;\dotnetchess\csboard-0.9\src\viewer\plugins\urlloader
c&#58;\dotnetchess\csboard-0.9\src\viewer\Widgets
c&#58;\dotnetchess\cseng
c&#58;\dotnetchess\cseng\Backup
c&#58;\dotnetchess\cseng\Backup\Properties
c&#58;\dotnetchess\cseng\cs
c&#58;\dotnetchess\cseng\cs\Backup
c&#58;\dotnetchess\cseng\cs\Backup\SrcChess
c&#58;\dotnetchess\cseng\cs\Backup\SrcChess\Properties
c&#58;\dotnetchess\cseng\cs\SrcChess
c&#58;\dotnetchess\cseng\cs\SrcChess\Properties
c&#58;\dotnetchess\cseng\Properties
c&#58;\dotnetchess\csharp-chess\Backup\Chess
c&#58;\dotnetchess\csharp-chess\Backup\ChessGui
c&#58;\dotnetchess\csharp-chess\Chess
c&#58;\dotnetchess\csharp-chess\ChessGui
c&#58;\dotnetchess\csharp\Backup\Valil.Chess
c&#58;\dotnetchess\csharp\Backup\Valil.Chess.Engine
c&#58;\dotnetchess\csharp\Backup\Valil.Chess.Engine\Properties
c&#58;\dotnetchess\csharp\Backup\Valil.Chess.Model
c&#58;\dotnetchess\csharp\Backup\Valil.Chess.Model\Properties
c&#58;\dotnetchess\csharp\Backup\Valil.Chess.Opponents
c&#58;\dotnetchess\csharp\Backup\Valil.Chess.Opponents\Properties
c&#58;\dotnetchess\csharp\Backup\Valil.Chess.Opponents\Web References\ChessEngineWebService
c&#58;\dotnetchess\csharp\Backup\Valil.Chess.VisualElements
c&#58;\dotnetchess\csharp\Backup\Valil.Chess.VisualElements\Properties
c&#58;\dotnetchess\csharp\Backup\Valil.Chess.WinBoardEngine
c&#58;\dotnetchess\csharp\Backup\Valil.Chess.WinBoardEngine\Properties
c&#58;\dotnetchess\csharp\Backup\Valil.Chess\Properties
c&#58;\dotnetchess\csharp\CheckMate
c&#58;\dotnetchess\csharp\CheckMate\Backup
c&#58;\dotnetchess\csharp\chess
c&#58;\dotnetchess\csharp\chess\Backup\Chess
c&#58;\dotnetchess\csharp\chess\Backup\ChessGui
c&#58;\dotnetchess\csharp\chess\Chess
c&#58;\dotnetchess\csharp\chess\ChessGui
c&#58;\dotnetchess\csharp\ChessBoardCtrl
c&#58;\dotnetchess\csharp\ChessBoardCtrl\Backup
c&#58;\dotnetchess\csharp\ChessBoardCtrl\Chess\Chess
c&#58;\dotnetchess\csharp\ChessDemo
c&#58;\dotnetchess\csharp\ChessDemo\Backup
c&#58;\dotnetchess\csharp\Huo Chess 0.6 cs
c&#58;\dotnetchess\csharp\Huo Chess 0.6 cs\Properties
c&#58;\dotnetchess\csharp\SharpChess
c&#58;\dotnetchess\csharp\SharpChess\Backup
c&#58;\dotnetchess\csharp\SharpChess\Backup1
c&#58;\dotnetchess\csharp\srcChess
c&#58;\dotnetchess\csharp\srcChess\Backup
c&#58;\dotnetchess\csharp\srcChess\Backup\Properties
c&#58;\dotnetchess\csharp\srcChess\Properties
c&#58;\dotnetchess\csharp\Valil.Chess
c&#58;\dotnetchess\csharp\Valil.Chess.Engine
c&#58;\dotnetchess\csharp\Valil.Chess.Engine\Properties
c&#58;\dotnetchess\csharp\Valil.Chess.Model
c&#58;\dotnetchess\csharp\Valil.Chess.Model\Properties
c&#58;\dotnetchess\csharp\Valil.Chess.Opponents
c&#58;\dotnetchess\csharp\Valil.Chess.Opponents\Properties
c&#58;\dotnetchess\csharp\Valil.Chess.Opponents\Web References\ChessEngineWebService
c&#58;\dotnetchess\csharp\Valil.Chess.VisualElements
c&#58;\dotnetchess\csharp\Valil.Chess.VisualElements\Properties
c&#58;\dotnetchess\csharp\Valil.Chess.WinBoardEngine
c&#58;\dotnetchess\csharp\Valil.Chess.WinBoardEngine\Properties
c&#58;\dotnetchess\csharp\Valil.Chess\Properties
c&#58;\dotnetchess\DistributedPerft2\Chess
c&#58;\dotnetchess\DistributedPerft2\Chess\Backup
c&#58;\dotnetchess\DistributedPerft2\Client
c&#58;\dotnetchess\DistributedPerft2\Client\Backup
c&#58;\dotnetchess\DistributedPerft2\PerftService
c&#58;\dotnetchess\DistributedPerft2\PerftService\Backup
c&#58;\dotnetchess\DistributedPerft2\Server
c&#58;\dotnetchess\DistributedPerft2\Server\Backup
c&#58;\dotnetchess\dotnet\ace
c&#58;\dotnetchess\dotnet\ace\ACE
c&#58;\dotnetchess\dotnet\ace\ACE\Board
c&#58;\dotnetchess\dotnet\ace\ACE\Engine
c&#58;\dotnetchess\dotnet\ace\Backup
c&#58;\dotnetchess\dotnet\ace\Backup\ACE
c&#58;\dotnetchess\dotnet\ace\Backup\ACE\Board
c&#58;\dotnetchess\dotnet\ace\Backup\ACE\Engine
c&#58;\dotnetchess\dotnet\alchess
c&#58;\dotnetchess\dotnet\alchess\ALChess
c&#58;\dotnetchess\dotnet\alchess\ALChess\My
c&#58;\dotnetchess\dotnet\alchess\ALChess\My\Resources
c&#58;\dotnetchess\dotnet\alchess\Backup
c&#58;\dotnetchess\dotnet\alchess\Backup\ALChess
c&#58;\dotnetchess\dotnet\alchess\Backup\ALChess\My
c&#58;\dotnetchess\dotnet\alchess\Backup\ALChess\My\Resources
c&#58;\dotnetchess\dotnet\chengine
c&#58;\dotnetchess\dotnet\chengine\Backup
c&#58;\dotnetchess\dotnet\chengine\Backup\ChEngine
c&#58;\dotnetchess\dotnet\chengine\ChEngine
c&#58;\dotnetchess\dotnet\Chess
c&#58;\dotnetchess\dotnet\Chess\Backup
c&#58;\dotnetchess\dotnet\Chess\Backup\Chess
c&#58;\dotnetchess\dotnet\Chess\Backup\Chess\com\danmarinescu\www
c&#58;\dotnetchess\dotnet\Chess\Backup\ChessAIEngine
c&#58;\dotnetchess\dotnet\Chess\Backup\ChessWebService
c&#58;\dotnetchess\dotnet\Chess\Backup\MsnImPpcLib
c&#58;\dotnetchess\dotnet\Chess\Chess
c&#58;\dotnetchess\dotnet\Chess\Chess\com\danmarinescu\www
c&#58;\dotnetchess\dotnet\Chess\ChessAIEngine
c&#58;\dotnetchess\dotnet\Chess\ChessWebService
c&#58;\dotnetchess\dotnet\Chess\MsnImPpcLib
c&#58;\dotnetchess\dotnet\chessengine
c&#58;\dotnetchess\dotnet\chessengine\Backup
c&#58;\dotnetchess\dotnet\chessengine\Backup\ChessEngine
c&#58;\dotnetchess\dotnet\chessengine\ChessEngine
c&#58;\dotnetchess\dotnet\consoleapplication1
c&#58;\dotnetchess\dotnet\consoleapplication1\Backup
c&#58;\dotnetchess\dotnet\consoleapplication1\Backup\Fusch
c&#58;\dotnetchess\dotnet\consoleapplication1\Backup\Fusch\Board
c&#58;\dotnetchess\dotnet\consoleapplication1\Backup\Fusch\Engine
c&#58;\dotnetchess\dotnet\consoleapplication1\Backup\Fusch\Evaluation
c&#58;\dotnetchess\dotnet\consoleapplication1\Backup\Fusch\Protocol
c&#58;\dotnetchess\dotnet\consoleapplication1\Backup\Fusch\Protocol\Commands
c&#58;\dotnetchess\dotnet\consoleapplication1\Backup\Fusch\Protocol\Requests
c&#58;\dotnetchess\dotnet\consoleapplication1\Fusch
c&#58;\dotnetchess\dotnet\consoleapplication1\Fusch\Board
c&#58;\dotnetchess\dotnet\consoleapplication1\Fusch\Engine
c&#58;\dotnetchess\dotnet\consoleapplication1\Fusch\Evaluation
c&#58;\dotnetchess\dotnet\consoleapplication1\Fusch\Protocol
c&#58;\dotnetchess\dotnet\consoleapplication1\Fusch\Protocol\Commands
c&#58;\dotnetchess\dotnet\consoleapplication1\Fusch\Protocol\Requests
c&#58;\dotnetchess\dotnet\counter
c&#58;\dotnetchess\dotnet\Counter.BitBoards
c&#58;\dotnetchess\dotnet\Counter.BitBoards\Counter\BitBoards
c&#58;\dotnetchess\dotnet\counter\Backup
c&#58;\dotnetchess\dotnet\counter\Backup\Counter
c&#58;\dotnetchess\dotnet\counter\Backup\Counter\Model
c&#58;\dotnetchess\dotnet\counter\Backup\Counter\Searching
c&#58;\dotnetchess\dotnet\counter\Counter
c&#58;\dotnetchess\dotnet\counter\Counter\Model
c&#58;\dotnetchess\dotnet\counter\Counter\Searching
c&#58;\dotnetchess\dotnet\darkfusch2
c&#58;\dotnetchess\dotnet\darkfusch2\Backup
c&#58;\dotnetchess\dotnet\darkfusch2\Backup\Fusch
c&#58;\dotnetchess\dotnet\darkfusch2\Backup\Fusch\DarkFusch
c&#58;\dotnetchess\dotnet\darkfusch2\Backup\Fusch\Manager
c&#58;\dotnetchess\dotnet\darkfusch2\Backup\Fusch\Manager\Commands
c&#58;\dotnetchess\dotnet\darkfusch2\Backup\Fusch\Manager\Requests
c&#58;\dotnetchess\dotnet\darkfusch2\Backup\Fusch\Utilities
c&#58;\dotnetchess\dotnet\darkfusch2\Backup\Fusch\Visualisation
c&#58;\dotnetchess\dotnet\darkfusch2\Fusch
c&#58;\dotnetchess\dotnet\darkfusch2\Fusch\DarkFusch
c&#58;\dotnetchess\dotnet\darkfusch2\Fusch\Manager
c&#58;\dotnetchess\dotnet\darkfusch2\Fusch\Manager\Commands
c&#58;\dotnetchess\dotnet\darkfusch2\Fusch\Manager\Requests
c&#58;\dotnetchess\dotnet\darkfusch2\Fusch\Utilities
c&#58;\dotnetchess\dotnet\darkfusch2\Fusch\Visualisation
c&#58;\dotnetchess\dotnet\fafis
c&#58;\dotnetchess\dotnet\fafis\Backup
c&#58;\dotnetchess\dotnet\fafis\Backup\fafis
c&#58;\dotnetchess\dotnet\fafis\fafis
c&#58;\dotnetchess\dotnet\felpoengine
c&#58;\dotnetchess\dotnet\felpoengine\Backup
c&#58;\dotnetchess\dotnet\felpoengine\Backup\FelpoEngine
c&#58;\dotnetchess\dotnet\felpoengine\FelpoEngine
c&#58;\dotnetchess\dotnet\fsharpchess
c&#58;\dotnetchess\dotnet\fsharpchess\_StartupCode$FSharpChess_
c&#58;\dotnetchess\dotnet\fsharpchess\FSharpChess
c&#58;\dotnetchess\dotnet\fsharpchesscode
c&#58;\dotnetchess\dotnet\fsharpchesscode\_StartupCode$FsharpChessCode_
c&#58;\dotnetchess\dotnet\fsharpchesscode\FSharpChess
c&#58;\dotnetchess\dotnet\fsharpchessui
c&#58;\dotnetchess\dotnet\fsharpchessui\_StartupCode$FSharpChessUI_
c&#58;\dotnetchess\dotnet\fsharpchessui\FSharpChess
c&#58;\dotnetchess\dotnet\fsharpchesswb
c&#58;\dotnetchess\dotnet\fsharpchesswb\_StartupCode$FSharpChessWB_
c&#58;\dotnetchess\dotnet\fsharpchesswb\FSharpChess
c&#58;\dotnetchess\dotnet\fusch
c&#58;\dotnetchess\dotnet\fusch\Backup
c&#58;\dotnetchess\dotnet\fusch\Backup\Fusch
c&#58;\dotnetchess\dotnet\fusch\Backup\Fusch\Board
c&#58;\dotnetchess\dotnet\fusch\Backup\Fusch\Engine
c&#58;\dotnetchess\dotnet\fusch\Backup\Fusch\Evaluation
c&#58;\dotnetchess\dotnet\fusch\Backup\Fusch\Import
c&#58;\dotnetchess\dotnet\fusch\Backup\Fusch\Manager
c&#58;\dotnetchess\dotnet\fusch\Backup\Fusch\Manager\Commands
c&#58;\dotnetchess\dotnet\fusch\Backup\Fusch\Manager\Requests
c&#58;\dotnetchess\dotnet\fusch\Backup\Fusch\Neuro
c&#58;\dotnetchess\dotnet\fusch\Backup\Fusch\Utilities
c&#58;\dotnetchess\dotnet\fusch\Fusch
c&#58;\dotnetchess\dotnet\fusch\Fusch\Board
c&#58;\dotnetchess\dotnet\fusch\Fusch\Engine
c&#58;\dotnetchess\dotnet\fusch\Fusch\Evaluation
c&#58;\dotnetchess\dotnet\fusch\Fusch\Import
c&#58;\dotnetchess\dotnet\fusch\Fusch\Manager
c&#58;\dotnetchess\dotnet\fusch\Fusch\Manager\Commands
c&#58;\dotnetchess\dotnet\fusch\Fusch\Manager\Requests
c&#58;\dotnetchess\dotnet\fusch\Fusch\Neuro
c&#58;\dotnetchess\dotnet\fusch\Fusch\Utilities
c&#58;\dotnetchess\dotnet\fuschv1_08
c&#58;\dotnetchess\dotnet\fuschv1_08\Fusch
c&#58;\dotnetchess\dotnet\fuschv1_08\Fusch\Board
c&#58;\dotnetchess\dotnet\fuschv1_08\Fusch\Engine
c&#58;\dotnetchess\dotnet\fuschv1_08\Fusch\Evaluation
c&#58;\dotnetchess\dotnet\fuschv1_08\Fusch\Protocol
c&#58;\dotnetchess\dotnet\fuschv1_08\Fusch\Protocol\Commands
c&#58;\dotnetchess\dotnet\fuschv1_08\Fusch\Protocol\Requests
c&#58;\dotnetchess\dotnet\fuschv1_08\FuschV1_08
c&#58;\dotnetchess\dotnet\garbochess
c&#58;\dotnetchess\dotnet\garbochess\Backup
c&#58;\dotnetchess\dotnet\garbochess\Backup\GarboChess
c&#58;\dotnetchess\dotnet\garbochess\Backup\GarboChess\Tests
c&#58;\dotnetchess\dotnet\garbochess\GarboChess
c&#58;\dotnetchess\dotnet\garbochess\GarboChess\Tests
c&#58;\dotnetchess\dotnet\kkfchessconfig
c&#58;\dotnetchess\dotnet\kkfchessconfig\Backup
c&#58;\dotnetchess\dotnet\kkfchessconfig\Backup\KKFChessConfig
c&#58;\dotnetchess\dotnet\kkfchessconfig\KKFChessConfig
c&#58;\dotnetchess\dotnet\matilde
c&#58;\dotnetchess\dotnet\matilde\Backup
c&#58;\dotnetchess\dotnet\matilde\Backup\Matilde
c&#58;\dotnetchess\dotnet\matilde\Backup\Matilde\My
c&#58;\dotnetchess\dotnet\matilde\Backup\Matilde\My\Resources
c&#58;\dotnetchess\dotnet\matilde\Matilde
c&#58;\dotnetchess\dotnet\matilde\Matilde\My
c&#58;\dotnetchess\dotnet\matilde\Matilde\My\Resources
c&#58;\dotnetchess\dotnet\milady
c&#58;\dotnetchess\dotnet\milady\Backup
c&#58;\dotnetchess\dotnet\milady\Backup\Milady
c&#58;\dotnetchess\dotnet\milady\Backup\Milady\My
c&#58;\dotnetchess\dotnet\milady\Milady
c&#58;\dotnetchess\dotnet\milady\Milady\My
c&#58;\dotnetchess\dotnet\milady_240
c&#58;\dotnetchess\dotnet\milady_240\Milady
c&#58;\dotnetchess\dotnet\milady_240\Milady\My
c&#58;\dotnetchess\dotnet\murderhole
c&#58;\dotnetchess\dotnet\murderhole\Backup
c&#58;\dotnetchess\dotnet\murderhole\Backup\chess
c&#58;\dotnetchess\dotnet\murderhole\chess
c&#58;\dotnetchess\dotnet\pupsi
c&#58;\dotnetchess\dotnet\pupsi2
c&#58;\dotnetchess\dotnet\pupsi2\Pupsi2
c&#58;\dotnetchess\dotnet\pupsi\Backup
c&#58;\dotnetchess\dotnet\pupsi\Backup1
c&#58;\dotnetchess\dotnet\pupsi\Backup1\PupsiEngine
c&#58;\dotnetchess\dotnet\pupsi\Backup2
c&#58;\dotnetchess\dotnet\pupsi\Backup2\UCIEngine
c&#58;\dotnetchess\dotnet\pupsi\Backup\Pupsi
c&#58;\dotnetchess\dotnet\pupsi\Pupsi
c&#58;\dotnetchess\dotnet\pupsiengine
c&#58;\dotnetchess\dotnet\pupsiengine\PupsiEngine
c&#58;\dotnetchess\dotnet\rivaluci-1.10
c&#58;\dotnetchess\dotnet\rivaluci-1.10\_CppImplementationDetails_
c&#58;\dotnetchess\dotnet\rivaluci-1.10\_CrtImplementationDetails_
c&#58;\dotnetchess\dotnet\rivaluci-1.10\std
c&#58;\dotnetchess\dotnet\sharpchess
c&#58;\dotnetchess\dotnet\sharpchess2
c&#58;\dotnetchess\dotnet\sharpchess2\Backup
c&#58;\dotnetchess\dotnet\sharpchess2\Backup\SharpChess
c&#58;\dotnetchess\dotnet\sharpchess2\SharpChess
c&#58;\dotnetchess\dotnet\sharpchess\Backup
c&#58;\dotnetchess\dotnet\sharpchess\Backup\SharpChess\Main
c&#58;\dotnetchess\dotnet\sharpchess\Backup\SharpChess\Main\Constants
c&#58;\dotnetchess\dotnet\sharpchess\SharpChess\Main
c&#58;\dotnetchess\dotnet\sharpchess\SharpChess\Main\Constants
c&#58;\dotnetchess\dotnet\sharpchessui
c&#58;\dotnetchess\dotnet\sharpchessui\Backup
c&#58;\dotnetchess\dotnet\sharpchessui\Backup\SharpChess
c&#58;\dotnetchess\dotnet\sharpchessui\SharpChess
c&#58;\dotnetchess\dotnet\sharperchess
c&#58;\dotnetchess\dotnet\sharperchess\Backup
c&#58;\dotnetchess\dotnet\sharperchess\Backup\SharperChess
c&#58;\dotnetchess\dotnet\sharperchess\Backup\SharperChess\InternalBoard
c&#58;\dotnetchess\dotnet\sharperchess\SharperChess
c&#58;\dotnetchess\dotnet\sharperchess\SharperChess\InternalBoard
c&#58;\dotnetchess\dotnet\silke.engine
c&#58;\dotnetchess\dotnet\silke.engine\Backup
c&#58;\dotnetchess\dotnet\silke.engine\Backup\silke\book
c&#58;\dotnetchess\dotnet\silke.engine\Backup\silke\db
c&#58;\dotnetchess\dotnet\silke.engine\Backup\silke\engine
c&#58;\dotnetchess\dotnet\silke.engine\silke\book
c&#58;\dotnetchess\dotnet\silke.engine\silke\db
c&#58;\dotnetchess\dotnet\silke.engine\silke\engine
c&#58;\dotnetchess\dotnet\silkeUci
c&#58;\dotnetchess\dotnet\silkeUci\Backup
c&#58;\dotnetchess\dotnet\silkeUci\Backup\SilkeUci
c&#58;\dotnetchess\dotnet\silkeUci\SilkeUci
c&#58;\dotnetchess\dotnet\typhoonui
c&#58;\dotnetchess\dotnet\typhoonui\Backup
c&#58;\dotnetchess\dotnet\typhoonui\Backup\typhoonUI
c&#58;\dotnetchess\dotnet\typhoonui\typhoonUI
c&#58;\dotnetchess\dotnet\uche
c&#58;\dotnetchess\dotnet\uche\Backup
c&#58;\dotnetchess\dotnet\uche\Backup\Uche
c&#58;\dotnetchess\dotnet\uche\Backup\Uche\Clocks
c&#58;\dotnetchess\dotnet\uche\Backup\Uche\Graphics
c&#58;\dotnetchess\dotnet\uche\Backup\Uche\NumberGenerators
c&#58;\dotnetchess\dotnet\uche\Backup\Uche\OpeningBooks
c&#58;\dotnetchess\dotnet\uche\Backup\Uche\Parsers
c&#58;\dotnetchess\dotnet\uche\Backup\Uche\Parsers\PGN
c&#58;\dotnetchess\dotnet\uche\Backup\Uche\Pieces
c&#58;\dotnetchess\dotnet\uche\Backup\Uche\Players
c&#58;\dotnetchess\dotnet\uche\Backup\Uche\Properties
c&#58;\dotnetchess\dotnet\uche\Uche
c&#58;\dotnetchess\dotnet\uche\Uche\Clocks
c&#58;\dotnetchess\dotnet\uche\Uche\Graphics
c&#58;\dotnetchess\dotnet\uche\Uche\NumberGenerators
c&#58;\dotnetchess\dotnet\uche\Uche\OpeningBooks
c&#58;\dotnetchess\dotnet\uche\Uche\Parsers
c&#58;\dotnetchess\dotnet\uche\Uche\Parsers\PGN
c&#58;\dotnetchess\dotnet\uche\Uche\Pieces
c&#58;\dotnetchess\dotnet\uche\Uche\Players
c&#58;\dotnetchess\dotnet\uche\Uche\Properties
c&#58;\dotnetchess\dotnet\uciengine
c&#58;\dotnetchess\dotnet\uciengine\UCIEngine
c&#58;\dotnetchess\dotnet\uciplug
c&#58;\dotnetchess\dotnet\uciplug\Backup
c&#58;\dotnetchess\dotnet\uciplug\Backup\UCIPlug
c&#58;\dotnetchess\dotnet\uciplug\Backup\UCIPlug\Properties
c&#58;\dotnetchess\dotnet\uciplug\UCIPlug
c&#58;\dotnetchess\dotnet\uciplug\UCIPlug\Properties
c&#58;\dotnetchess\dotnet\vshost
c&#58;\dotnetchess\dotnet\vshost\Backup
c&#58;\dotnetchess\fafis
c&#58;\dotnetchess\fafis\Backup
c&#58;\dotnetchess\FsharpChess\SharpChessUI
c&#58;\dotnetchess\FsharpChess\SharpChessUI\Properties
c&#58;\dotnetchess\Huo Chess 0.721 cs &#40;source&#41;\Huo Chess 0.6 cs
c&#58;\dotnetchess\Huo Chess 0.721 cs &#40;source&#41;\Huo Chess 0.6 cs\Properties
c&#58;\dotnetchess\Huo Chess 0.82 cs edition &#40;Source&#41;\Source\Huo Chess 0.6 cs
c&#58;\dotnetchess\Huo Chess 0.82 cs edition &#40;Source&#41;\Source\Huo Chess 0.6 cs\Properties
c&#58;\dotnetchess\Huo Chess 0.82 XNA edition &#40;Source&#41;\Source\XNAHuoChessGame
c&#58;\dotnetchess\Huo Chess 0.82 XNA edition &#40;Source&#41;\Source\XNAHuoChessGame\Properties
c&#58;\dotnetchess\kingsout-0.2\src\kingsout\Project1
c&#58;\dotnetchess\milady
c&#58;\dotnetchess\milady\Backup
c&#58;\dotnetchess\milady\Backup\Milady
c&#58;\dotnetchess\milady\Backup\Milady\My
c&#58;\dotnetchess\milady\Milady
c&#58;\dotnetchess\milady\Milady\My
c&#58;\dotnetchess\N22-ChessBot\PCApp\ChessBotStudio
c&#58;\dotnetchess\N22-ChessBot\PCApp\ChessBotStudio\obj\Debug
c&#58;\dotnetchess\N22-ChessBot\PCApp\ChessBotStudio\obj\Release
c&#58;\dotnetchess\N22-ChessBot\PCApp\ChessBotStudio\Properties
c&#58;\dotnetchess\pgn-parse\csharp\ChessBoardCtrl
c&#58;\dotnetchess\pgn-parse\csharp\ChessBoardCtrl\Backup
c&#58;\dotnetchess\pgn-parse\csharp\ChessBoardCtrl\Backup\ChessDemo
c&#58;\dotnetchess\pgn-parse\csharp\ChessDemo
c&#58;\dotnetchess\pgn-parse\csharp\ChessDemo\Backup
c&#58;\dotnetchess\pgn-parse\csharp\csboard-0.8
c&#58;\dotnetchess\pgn-parse\csharp\csboard-0.8\src
c&#58;\dotnetchess\pgn-parse\csharp\csboard-0.8\src\game
c&#58;\dotnetchess\pgn-parse\csharp\csboard-0.8\src\ics
c&#58;\dotnetchess\pgn-parse\csharp\csboard-0.8\src\parser
c&#58;\dotnetchess\pgn-parse\csharp\csboard-0.8\src\viewer
c&#58;\dotnetchess\pgn-parse\csharp\csboard-0.8\src\viewer\plugins\ecodb
c&#58;\dotnetchess\pgn-parse\csharp\csboard-0.8\src\viewer\plugins\gamedb
c&#58;\dotnetchess\pgn-parse\csharp\csboard-0.8\src\viewer\plugins\printer
c&#58;\dotnetchess\pgn-parse\csharp\csboard-0.8\src\viewer\plugins\urlloader
c&#58;\dotnetchess\rnChessBoardControl\rnChessBoardCommonTypes
c&#58;\dotnetchess\rnChessBoardControl\rnChessBoardCommonTypes\Backup
c&#58;\dotnetchess\rnChessBoardControl\rnChessBoardCommonTypes\Backup1
c&#58;\dotnetchess\rnChessBoardControl\rnChessBoardCommonTypes\Backup2
c&#58;\dotnetchess\rnChessBoardControl\rnChessBoardControl
c&#58;\dotnetchess\rnChessBoardControl\rnChessRulesEngine
c&#58;\dotnetchess\rnChessBoardControlDemo
c&#58;\dotnetchess\Sakk\Sakk
c&#58;\dotnetchess\Sakk\Sakk\Babuk
c&#58;\dotnetchess\Sakk\Sakk\Kereses
c&#58;\dotnetchess\Sakk\Sakk\Properties
c&#58;\dotnetchess\Sakk\Sakk\Resources
c&#58;\dotnetchess\Sakk\Sakk\Tabla
c&#58;\dotnetchess\SharpCheckers\src
c&#58;\dotnetchess\SharpChess
c&#58;\dotnetchess\SharpChess\Backup
c&#58;\dotnetchess\SharpChess\Backup1
c&#58;\dotnetchess\SharpChess\Backup2
c&#58;\dotnetchess\SharpChess\Backup2\Classes
c&#58;\dotnetchess\SharpChess\Backup2\Forms
c&#58;\dotnetchess\SharpChess\Classes
c&#58;\dotnetchess\SharpChess\Forms
c&#58;\dotnetchess\SharpChess\Main
c&#58;\dotnetchess\SharpChess\Main\Constants
c&#58;\dotnetchess\spastic
c&#58;\dotnetchess\starter\Chess
c&#58;\dotnetchess\starter\Chess\Components
c&#58;\dotnetchess\starter\Chess\Properties
c&#58;\dotnetchess\starter\Chess\Source
c&#58;\dotnetchess\starter\ChessAIEngine\Engine
c&#58;\dotnetchess\starter\ChessAIEngine\Properties
c&#58;\dotnetchess\tranm_senior_project\tranm_senior_project\TranmReversi\TranmReversi\TranmReversi
c&#58;\dotnetchess\tranm_senior_project\tranm_senior_project\TranmReversi\TranmReversi\TranmReversi\Properties
c&#58;\dotnetchess\uche
c&#58;\dotnetchess\uche\Backup\Uche
c&#58;\dotnetchess\uche\Backup\Uche\Clocks
c&#58;\dotnetchess\uche\Backup\Uche\Graphics
c&#58;\dotnetchess\uche\Backup\Uche\NumberGenerators
c&#58;\dotnetchess\uche\Backup\Uche\OpeningBooks
c&#58;\dotnetchess\uche\Backup\Uche\Parsers
c&#58;\dotnetchess\uche\Backup\Uche\Parsers\PGN
c&#58;\dotnetchess\uche\Backup\Uche\Pieces
c&#58;\dotnetchess\uche\Backup\Uche\Players
c&#58;\dotnetchess\uche\Backup\Uche\Properties
c&#58;\dotnetchess\uche\Clocks
c&#58;\dotnetchess\uche\Graphics
c&#58;\dotnetchess\uche\NumberGenerators
c&#58;\dotnetchess\uche\OpeningBooks
c&#58;\dotnetchess\uche\Pieces
c&#58;\dotnetchess\uche\Players
c&#58;\dotnetchess\uche\Properties
c&#58;\dotnetchess\uche\Uche
c&#58;\dotnetchess\uche\Uche\Clocks
c&#58;\dotnetchess\uche\Uche\Graphics
c&#58;\dotnetchess\uche\Uche\NumberGenerators
c&#58;\dotnetchess\uche\Uche\OpeningBooks
c&#58;\dotnetchess\uche\Uche\Parsers
c&#58;\dotnetchess\uche\Uche\Parsers\PGN
c&#58;\dotnetchess\uche\Uche\Pieces
c&#58;\dotnetchess\uche\Uche\Players
c&#58;\dotnetchess\uche\Uche\Properties
c&#58;\dotnetchess\Valil.Chess
c&#58;\dotnetchess\Valil.Chess.Engine
c&#58;\dotnetchess\Valil.Chess.Engine\Properties
c&#58;\dotnetchess\Valil.Chess.Model
c&#58;\dotnetchess\Valil.Chess.Model\Properties
c&#58;\dotnetchess\Valil.Chess.Opponents
c&#58;\dotnetchess\Valil.Chess.Opponents\Properties
c&#58;\dotnetchess\Valil.Chess.Opponents\Web References\ChessEngineWebService
c&#58;\dotnetchess\Valil.Chess.VisualElements
c&#58;\dotnetchess\Valil.Chess.VisualElements\Properties
c&#58;\dotnetchess\Valil.Chess.WinBoardEngine
c&#58;\dotnetchess\Valil.Chess.WinBoardEngine\Properties
c&#58;\dotnetchess\Valil.Chess.WinFX\Valil.Chess.Model
c&#58;\dotnetchess\Valil.Chess.WinFX\Valil.Chess.Model\Properties
c&#58;\dotnetchess\Valil.Chess.WinFX\Valil.Chess.Opponents
c&#58;\dotnetchess\Valil.Chess.WinFX\Valil.Chess.Opponents\Properties
c&#58;\dotnetchess\Valil.Chess.WinFX\Valil.Chess.Opponents\Web References\ChessEngineWebService
c&#58;\dotnetchess\Valil.Chess.WinFX\Valil.Chess.WinFX
c&#58;\dotnetchess\Valil.Chess.WinFX\Valil.Chess.WinFX.VisualElements
c&#58;\dotnetchess\Valil.Chess.WinFX\Valil.Chess.WinFX.VisualElements\Properties
c&#58;\dotnetchess\Valil.Chess.WinFX\Valil.Chess.WinFX\Properties
c&#58;\dotnetchess\Valil.Chess\Backup
c&#58;\dotnetchess\Valil.Chess\Backup\Properties
c&#58;\dotnetchess\Valil.Chess\Properties
c&#58;\dotnetchess\WoodPusher\src
c&#58;\dotnetchess\xna3dchess\Supernatural3dChess
c&#58;\dotnetchess\xna3dchess\Supernatural3dChess\Properties
c&#58;\dotnetchess\xna3dchess\TrianglePickingPipeline
c&#58;\dotnetchess\xna3dchess\TrianglePickingPipeline\Properties
A web search will cough up source for most of them.

I would start here:
http://chengine.codeplex.com/

chengine is a bitboard Csharp program.