BIG Guide: Compile Crafty Chess Engine with gcc under Windows

( QUICK Guide - HTML ) ( QUICK Guide in - TXT ) ( BIG Guide in - TXT )

---------------------------------------------------------------
How to Compile Crafty 19.6 with Dev-Cpp (gcc/g++) under Windows
---------------------------------------------------------------
                         A "Cook Book"

I used version 4.9.8.5 (a stable beta of version 5) incl. gcc/g++ 3.2
('mingw special 20020817-1') under Win 2000 and an AMD Athlon 900 MHz.

Successfully tested with Crafty versions 19.2 and 19.6.

No change of source code necessary!                   Date: 13.12.2003



CONTENTS

Introduction

Ch. 1: Ways to Compile Crafty
       1.1 - Very Quick: Compile from Command Prompt Window
       1.2 - Using the IDE GUI of Dev-C++
             1.2.1 - Further Speed Optimisations
       1.3 - Using Your Own Makefile from the IDE GUI

Ch. 2: How to Evaluate Crafty Calculation Speed

Ch. 3: Execution Speed Measurements for Different Compiler Settings



Introduction

The quickest and simplest way to get the best optimised code (.exe
file) is to simply follow the chapters 1 and 1.1.
[of course, better optimisation settings might be possible. If you
find some, please let me know.]

You only need to read ch. 1.2 and 1.3 if you are interested in using
the Dev-C++ IDE, or if you (unexpectedly) face some problems when
following the steps of ch. 1.1.

Chapter 2 explains how the execution speed of the generated exe file
can be measured.

Chapter 3 shows such measurement results made by myself.

[To List of Contents]

Ch. 1: Ways to Compile Crafty

Preparation steps:

(1) Goto www.bloodshed.net/dev/devcpp.html and
- Download devcpp4980.exe from
    http://www.c-view.org/soft/devcpp/downloads/devcpp4980.exe or
    http://mapage.noos.fr/dev5/devcpp4980.exe or
    http://prdownloads.sourceforge.net/dev-cpp/devcpp4980.exe.

- Download latest update (currently [13.12.2003] ver 4.9.8.5) from
    http://bloodshed.net/dev/devcpp4985.zip
  [this is a DELTA to above install, so you need both!]

- Install Dev-C++ to
    C:\Dev-Cpp\
  Note: This installation process consists of 2 steps:
    - First install devcpp4980.exe as usual.
    - Then copy the contents of devcpp4985.zip to the
      corresponding installation target directory and
      sub-directories.
      (This means some older files are overwritten)

(2) Download Crafty 19.6 from
   ftp://ftp.cis.uab.edu/pub/hyatt/v19/crafty-19.6.zip

(3) Extract the contents of crafty-19.6.zip to a working directory,
for example to
   C:\c-files\crafty\

(3-b) Copy the contents of *this* zip file, i.e. the files
   - Makefile
   - Makefile_tiny
   - Makefile_org_crafty_1906_modified
   - Makefile_org_crafty_1906
   - Compile_Crafty_with_Dev-Cpp.bat
   - How_to_compile_crafty_19.6_under_Dev-Cpp.txt
   - How_to_compile_crafty_19.6_under_Dev-Cpp.html
   - Make_a_crafty1906.exe-very_quickly.txt
   - Make_a_crafty1906.exe-very_quickly.html
 to the same directory, e.g. to "C:\c-files\crafty\".
 This will overwrite the original file "Makefile" that was
 contained in crafty-19.6.zip. This is intended!
 (Note that the file "Makefile_org_crafty_1906" is an
 identical copy of this original makefile.)

[To List of Contents]

1.1 - Very Quick: Compile from Command Prompt Window

In your Crafty source code directory, simply double-click
 
   "Compile_Crafty_with_Dev-Cpp.bat".
 
--> This will compile and link the crafty source code and
    create an executable "crafty.exe".

    FINISHED!

Note: If Dev-C++ was installed to another directory than C:\Dev-Cpp\,
      then the "Compile_Crafty_with_Dev-Cpp.bat" must me modified
      accordingly.

Note: You should get 7 warnings altogether, and zero errors.

Note: The .exe file generated here is the same as the one generated
      when following the instructions of ch. 1.3. Both are best
      optimised according to my knowledge.

[To List of Contents]

1.2 - Using the IDE GUI of Dev-C++

After the above preparation steps (1) to (3-b), continue as follows:
(4) Start the GUI Integrated Development Environment (IDE) of
Dev-CPP by starting C:\Dev-Cpp\devcpp.exe.

(5) Create a new project:
 - MENU: File -> New -> Project...
   -> select Console application
   -> find an appropriate project name, e.g. crafty1906
   -> select C++ -Project (NOT C-Project, because
      otherwise, later the linking will fail!)
   -> click Ok
 - Save the project file for example under
   c:\c-files\crafty\crafty1906.dev
 --> A new project comes up with a default file "main.c"
 --> In the project browser on the left, expand the tree and right-
     click on main.c and select "remove file" and then click "do
     not save"
 --> Now you should have a completely empty project --> very well!

(6) Include source files to the project:
 - On the left, right-click on the project and select "Add To
   Project"
   --> Mark all .c and .h and .cpp files in "c:\c-files\crafty\",
       EXCEPT crafty.c and dgtdrv.c (!!)
       Note: These two files are not needed at all! If included in
       the project, they will cause compilation errors!
 --> Now the project tree on the left should contain all those
     files, 62 files altogether. Ok? -> very well!

(7) Continue as follows:
 - Goto MENU -> Project -> Project Options
 - Select the second pane "Files"
   -> Now all .c, .h an the one .cpp file should be checked for the
      boxes "Include in Compilation", "Include in linking" and
      "Compile file as C++".
   -> Mark all files *except* egtb.cpp and UNcheck the box "Compile
      file as C++". Now all files should be unchecked for this,
      except "egtb.cpp", which is still checked to be compiled as
      C++.
 - Select the 4th pane "Parameters"
   -> Add the following command line option to BOTH the C-Compiler
      (left field) and the C++ compiler (middle field):
      "-DNT_i386" (without quotation marks)
      Remark: This causes the variable "NT_i386" to be defined when
              the pre-compiler starts. This is necessary for
              compiling the code for the Windows target.
   --> click Ok.
 --> Now your project is well configured. If you want, you can save
     the project now, to save the changes.

(8) Compile the project by clicking the compile button or pressing
CTRL-F9.

(9) Now an exe-file should be created after some time, for example
  c:\c-files\crafty\crafty1906.exe
Note: You should get 7 warnings altogether, and zero errors.

[To List of Contents]

1.2.1 - Further Speed Optimisations

Execution speed of the generated exe file can (and should!) be
increased by this:
- MENU -> Project -> Project Options:
  Select the 3rd pane "Compiler -> Optimisation -> Further
  Optimisations":
  --> Select "Best Optimisation"->Yes.
- Select the 4th pane "Parameters"
  -> Add the following command line option to BOTH the C-Compiler
     (left field) and the C++ compiler (middle field)
     [in addition to -DNT_i386, which is already there]:
     "-fomit-frame-pointer" (without quotation marks)
- click Ok

Now, possibly delete the *.o files and delete or rename the exe file
of your directory and compile another time. You exe file generated now
should be significantly faster then before.

Even better speed-optimised code (compare test list of ch. 3) is
generated when using your own makefile, as described in ch 1.1 (see
above) or ch. 1.3 (see below). Note that both alternatives produce
identical .exe-files.

[To List of Contents]

1.3 - Using Your Own Makefile from the IDE GUI

- If not already done, do the steps (1) to (6) of ch. 1 / ch. 1.2.
- Now go to MENU -> Project -> Project Options -> Select the pane
  "Makefile"
