Dienstag, 20. April 2010

Stockfish 1.7.1: PGO GCC 4.5 vs. ICC 11.1

Howto PGO-compile Stockfish mit GNU C++ 4.5 am Mac

Voraussetzung am Mac sind die bereits installierten Apple Developer Tools Xcode. Am einfachsten gelingt nun das Aufspielen, der gerade fertiggestellten GNU Compiler Suite 4.5, mittels MacPorts.
Da der Quellcode erst lokal übersetzt wird und diverse Abhängigkeiten vorher berücksichtigt werden müssen, dauert der ganze Vorgang leider eine gefühlte Ewigkeit. Wenn alles fertig installiert ist, dann das vorhandene Makefile von Stockfish 1.7.1 um nachfolgende Zeilen ergänzen. Zum Abschluß noch im Terminal "make osx-profile" eingeben. Fertig ist das GNU C++ 4.5 Profile-Guided Optimization (PGO) Kompilat von Stockfish 1.7.1.

Ergänzungen zum Original Stockfish Makefile:
osx-pgo-gen:
$(MAKE) \
CXX='g++-mp-4.5' \
CXXFLAGS="$(GCCFLAGS)" \
CXXFLAGS+='-march=core2 -msse3 -m64 -fprofile-generate' \
LDFLAGS+='-march=core2 -msse3 -m64 -fprofile-generate' \
all

osx-pgo-use:
$(MAKE) \
CXX='g++-mp-4.5' \
CXXFLAGS="$(GCCFLAGS)" \
CXXFLAGS+='-march=core2 -msse3 -m64 -fprofile-use' \
LDFLAGS+='-march=core2 -msse3 -m64 -fprofile-use' \
all

osx-profile:
@touch *.cpp *.h
$(MAKE) osx-pgo-gen
@echo ""
@echo "Running benchmark for pgo-build ..."
@$(PGOBENCH) > /dev/null
@echo "Benchmark finished. Build final executable now ..."
@echo ""
@touch *.cpp *.h
$(MAKE) osx-pgo-use
@rm -f *.o *.gcda bench.txt

Benchmark:

Unter SCID 4.2.2 Analyse der Grundstellung nach 1.f3 mit 1 Thread, 256 MB Hash, C2D 2.4 GHz unter Mac OS X 10.5.8.

GNU C++ 4.5.0, 64 Bit, PGO
22 -0.80 1.... e5 2.Sc3 Sc6 3.e3 Sf6 4.d4 d5 5.Lb5 Ld6 6.Sge2 O-O 7.O-O Se7 8.dxe5 Lxe5 9.Ld2 c6 10.Ld3 Te8 11.a3 Sf5 12.Lxf5 Lxf5 13.Sd4 Ld7 (86.10)
23 -0.64 1.... e5 2.Sc3 Sf6 3.d4 exd4 4.Dxd4 Sc6 5.Df2 Ld6 6.e4 O-O 7.Le3 Kh8 8.O-O-O (106.95)

Intel C++ 11.1, 64 Bit, PGO
22 -0.80 1.... e5 2.Sc3 Sc6 3.e3 Sf6 4.d4 d5 5.Lb5 Ld6 6.Sge2 O-O 7.O-O Se7 8.dxe5 Lxe5 9.Ld2 c6 10.Ld3 Te8 11.a3 Sf5 12.Lxf5 Lxf5 13.Sd4 Ld7 (88.11)
23 -0.64 1.... e5 2.Sc3 Sf6 3.d4 exd4 4.Dxd4 Sc6 5.Df2 Ld6 6.e4 O-O 7.Le3 Kh8 8.O-O-O (109.39)


Interner Benchmark von Stockfish 1.7.1:

GNU C++ 4.0.1, 64 Bit, Apple (kein PGO, nur zum Vergleich)
time ./sf171_64-g40 bench 256 1 17 default depth
===============================
Total time (ms) : 188905
Nodes searched : 141328187
Nodes/second : 748144

real 3m9.304s
user 3m5.759s
sys 0m0.763s

GNU C++ 4.5.0, 64 Bit, PGO
time ./sf171_64-g45-pgo bench 256 1 17 default depth
===============================
Total time (ms) : 160963
Nodes searched : 141328187
Nodes/second : 878016

real 2m41.195s
user 2m37.314s
sys 0m0.727s

Intel C++ 11.1, 64 Bit, PGO
time ./sf171_64-i11-pgo bench 256 1 17 default depth
===============================
Total time (ms) : 163340
Nodes searched : 141328187
Nodes/second : 865239

real 2m43.533s
user 2m39.729s
sys 0m0.811s

Keine Kommentare: