Not logged inCSS-Forum
Forum CSS-Online Help Search Login
CSS-Shop Impressum Datenschutz
Up Topic Hauptforen / CSS-Forum / Stockfish selber kompilieren: eine kurze Anleitung
- - By Jörg Oster Date 2013-12-08 12:55
Unter Linux:

Am einfachsten. Bei einigen Distros ist der GNU C/C++ Compiler schon vorinstalliert, lässt sich ansonsten aber über die jeweilige Paketverwaltung einfach nachinstallieren. Einfach nach 'gcc' suchen.
Dann ein Terminal in dem Verzeichnis der SF-Sourcen öffnen, "make build ARCH=x86-64-modern" eingeben, und fertig. "make help" zeigt eine kleine Anleitung an.

Unter Windows:

Von hier http://tdm-gcc.tdragon.net/ das entsprechende TDM-Bundle herunterladen, installieren, und im Installationsverzeichnis (normalerweise C:/TDM-GCC-64) die Batch-Datei 'mingwvars.bat' ausführen. Diese setzt die Umgebungsvariablen.

Vor dem Kompilieren muss man das Makefile in den SF-Sourcen editieren.
In der Sektion 4, unter "build:" bzw. "profile-build:", jeweils die erste Zeile, in der am Ende 'config-sanity' steht. Diese beiden Zeilen muss man auskommentieren, indem man am Anfang der Zeile einen "Lattenzaun" setzt, dieses '#' Zeichen. Ansonsten bricht die Kompilierung mit einer Fehlermeldung ab.

Vorher:
Code:
  @echo "make build ARCH=x86-64    (This is for 64-bit systems)"
  @echo "make build ARCH=x86-32    (This is for 32-bit systems)"
  @echo ""

.PHONY: build profile-build embed-signature
build:
  $(MAKE) ARCH=$(ARCH) COMP=$(COMP) config-sanity
  $(MAKE) ARCH=$(ARCH) COMP=$(COMP) all

profile-build:
  $(MAKE) ARCH=$(ARCH) COMP=$(COMP) config-sanity
  @echo ""
  @echo "Step 0/4. Preparing for profile build."
  $(MAKE) ARCH=$(ARCH) COMP=$(COMP) $(profile_prepare)
  @echo ""
  @echo "Step 1/4. Building executable for benchmark ..."


Nachher:
Code:
  @echo "make build ARCH=x86-64    (This is for 64-bit systems)"
  @echo "make build ARCH=x86-32    (This is for 32-bit systems)"
  @echo ""

.PHONY: build profile-build embed-signature
build:
#  $(MAKE) ARCH=$(ARCH) COMP=$(COMP) config-sanity
  $(MAKE) ARCH=$(ARCH) COMP=$(COMP) all

profile-build:
#  $(MAKE) ARCH=$(ARCH) COMP=$(COMP) config-sanity
  @echo ""
  @echo "Step 0/4. Preparing for profile build."
  $(MAKE) ARCH=$(ARCH) COMP=$(COMP) $(profile_prepare)
  @echo ""
  @echo "Step 1/4. Building executable for benchmark ..."


Dann eine Eingabeaufforderung im Verzeichnis der SF-Sourcen öffnen, und "mingw32-make build ARCH=x86-64-modern COMP=mingw" eingeben und fertig.
'make' wird also durch 'mingw32-make' ersetzt.

Viel Spaß beim Code-Ändern und Kompilieren!
Parent - - By Benno Hartwig Date 2013-12-08 15:12
Super! Thanx!
Werde ich wohl heute Abend genauer ansehen und ausprobieren...
Benno
Parent - By Guest Date 2013-12-08 16:46
gibst du uns dann auch eine rückmeldung was diese compiles bringen?
Parent - - By Benno Hartwig Date 2013-12-08 22:36 Edited 2013-12-08 23:00
Hat super geklappt. (Habe es bislang aber nur auf meinem alten core2duo-Notebook unter windows7-32bit testen können)
Ich habe das 32-bit-Paket hier installiert, die Batch-Datei gestartet, das make-File der Stockfish-DD-Sourcen editiert.
und über eine Batch-Datei die Kommandozeile
mingw32-make build ARCH=x86-32 COMP=mingw
ausgeführt. (für meine 32bit-Umgebung habe ich also nur einen anderen Wert für ARCH angegeben.)
Der Build-Vorgang lief ohne zu meckern durch und die stockfish.exe funktionierte. Super!

