Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
Crafty 25.2 Final
Although it is not our practice to release a new version so soon after a previous release, Bob found a minor bug in the fail-high / fail-low code that we determined made a measurable impact on play - at least 20 ELO maybe more. Crafty is supposed to deal with the case where the first move produces a score, then a later move fails high but then produces a worse score. Crafty is supposed to revert to the better move. An "optimization" made this fail, but it is now fixed. "new" command removed as it is pretty difficult to restore everything once a game has been started. To start a new game, quit crafty and restart. Crafty now notifies xboard/winboard to do this automatically so using those interfaces requires no changes to anything.
- Loading branch information
Showing
14 changed files
with
239 additions
and
137 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,202 @@ | ||
| # To build crafty: | ||
| # | ||
| # You want to set up for maximum optimization, but typically you will | ||
| # need to experiment to see which options provide the fastest code. The | ||
| # following option descriptions explain each option. To use one or more | ||
| # of these options, to the "opt =" line that follows the explanations and | ||
| # add the options you want, being careful to stay inside the single quote | ||
| # marks. | ||
| # | ||
| # -DAFFINITY Include code to set processor/thread affinity on Unix | ||
| # systems. Note this will not work on Apple OS X as it does | ||
| # not support any sort of processor affinity mechanism. | ||
| # WARNING: know what you are doing before using this. If | ||
| # you test multiple copies of Crafty (each copy using just | ||
| # one thread) you can have bogus results because if compiled | ||
| # with -DAFFINITY, even a single-cpu execution will lock led | ||
| # itself onto processor zero (since it only has thread #0) | ||
| # which is probably NOT what you want. This is intended to | ||
| # be used when you run Crafty using a complete dedicated | ||
| # machine with nothing else running at the same time. | ||
| # -DBOOKDIR Path to the directory containing the book binary files. | ||
| # The default for all such path values is "." if you don't | ||
| # specify a path with this macro definition. | ||
| # -DCPUS=n Defines the maximum number of CPUS Crafty will be able | ||
| # to use in a SMP system. Note that this is the max you | ||
| # will be able to use. You need to use the smpmt=n command | ||
| # to make crafty use more than the default 1 process. | ||
| # -DDEBUG This is used for testing changes. Enabling this option | ||
| # greatly slows Crafty down, but every time a move is made, | ||
| # the corresponding position is checked to make sure all of | ||
| # the bitboards are set correctly. | ||
| # -DEPD If you want full EPD support built in. | ||
| # -DLOGDIR Path to the directory where Crafty puts the log.nnn and | ||
| # game.nnn files. | ||
| # -DNODES This enables the sn=x command. Crafty will search until | ||
| # exactly X nodes have been searched, then the search | ||
| # terminates as if time ran out. | ||
| # -DPOSITIONS Causes Crafty to emit FEN strings, one per book line, as | ||
| # it creates a book. I use this to create positions to use | ||
| # for cluster testing. | ||
| # -DRCDIR Path to the directory where we look for the .craftyrc or | ||
| # crafty.rc (windows) file. | ||
| # -DSKILL Enables the "skill" command which allows you to arbitrarily | ||
| # lower Crafty's playing skill so it does not seem so | ||
| # invincible to non-GM-level players. | ||
| # -DSYZYGY This enables syzygy endgame tables (both WDL and DTC) | ||
| # -DTBDIR Path to the directory where the endgame tablebase files | ||
| # are found. default = "./TB" | ||
| # -DTEST Displays evaluation table after each move (in the logfile) | ||
| # -DTRACE This enables the "trace" command so that the search tree | ||
| # can be dumped while running. | ||
| # -DUNIX This identifies the target O/S as being Unix-based, if this | ||
| # option is omitted, windows is assumed. | ||
| # | ||
| # Note: If you compile on a machine with the hardware popcnt | ||
| # instruction, you should use the -mpopcnt compiler option | ||
| # to make the built-in intrinsic use the hardware rather than | ||
| # the "folding" approach. That is the default in this | ||
| # Makefile so if you do NOT have hardware popcnt, remove all | ||
| # of the -mpopcnt strings in the Makefile lines below. | ||
| # | ||
| default: | ||
| $(MAKE) -j unix-clang | ||
| help: | ||
| @echo "You must specify the system which you want to compile for:" | ||
| @echo "" | ||
| @echo "make unix-clang Unix w/clang compiler (MacOS usually)" | ||
| @echo "make unix-gcc Unix w/gcc compiler" | ||
| @echo "make unix-icc Unix w/icc compiler" | ||
| @echo "make profile profile-guided-optimizations" | ||
| @echo " (edit Makefile to make the profile" | ||
| @echo " option use the right compiler)" | ||
| @echo "" | ||
|
|
||
|
|
||
| quick: | ||
| $(MAKE) target=UNIX \ | ||
| CC=clang \ | ||
| opt='-DSYZYGY -DTEST -DTRACE -DCPUS=4' \ | ||
| CFLAGS='-mpopcnt -Wall -Wno-array-bounds -pipe -O3' \ | ||
| LDFLAGS='$(LDFLAGS) -lstdc++' \ | ||
| crafty-make | ||
|
|
||
| unix-gcc: | ||
| $(MAKE) -j target=UNIX \ | ||
| CC=gcc \ | ||
| opt='-DSYZYGY -DTEST -DCPUS=4' \ | ||
| CFLAGS='-Wall -Wno-array-bounds -pipe -O3 -fprofile-use \ | ||
| -mpopcnt -fprofile-correction -pthread' \ | ||
| LDFLAGS='$(LDFLAGS) -fprofile-use -pthread -lstdc++' \ | ||
| crafty-make | ||
|
|
||
| unix-gcc-profile: | ||
| $(MAKE) -j target=UNIX \ | ||
| CC=gcc \ | ||
| opt='-DSYZYGY -DTEST -DCPUS=4' \ | ||
| CFLAGS='-Wall -Wno-array-bounds -pipe -O3 -fprofile-arcs \ | ||
| -mpopcnt -pthread' \ | ||
| LDFLAGS='$(LDFLAGS) -fprofile-arcs -pthread -lstdc++ ' \ | ||
| crafty-make | ||
|
|
||
| unix-clang: | ||
| @/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/llvm-profdata merge -output=crafty.profdata *.profraw | ||
| $(MAKE) -j target=UNIX \ | ||
| CC=clang \ | ||
| opt='-DSYZYGY -DTEST -DCPUS=4' \ | ||
| CFLAGS='-Wall -Wno-array-bounds -pipe -O3 \ | ||
| -mpopcnt -fprofile-instr-use=crafty.profdata' \ | ||
| LDFLAGS='$(LDFLAGS) -fprofile-use -lstdc++' \ | ||
| crafty-make | ||
|
|
||
| unix-clang-profile: | ||
| $(MAKE) -j target=UNIX \ | ||
| CC=clang \ | ||
| opt='-DSYZYGY -DTEST -DCPUS=4' \ | ||
| CFLAGS='-Wall -Wno-array-bounds -pipe -O3 \ | ||
| -mpopcnt -fprofile-instr-generate' \ | ||
| LDFLAGS='$(LDFLAGS) -fprofile-instr-generate -lstdc++ ' \ | ||
| crafty-make | ||
|
|
||
| unix-icc: | ||
| $(MAKE) -j target=UNIX \ | ||
| CC=icc \ | ||
| opt='-DSYZYGY -DTEST -DCPUS=4' \ | ||
| CFLAGS='-Wall -w -O2 -prof_use -prof_dir ./prof -fno-alias \ | ||
| -mpopcnt -pthread' \ | ||
| LDFLAGS='$(LDFLAGS) -pthread -lstdc++' \ | ||
| crafty-make | ||
|
|
||
| unix-icc-profile: | ||
| $(MAKE) -j target=UNIX \ | ||
| CC=icc \ | ||
| opt='-DSYZYGY -DTEST -DCPUS=4' \ | ||
| CFLAGS='-Wall -w -O2 -prof_gen -prof_dir ./prof -fno-alias \ | ||
| -mpopcnt -pthread' \ | ||
| LDFLAGS='$(LDFLAGS) -pthread -lstdc++ ' \ | ||
| crafty-make | ||
|
|
||
| profile: | ||
| @rm -rf *.o | ||
| @rm -rf log.* | ||
| @rm -rf game.* | ||
| @rm -rf prof | ||
| @rm -rf *.gcda | ||
| @mkdir prof | ||
| @touch *.c *.h | ||
| $(MAKE) -j unix-clang-profile | ||
| @echo "#!/bin/csh" > runprof | ||
| @echo "./crafty <<EOF" >>runprof | ||
| @echo "bench" >>runprof | ||
| @echo "mt=0" >>runprof | ||
| @echo "quit" >>runprof | ||
| @echo "EOF" >>runprof | ||
| @chmod +x runprof | ||
| @./runprof | ||
| @rm runprof | ||
| @touch *.c *.h | ||
| $(MAKE) -j unix-clang | ||
|
|
||
|
|
||
| # | ||
| # one of the two following definitions for "objects" should be used. The | ||
| # default is to compile everything separately. However, if you use the | ||
| # definition that refers to crafty.o, that will compile using the file crafty.c | ||
| # which #includes every source file into one large glob. This gives the | ||
| # compiler max opportunity to inline functions as appropriate. You should try | ||
| # compiling both ways to see which way produces the fastest code. | ||
| # | ||
|
|
||
| #objects = main.o iterate.o time.o search.o quiesce.o evaluate.o thread.o \ | ||
| repeat.o hash.o next.o history.o movgen.o make.o unmake.o attacks.o \ | ||
| see.o tbprobe.o boolean.o utility.o book.o drawn.o epd.o \ | ||
| epdglue.o init.o input.o autotune.o interrupt.o option.o output.o \ | ||
| ponder.o resign.o root.o learn.o setboard.o test.o validate.o \ | ||
| annotate.o analyze.o evtest.o bench.o edit.o data.o | ||
|
|
||
| objects = crafty.o | ||
|
|
||
| # Do not change anything below this line! | ||
|
|
||
| opts = $(opt) -D$(target) | ||
|
|
||
| crafty-make: | ||
| @$(MAKE) opt='$(opt)' CFLAGS='$(CFLAGS)' crafty | ||
|
|
||
| crafty.o: *.c *.h | ||
|
|
||
| crafty: $(objects) | ||
| $(CC) $(LDFLAGS) -g -o crafty $(objects) -lm $(LIBS) | ||
|
|
||
| evaluate.o: evaluate.h | ||
|
|
||
| clean: | ||
| -rm -f *.o crafty | ||
|
|
||
| $(objects): chess.h data.h | ||
|
|
||
| .c.o: | ||
| $(CC) $(CFLAGS) $(opts) -c $*.c | ||
|
|
||
| .s.o: | ||
| $(AS) $(AFLAGS) -o $*.o $*.s |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.