Brutus

a FPGA based chess entity developed by Chrilly Donninger, supported by Alex Kure and Ulf Lorenz. Brutus consists of usual PCs with [|Xilinx Virtex] FPGA boards inside, and was designed in dependence on the Belle and Deep Thought chess machines. In fact, it was Ken Thompson who initiated and supported the FPGA chess project. After the WCCC 2003, Brutus evolved to Hydra. || toc =How it started= In early 2000, Ken Thompson told his friend Frederic Friedel about interesting hardware developments concerning FPGAs, and asked whether he was aware of a programmer who could build such a kind of "People's Deep Blue". ChessBase, surely interested in the commercial aspects of such a machine, engaged Chrilly Donninger for the development of a FPGA based chess hardware and program. The work on Brutus started in October 2000, one year later it could calculate its first position, and in January 2002, it played its first game. Soon, programmer, chess expert and opening book author Alex Kure, and in November 2002, Ulf Lorenz, responsible for the surrounding distributed search, joined the Brutus team, with ChessBase and the University of Paderborn cooperating on the project.
 * Home * Engines * Brutus**
 * [[image:Portrait_Brutus_Massimo.jpg link="http://en.wikipedia.org/wiki/File:Portrait_Brutus_Massimo.jpg"]] ||~ || **Brutus**,
 * Brutus ||~ ||^ ||

=Etymology= The name [|Brutus] was chosen by Matthias Wüllenweber due to his spot on [|Ancient Rome]. The idea was a "People's Deep Blue" to dethrone "[|Caesar]" [|Garry Kasparov].

=Description= Brutus partially ran on PCs and partially on FPGA cards. Opposed to a pure move generation approach, and to diminish [|PCI] communication overhead with the PC, the hardware was designed also to perform a kind of iterative search. Brutus’ FPGA definition was written in the [|Verilog] [|hardware description language], and uses 67 out of 96 BlockRAMs, 534 of 24,576 Flip-Flops, and 18,403 of 24,576 [|LUTs] of the Virtex board. 
 * [[image:brutusfpga2002.jpg width="580" link="http://www.chessbase.de/nachrichten.asp?newsid=648"]] ||
 * Brutus on a [|Xilinx Virtex] V405E FPGA development board ||

FPGA Search
Brutus calculates the last 3 plies of an n-ply search on the FPGA side, inclusively quiescence search and evaluations. It essentially contains a big piece of combinatorial logic, controlled by a [|finite state machine] (FSM) with 54 states for the search. An upper bound for the number of cycles per search node is 9. The Figure below shows a simplified version of the FSM that controls the search on the FPGA card. States must not be interpreted as time points when functions are called. E.g. the move generator and the evaluation are never called in that sense. They are running all the time.


 * [[image:FPGASearch.JPG width="580"]] ||
 * Search in Hardware: Simplified [|state diagram] ||

Evaluation
The evaluation consists of many small features which are summed up by one large adder tree. All features are determined simultaneously. 

Move Generation
The Belle like move generator consists of the generate **aggressor** module and the generate **victim** module, both instantiate 64 square modules, one for each square. The squares send piece-signals if any, respectively forwarding the signals of sliding pieces. Each square can output the signal ’victim found’ to indicate the ’victim’ is target square of a pseudo-legal move. The collection of all ’victim found’ signals is the input for a comparator tree, an arbiter, which selects the most attractive, not yet examined victim. The generate aggressor module takes the arbiter’s output as input and sends the signal of a super-piece from the target to find one or more origin squares. Selection criteria are the values of attacked pieces and whether or not a move is a killer move. 

Distributed Search
The most sensitive and important part of Brutus search algorithm is distributed among several standard PCs, connected via a high-speed [|Myrienet]. One of the processors receives the current chess position and basically begins a sequential alpha beta search. Idle processors send work requests randomly around the net - when a working processor captures such a request, it distributes part of his own (sub-) problem. Using a tricky [|messaging system] between the processors, the work is dynamically balanced with little search overhead. After a while, all processors have something useful to do. A processor generates approximately 100,000 searches on a FPGA board per second.