Ich habe auch gleich mal einen kleinen Geschwindigkeitsvergleich gemacht, 1-core, Ausgangsstellung, feste Tiefe 24 plys.
Sh3 ziehen, und gucken, wann der Antwortzug erfolgt.
Der original-Stockfish-DD braucht dazu auf diesem Rechner reproduzierbare 83 Sekunden (nur 1-core-Zeitmessungen sind wirklich reproduzierbar)
und das gcc-Kompilat schaffte es immerhin in immer noch guten 92 Sekunden!
Dieses erste Kompilat war also nur gut 10% langsamer als das Original. Nicht schlecht! Auch so also schon sehr gut nutzbar!
Und mal gucken, ob sich hier vielleicht auch noch weitere Optimierungsschalter setzen lassen, ob sich das Kompilat ggf. auch noch ein wenig schneller machen lässt.
Morgen Abend will ich das mal auf einer 64bit-Maschine für ein 64bit-Kompilat versuchen.

Vielen Dank noch mal,
das ging wirklich so gut, glatt und einfach, wie du es beschrieben hattest.
Benno
Parent - By Jörg Oster Date 2013-12-08 22:56
Freut mich!
Für eigene Tests sind die Kompilate wirklich gut brauchbar.
Aber wenn du noch was an Geschwindigkeit rausholen kannst, lass es mich wissen.
Parent - - By Guest Date 2013-12-09 11:08
hi warum und wieso müssen diese zeilen auskommentiert werden? sage bitte nicht, weil dann fehlermeldungen kommen.
eigentlich müssten dies checks doch sinnvoll sein nach wikipedia:

quelle: http://de.wikipedia.org/wiki/Sanity_Check
Code:
Sanity Check

Sanity Check bezeichnet in der Softwaretechnik eine Plausibilitätsprüfung. Sanity Checks umfassen beispielsweise Plausibilitätsprüfung von Werten, einfache modellbasierte Prüfungen, aber auch Konsistenzprüfungen von Anforderungen.

Die Validierung eines Software-Systems beginnt häufig mit Sanity Checks. Für die vollständige Verifikation eines komplexeren Systems müssen in einem zweiten Schritt zusätzliche Modellprüfungen durchgeführt werden.

Beispiel Wertprüfungen
    Im Eingabedialog wird als Sanity Check die Plausibilität des Eingabewerts bezüglich Datentyp und zulässigen Wertebereich geprüft. Diese kann aber zur endgültigen Entscheidung über die Zulässigkeit eines Wertes (Verifikation) nicht ausreichen. Hierzu kann ein Model Checking gegen den aktuellen Modelzustand nötig sein.

Beispiel für Use Cases
    Um einen Sanity Check der Use Cases durchzuführen kann eine Robustness Analysis durchgeführt werden.