- Check the box "Use custom makefile"
- Select the makefile in the field below.

  ATTENTION: The makefile must have the name "Makefile" literally!
     Otherwise, if it is called for example "MakefCraftyDevcpp", you
     will get an error! Therefore, rename or delete another unwanted
     makefile called "Makefile" and substitute it by your own
     makefile called nothing different but "Makefile".

  The makefile to be used can be either the file
     "Makefile"
  provided along with this "cook book", or the file
     "Makefile_org_crafty_1906_modified"
  (after renaming it to "Makefile" of course).

Note: The .exe file generated here is the same as the one generated
      when following the instructions of ch. 1.1. Both are best
      optimised according to my knowledge.

[To List of Contents]

Ch. 2: How to Evaluate Crafty Calculation Speed

The following tests are designed to compare different compiled
versions of Crafty on the same machine for comparing calculation speed
differences.

- Copy the crafty.exe file to be measured to a location where it is
  completely standalone, i.e. without any opening book accessible,
  i.e. no book.bin files in the same directory as the exe file.
- Start the exe -> a DOS box opens.

- Test 1: (repeat 2 or 3 times to see how it varies)
  - type "perf" <enter>

    --> this will show a performance figure. The higher the better.
        (or a number of seconds: The lower the better)

- Test 2: (repeat 2 or 3 times to see how it varies)
  - type "noise 10000000" <enter> [suppress display while thinking]
  - type "st 2" <enter>           [set fixed thinking time of 2 sec]
  - type "e2e4" <enter>           [make a starting move e2-e4]
    --> Now Crafty will think for 2 seconds.
    --> Read the number for "nodes" and "evals". Higher is better!

Some of these test results are presented in ch. 3.

[To List of Contents]

Ch. 3: Execution Speed Measurements for Different Compiler Settings

Some measurement results.

PC Configuration: AMD Athlon 900, 256 MByte RAM, Windows 2000

CRAFTY 19.6

"perf"
(smaller=better)

nodes per 2sec
(larger=better)

gener.

made/ unmade

nodes

evals

Compiler Setting:

(performance in percent of blue reference)

Compile from IDE, no optimisations

3.49s
(66%)

12.04s
(63%)

339860
(63%)

154975
(66%)

Compile from IDE, set
"Best Optimisation" (corresponding
to option –O3)

2.47s
(93%)

8.47s
(90%)

484818
(90%)

212096
(91%)

Compile from IDE, set
"Best Optimisation" and
"-fomit-frame-pointer"

2.40s
(96%)

7.78s
(98%)

478781
(89%)

208939
(89%)

Use own Makefile, as above, but
w/o "-DUSE_ATTACK_FUNCTIONS"

2.44s
(94%)

7.76s
(98%)

493939
(92%)

215116
(92%)

Use own Makefile, as above, but
w/o "-fomit-frame-pointer"

2.34s
(98%)

8.37s
(91%)

493939
(92%)

215116
(92%)

Use own Makefile, as above, but
with "-m486"

2.28s
(101%)

8.03s
(95%)

533160
(99%)

232414
(99%)

Use own Makefile, as above
(acc. to ch. 1.1. or ch. 1.3)

2.30s
(100%)

7.62s
(100%)

536177
(100%)

233882
(100%)



For Comparison:

CRAFTY 19.2

 

 

 

 

Compiled with own makefile above:

2.32s
(100%)

7.64s
(100%)

534457
(100%)

256886
(100%)

Executable downloaded
from Crafty's programmer's
website at ftp://ftp.cis.uab.edu/
pub/hyatt/v19/crafty-19.02.exe

(probably compiled with MSVC)

2.07s

(112%)

6.29s

(121%)

655082

(123%)

310738

(121%)

--> MSVC is faster than gcc 3.2
    by... (for Crafty 19.2)

12%

21%

23%

21%


[To List of Contents]