=Tournament Play= A Brutus prototype had its debut at the IPCCC 2002 with an expected 50% score, but Brutus quickly improved and already played a strong WCCC 2002 in [|Maastricht], where it became third only loosing a spectacular game from later champion Junior. At the IPCCC 2003, Brutus became third again, then, in August 2003, it won the 11th Grandmaster Tournament in [|Lippstadt] with 9 out of 11, and seemed dedicated to win the upcoming WCCC 2003 in [|Graz], but after two consecutive losses from Shredder and Deep Junior in round 5 and 6, Brutus finished disappointing fourth. As a consequence, ChessBase went out of the project, which then continued under the patronage of the Pal Group of Companies under its new name Hydra.

=Photos & Games=

IPCCC 2002
code [Event "IPCCC 2002"] [Site "Paderborn GER"] [Date "2002.03.03"] [Round "07"] [White "Brutus-XPa"] [Black "Fritz"] [Result "0-1"] [ECO "E34"]
 * [[image:AlexChrilly.JPG width="640" link="http://chess.fsv.de/Pics/Paderborn2002.htm"]] ||
 * IPCCC 2002: Alex Kure, Chrilly Donninger, Mathias Feist, Brutus vs. Fritz 0 - 1 ||

1.d4 Nf6 2.c4 e6 3.Nc3 Bb4 4.Qc2 d5 5.cxd5 Qxd5 6.Nf3 Qf5 7.Qxf5 exf5 8.a3 Be7 9.Bf4 c6 10.e3 Nbd7 11.Bc4 Nb6 12.Ba2 Be6 13.Be5 h6 14.Ke2 a5 15.Rhc1 a4 16.Kf1 O-O 17.Ne2 Ne4 18.Bxe6 fxe6 19.Nf4 Kf7 20.Bxg7 Kxg7 21.Nxe6+ Kf6 22.Nxf8 Bxf8 23.Ke2 Bd6 24.g3 h5 25.Nh4 Nd5 26.f3 Ng5 27.Kd3 Rd8 28.e4 Ne7 29.Ke3 Bc7 30.Nxf5 Nxf5+ 31.exf5 h4 32.f4 Re8+ 33.Kd3 Nf3 34.d5 Nxh2 35.dxc6 hxg3 36.cxb7 Bxf4 37.Rc4 Kxf5 38.Rxa4 g2 39.Ra5+ Kf6 40.Ra6+ Kf7 41.Ra4 Bb8 42.Ra5 Kf6 43.Ra6+ Kf5 44.Ra5+ Kf4 45.Ra6 Nf3 46.Rf6+ Kg3 47.Rg6+ Kf2 48.Rg7 g1=R 49.Raxg1 Nxg1 50.Rf7+ Nf3 51.a4 Kg3 52.Rg7+ Kf4 53.Rf7+ Kg4 54.Rh7 Ng5 55.Rd7 Kf5 56.a5 Ke6 57.Rd4 Nf3 58.Ra4 Kd5 59.a6 Ba7 60.Kc3 Re3+ 61.Kc2 Nd4+ 62.Kd2 Nc6 63.Kc2 Kc5 64.Kd2 Kb5 65.Ra1 Re7 66.Rc1 Rd7+ 67.Ke1 Nb4 68.Ke2 Kxa6 0-1 code

WCCC 2002
WCCC 2002, round 6, Brutus - Deep Junior : code [Event "WCCC 2002"] [Site "Maastricht, The Netherlands"] [Date "2002.07.09"] [Round "6"] [White "Brutus"] [Black "Deep Junior"] [Result "0-1"]