Parent - By Thomas Plaschke Date 2013-12-09 12:49
Guest schrieb:
hi warum und wieso müssen diese zeilen auskommentiert werden? sage bitte nicht, weil dann fehlermeldungen kommen.
Doch, Guest, genau deswegen. Anders als minGW enthält das TDM-Paket nicht msys, das die im makefile aufgerufene test-Funktion zur Verfügung stellt.
Man muss sich dann eben selbst um die Plausi-Prüfung kümmern (Man merkt's ja spätestens am Ergebnis  ).

Gruß
Th. Plaschke
Parent - By Jörg Oster Date 2013-12-09 12:50
Weil das der Sanity-Check für die gcc-Installation/Arbeitsumgebung unter Linux ist. Unter Windows klappt der nicht ...
Parent - - By Thomas Plaschke Date 2013-12-09 11:39
So geht's natürlich auch  . Ich hatte eine etwas umständlichere Methode, das makefile vom TDM-Compiler verarbeiten zu lassen .
Aber für kürzere turnaround-Zeiten habe ich einen Tipp, der sich gut mit den makefile-Änderungen von Jörg Oster durchführen lässt.
Ich nutze sowohl die mingw- und TDM-Installation (Vergleich der ausführbahren Dateien am Ende). Um den Compilevorgang anzuwerfen, benutze ich die guten alten Batch-Dateien (Endung .bat).
Die Batch-Datei, die im Quellcode-Verzeichnis abgelegt ist, hat folgenden Inhalt:
Code:
@echo off

rem GOTO TDM
REM mit minGW kompileren

REM Umgebungsvariablen für Compiler für 64-Bit Anwendungen vorbereiten
CALL C:\minGW\minGWvars64.bat

REM make aufrufen (makefile wird mit den angegebenen Parametern ausgeführt)
make profile-build ARCH=x86-64-modern COMP=mingw strip

REM Für 32-Bit Anwendungen
REM Umgebungsvariablen für Compiler für 32-Bit Anwendungen vorbereiten
REM CALL C:\minGW\minGWvars32.bat
REM make profile-build ARCH=x86-32 COMP=mingw strip

GOTO RAUS
:TDM

REM manuell Reste des letzten compile-Vorgangs löschen
DEL .depend >nul
DEL *.o >nul

REM Umgebungsvariablen für TDM-Compiler vorbereiten (Installiert ist der für 32+64-Bit Anwendungen)
CALL C:\TDM\minGWvars.bat

REM TDM-Version von make aufrufen (makefile wird mit den angegebenen Parametern ausgeführt)
mingw32-make.exe build ARCH=x86-64-modern COMP=mingw strip

:RAUS
@pause

So, wie sie da steht, führt die Batch-Datei den minGW-Compiler aus. Die CALL-Aufrufe gelten den zu den Compilern 'mitgelieferten' und von mir tw. veränderten Dateien mingwvars.bat.
Die TDM-Fassung blieb unverändert. Von der minGW-Fassung habe ich je eine für 32-Bit- und 64-Bit-Anwendungen gemacht. Das ist nicht kompliziert. Die sehen bei mir so aus:
Code:
Die 64-BitVersion(C:\minGW\minGWvars64.bat):
@ECHO OFF
PATH=C:\MinGW\mingw64\mingw64\bin;C:\MinGW\mingw64\mingw64\lib\gcc\x86_64-w64-mingw32\4.8.1;C:\MinGW\msys\1.0\bin;%PATH%

... und die 32-BitVersion(C:\minGW\minGWvars32.bat):
@ECHO OFF
PATH=C:\MinGW\bin;C:\MinGW\msys\1.0\bin;%PATH%
Das Schwierigste war für mich dabei, den minGW-compiler für 64-Bit überhaupt auf den PC installiert zu bekommen (32-Bit kein Problem; super Installer - aber dann ... )
Jedenfalls hat sich für mich die Installation gelohnt. Denn make absolviert die makefiles von Stockfish problemlos. Daher kann man auch den Profiler nutzen (Dem aufmerksamen Leser ist in der Batch-Datei vielleicht der make-Aufruf mit profile-build aufgefallen).
Für die Compiler-Versionen 4.8.1 habe ich bspw. folgende Werte beim benchmark der Stockfish-Version x86-64-modern vom 7.12.13 mit den Parametern 32 1 19 erhalten:

TDM            57,768 s
minGW          58,205 s
minGW-profile  55,396 s
abrok-compile  52,542 s (wie macht der das?)


Die Verwendung von Batch-Dateien ist mir vertrauter als unix-like shells (bis dahin habe ich's nunmal nie gebracht ). ... und allein die Navigation in der Windows-Eingabeaufforderung dauert mir zu lange. Daher diese Lösung.

Gruß
Th. Plaschke
Parent - - By Chess Player Date 2013-12-13 10:17
Code:
(Dem aufmerksamen Leser ist in der Batch-Datei vielleicht der make-Aufruf mit profile-build aufgefallen)


Ja ist mir, nur was hat das zu bedeuten? Debug und release ist für mich eindeutig.
Parent - - By Thomas Plaschke Date 2013-12-13 13:33
Ich hatte darauf hingewiesen, weil bei der MinGW-Compiler-Installation der Profiler-Aufruf aus dem makefile heraus funktioniert. Bei der TDM-Version geht das direkt nicht ohne Fehlermeldungen.
(Der Profiler wiederum kann beim MinGW-Compiler wie auch bei MSVC zu deutlichen Rechengeschwindigkeitgewinnen verhelfen)
Gruß
Th. Plaschke
Parent - By Guest Date 2013-12-14 17:13
also: profile=release mit mehr power

danke für die hilfreichen auskünfte, speziell zum compilieren!! 
Parent - - By Benno Hartwig Date 2013-12-09 15:57
Ich habe jetzt auf einem i5-750 mit 4 Kernen den Compiler installiert und SF-DD kompiliert.
Da lief es genau so reibungslos.

Mein kleiner Geschwindigkeitstest (Ausgangsstellung, 1 Kern, Tiefe 24 plys, Sh3 und gucken wie lange die Antwort braucht) lieferte hier.
Stockfish-DD:                 33 Sekunden
das gcc-64bit-Kompilat: 37 Sekunden
Also gut 10% Geschwindigkeitsverlust (annähernd 10 ELO) muss man wohl akzeptieren.
Die Geschwindigkeit meiner Kompilate, die ich mit 64bit auf VS2012-Express erstellte, war deutlich schlechter. Wobei ich immer noch denke, ich muss es nur irgendwie richtig einstellen, dann müsste das doch verdammt noch mal auch schnell sein. Müsste, sollte...

So einfach ist die Geschwindigkeit des gcc-Kompilats wohl nicht weiter zu optimieren, denn über das Make-File ist die -O3-Optimierung wohl eh schon aktiv.

Benno
Parent - - By Chess Player Date 2013-12-13 11:53
Frage:

Hinterlassen heutzutage Compiler irgend einen Fingerabdruck in der xyz.exe Datei? Wo ist der gegebenfalls zu finden?
Parent - By Guest Date 2013-12-14 21:03
das hätte ich auch gerne gewusst. was das früher nicht mal usus, dass fingerprints beigefügt wurden?
Parent - By Chess Player Date 2022-02-23 11:52
In der Konsole "Compiler" eingeben.
Parent - - By Dieter Kraft Date 2022-03-14 07:31
Hallo Jörg,

ich komme doch noch einmal auf Deine Anleitung zurück:
Ich finde die Compilation unter Windows -- und das dürfte die meisten hier interessieren --
doch mit MSYS2 einfacher, da man in keinem File Änderungen vornehmen muss.

Also wie unter https://github.com/syzygy1/Cfish beschrieben:
1) Download and install MSYS2 from the MSYS2 website.
https://www.msys2.org/
2) Open an MSYS2 MinGW 64-bit terminal (e.g. via the Windows Start menu).
3) Install the MinGW 64-bit toolchain by entering
Code:
pacman -S mingw-w64-x86_64-toolchain.

4) Close the MSYS2 MinGW 64-bit terminal and open another.
5) Jetzt kopiere den Stockfish-Sourcecode z.B. nach
dieter@Chess MINGW64 /opt/Stockfish-master/src, wobei dieter@Chess
durch den Rechnernamen des Benutzers zu ersetzen ist.
6) Und schließlich starte den Befehl
Code:
$ make -j profile-build ARCH=x86-64-avx2 COMP=mingw

wobei avx2 die cpu Architektur beschreibt und eventuell durch sse3-popcnt o.ä. zu ersetzen ist.

Viele Grüße
Dieter
Parent - By Jörg Oster Date 2022-03-14 14:14
Hallo Dieter,
hast du bemerkt, von wann der ursprüngliche Post ist?
Mittlerweile nutze ich auch MSYS2.

Gruß, Jörg.
Up Topic Hauptforen / CSS-Forum / Stockfish selber kompilieren: eine kurze Anleitung

Powered by mwForum 2.29.3 © 1999-2014 Markus Wichitill