-
Notifications
You must be signed in to change notification settings - Fork 10
/
readme.txt
147 lines (115 loc) · 5.61 KB
/
readme.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
Gaviota Tablebases Probing Code API
Copyright (c) 2010-2011 Miguel A. Ballicora
-----------------------------------------------------------------------------
This software provides C code to probe the Gaviota Endgame Tablebases.
It is released under then X11 ("MIT") license (see license.txt).
This API (Application Programming Interface) is designed to be as portable
as possible. Functions could be called from Linux or Windows.
Most likely it will work in other operating systems but that has not been
tested. This API is a beta version and as such, it is not guaranteed any
type of backward compatibility or to remain untouched, at least until
version 1.0 is released.
A very small set of tablebase files is included in this distribution
for testing purposes (only 3 pieces). They are compressed with four
different compression schemes. For a more complete set, please download
Gaviota from
http://sites.google.com/site/gaviotachessengine/
and generate the 4 and 5 piece tablebases. Instructions how to generate
and compressed them are in the website. More information can always be found:
http://sites.google.com/site/gaviotachessengine/Home/endgame-tablebases-1
Alternatively, already compressed tablebase files (ready to go!) can be
downloaded from
http://www.olympuschess.com/egtb/gaviota/ (Many thanks to Josh Shriver)
"tbprobe" is distributed here as a tablebase probing example. The current API
is relatively "low level" to optimize performance. We hope the small program
tbprobe is self explanatory. A thorough and detailed documentation may be
released later. However, it seems that everybody who attempted to implement
this probing code was successful relatively easy.
We plan to support an interface with a FEN notation; thus, it is expected
that some other functions maybe added to this API.
Four different types of compression are included. It is possible that in the
future some other compression schemes could be provided, but only if they
represent a serious improvement in speed or memory size. To maximize
backward compatibility between versions of programs and TBs, it is strongly
recommended that engine developers always support at least scheme 4 (tb_CP4),
which is considered the default at this point. For that reason, it is
suggested that testers always have a set of TBs compressed with scheme 4.
This API is designed to be multithreading friendly. Regions where different
threads could access data from this API were protected with a mutex to avoid
problems.
-------------------------- How to use this API ------------------------------
To include this code in any engine or GUI, the following files should be
compiled and linked:
gtb-probe.c
gtb-dec.c
gtb-att.c
sysport/sysport.c
compression/wrap.c
compression/huffman/hzip.c
compression/liblzf/lzf_c.c
compression/liblzf/lzf_d.c
compression/zlib/zcompress.c
compression/zlib/uncompr.c
compression/zlib/inflate.c
compression/zlib/deflate.c
compression/zlib/adler32.c
compression/zlib/crc32.c
compression/zlib/infback.c
compression/zlib/inffast.c
compression/zlib/inftrees.c
compression/zlib/trees.c
compression/zlib/zutil.c
compression/lzma/LzmaEnc.c
compression/lzma/LzmaDec.c
compression/lzma/Alloc.c
compression/lzma/LzFind.c
compression/lzma/Lzma86Enc.c
compression/lzma/Lzma86Dec.c
compression/lzma/Bra86.c
The following files will be "included"
gtb-probe.h
gtb-dec.h
gtb-att.h
gtb-types.h
plus all the *.h files in the folders, so set the proper -I flags:
sysport/
compression/
compression/huffman/
compression/liblzf/
compression/zlib/
compression/lzma/
The following libraries should be linked in Linux
-lpthread
-lm
In Windows, the appropriate MT (multithreaded library should be linked too)
These switches should be set in the compiler
-D NDEBUG
-D Z_PREFIX
The first one removes the assert code, and the second
one makes sure that there is no collision between some names in the
zlib library and names in other compression libraries.
-------------------------- COMPILATION EXAMPLE ------------------------------
The file compile.sh is an example of how tbprobe can be
compiled in Linux using gcc.
Rakefile.rb is the ruby version of Makefile. You have to install 'rake'
to execute it. This is what I use but you don't have to. It is provided
out of laziness. I should probably remove it.
------------------ COMPILING A STATIC LIBRARY (optional) --------------------
Aaron Becker wrote a Makefile to compile a static library --> libgtb.a
I just applied this modification from his fork.
For now, this for Linux only. Type 'make' to compile it.
Some people may find this approach more convenient since the library
has to be compiled only once. Of course, this library needs to be included
at linking time, when you compile your own program
---------------------------- For UCI Authors --------------------------------
Generally, UCI (Universal Chess Interface) GUIs use standard labels for
Tablebase paths and cache sizes. For instance, NalimovPath and NalimovCache
are used for the Nalimov tablebases. Therefore, engine authors are strongly
encouraged (Please!) to follow a common standard to simplify the life of GUI
developers and users. For that reason, it is suggested to implement as
parameters: GaviotaTbPath and GaviotaTbCache in their communication with a
UCI graphical user interface.
-----------------------------------------------------------------------------
Good luck with the tablebases!
Miguel
*****************************************************************************