1.e4 c5 2.Nf3 d6 3.d4 cxd4 4.Nxd4 Nf6 5.Nc3 a6 6.Be2 e5 7.Nb3 Be7 8.O-O O-O 9.Kh1 Qc7 10.f4 b5 11.fxe5 dxe5 12.Bg5 Nbd7 13.Bd3 Bb7 14.Qf3 b4 15.Ne2 a5 16.Ng3 g6 17.Rad1 a4 18.Nd2 Ba6 19.Ne2 Rfc8 20.b3 Kg7 21.Qh3 h5 22.Qf3 Qc6 23.Bc4 Bxc4 24.Nxc4 Qe6 25.c3 axb3 26.axb3 Rxc4 27.bxc4 b3 28.h3 b2 29.Ng3 Qxc4 30.Rb1 Rb8 31.Rfd1 Rb3 32.Rd3 Nc5 33.Re3 Rb6 34.Re2 Na4 35.Rd2 Qa2 36.Rdd1 Rc6 37.Ne2 Qc4 38.Rf1 Rb6 39.Rbd1 Kf8 40.Bh6+ Ke8 41.Bg7 Qxe4 42.Bxf6 Qxf3 43.gxf3 Rxf6 44.Rb1 Ba3 45.f4 exf4 46.Rf3 g5 47.c4 Bc5 48.Rd3 g4 49.Rb3 Kd7 50.Rf1 f3 51.Ng3 Rb6 52.Rxb6 Nxb6 0-1 code 

WCCC 2003
code [Event "WCCC 2003"] [Site "Graz, Austria"] [Date "2003.11.27"] [Round "8"] [White "Brutus"] [Black "Diep"] [Result "1-0"]
 * [[image:BrutusDiep.jpg width="640" link="http://www.chessbase.com/newsprint.asp?newsid=1331"]] ||
 * WCCC 2003, Brutus - Diep, Vincent Diepeveen, Ulf Lorenz and Chrilly Donninger ||

1.e4 c5 2.Nf3 d6 3.d4 cxd4 4.Nxd4 Nf6 5.Nc3 a6 6.Be3 e5 7.Nb3 Be6 8.f3 Nbd7 9.Qd2 b5 10.a4 b4 11.Nd5 Bxd5 12.exd5 Nb6 13.Bxb6 Qxb6 14.a5 Qb7 15.Bc4 Be7 16.Ra4 Rb8 17.Nc1 O-O 18.b3 Bd8 19.Na2 Nd7 20.Kd1 Qc8 21.Nxb4 Nc5 22.Ra2 Bg5 23.Nc6 Qxc6 24.dxc6 Bxd2 25.Kxd2 Rfc8 26.Bd5 Ne6 27.Rd1 Nd8 28.c3 Kf8 29.g4 Ke7 30.h4 Rc7 31.Ra4 f6 32.h5 Nxc6 33.Rc4 Kd7 34.b4 h6 35.f4 exf4 36.Rxf4 Ne5 37.Re1 Rb5 38.Bb3 Rbb7 39.Re3 Rb8 40.Rd4 Rbc8 41.Bd5 Rc4 42.Rde4 R4c7 43.Kc2 Rb8 44.Rd4 Rb5 45.Kb3 Nc6 46.Be6+ Ke7 47.Bc4+ Re5 48.Rdd3 Ra7 49.Bd5 Nd8 50.Re4 Ne6 51.Rd2 Kd7 52.c4 Nc7 53.Red4 Nxd5 54.Rxd5 Rxd5 55.Rxd5 Ke6 56.Kc3 Ra8 57.Kd4 g6 58.hxg6 Rg8 59.c5 dxc5+ 60.bxc5 Rxg6 61.c6 Rxg4+ 62.Kc5 Ra4 63.Rd8 Rxa5+ 64.Kb6 Ra2 65.c7 Rc2 66.c8=Q+ Rxc8 67.Rxc8 Kf5 68.Rh8 Kg5 69.Kxa6 h5 70.Kb5 h4 71.Kc4 Kg4 72.Kd4 Kg3 73.Ke3 Kg4 74.Rh7 h3 75.Rh6 f5 76.Rg6+ Kh4 77.Kf4 1-0 code

=See also=
 * Arthurian legend
 * Belle
 * Comics
 * Hydra
 * Legend

=Namesake=
 * Brutus by Stephan Vermeire

=Publications=
 * Eric Hallsworth (**2002**). //The Brutus Project//. Selective Search 101, pp. 33, [|pdf] hosted by Mike Watters
 * [|Wenzel Mraček] (**2003**). //Zu Besuch bei Christian „Chrilly“ Donninger//. [|pdf] (German)
 * Chrilly Donninger, Alex Kure, Ulf Lorenz (**2004**). //Parallel Brutus: The First Distributed, FPGA Accelerated Chess Program//. [|IPDPS’04]

=Forum Posts=
 * [|Any details about Brutus?] by Peter McKenzie, CCC, February 27, 2002
 * [|BRUTUS] by Elvis, ChessBits-Computerschachforum, February 28, 2002 (German)
 * [|Junior Verses Brutus --> Rxc4 "The best PC chess move ever?"] by Dann Corbit, CCC, July 31, 2002
 * [|Suturb - Bob] by Frank Phillips, CCC, January 22, 2003
 * [|Re: What happens to the BRUTUS Project by Dr. Donninger ?] by Chrilly Donninger, CCC, April 01, 2003
 * [|Status of Brutus?] by O. Veli, CCC, July 26, 2003
 * [|Brutus has won the Lippstadt Tournament] by Tomas Casanovas Martinez, CCC, August 16, 2003
 * [|Go Brutus!!] by Pete Rihaczek, CCC, November 24, 2003

=External Links=

Chess

 * [|Brutus' ICGA Tournaments]
 * [|Comp Brutus chess games - 365Chess.com]
 * [|Brutus - Was ist das denn?], ChessBase News, March 07, 2002 (German)
 * [|What is Brutus?], ChessBase News, March 20, 2002
 * [|Parallele Schachprogrammierung], ChessBase News, September, 16, 2003 (German)
 * [|Schach + PC - Brutus] by Peter Schreiner, [|Schachclub Leinzell], April 2002 (German)
 * [|Brutus and Hydra] by Ulf Lorenz, University of Paderborn

Maastricht

 * [|Vormärz] by Chrilly Donninger, Old CSVN site (German)

Lippstadt

 * [|Brutus mit Auftaktsieg], ChessBase News, August 08, 2003 (German)
 * [|Brutus in Lippstadt mit zweitem Sieg], ChessBase News, August 09, 2003 (German)
 * [|Grandmasters brutalised in Lippstadt], ChessBase News, August 10, 2003
 * [|Spielen wie Tal], ChessBase News, August 10, 2003 (German)
 * [|Brutus auch nur ein Mensch], ChessBase News, August 11, 2003 (German)
 * [|Brutus remis], ChessBase News, August 12, 2003 (German)
 * [|Brutus reloaded], ChessBase News, August 13, 2003 (German)
 * [|Brutus: Held mit programmierter Götterdämmerung?], ChessBase News, August 14, 2003 (German)
 * [|Brutus vor Maiwald und Cyborski], ChessBase News, August 15, 2003 (German)
 * [|Brutus marschiert], ChessBase News, August 16, 2003 (German)
 * [|Brutus mit GM-Norm], ChessBase News, August 17, 2003 (German)

Graz

 * [|Brutus defeats Fritz in round four], ChessBase News, November 24, 2003
 * [|Computer Championship: Shredder stops Brutus], ChessBase News, November 25, 2003

Brutus
> [|Assassination of Julius Caesar from Wikipedia] > [|Et tu, Brute? from Wikipedia]
 * [|Brutus (disambiguation) from Wikipedia]
 * [|Marcus Junius Brutus the Younger from Wikipedia]
 * [|Lucius Junius Brutus from Wikipedia]
 * [|Brutus of Troy from Wikipedia]
 * [|List of Arthurian characters from Wikipedia]
 * [|Bluto from Wikipedia]
 * [|Fifty Years With Brutus! • Animated Views]
 * [|Brutus cluster from Wikipedia] of ETH Zurich
 * [|Brutalist architecture from Wikipedia]

=References= =What links here?= include page="Brutus" component="backlinks" limit="40"
 * Up one Level**