Not logged inCSS-Forum
Forum CSS-Online Help Search Login
CSS-Shop Impressum Datenschutz
Up Topic Hauptforen / CSS-Forum / Optimale Compilierung von Quelltexten
1 2 Previous Next  
- - By Chess Player Date 2013-09-11 08:32
Nachdem es hier heisse Diskussionen bezüglich des "HEXENS" zu lesen gab versuchte
ich aus dem Quelltext von Stockfish4 eine 32 bit Consolenanwendung zu erstellen.
Verwendet habe ich MS Visual Studio Express 2010. Das hat auch im Prinzip funktioniert.
Nur war mein Compilat ca. um den Faktor zehn langsamer. Da stelle ich mir die Frage
wie und wo ich den Compiler optimal einstellen muß. Reicht das aus, oder muss im Quelltext
auch noch etwas geändert werden.

Wer kann helfen?

mfg

Chess Player
Parent - - By Thomas Zipproth Date 2013-09-11 11:54
Klingt als hättest du versehentlich die Debug-Version statt der Release Version verwendet.
(Menü  Erstellen - Konfigurations-Manager).

Weiterhin ist der mingw-Compile von Stockfish ca. 1.7 mal schneller als der Visual Studio Compile.
Faktor zehn langsamer als ?
Falls der Vergleich mit der 64-bit Version erfolgte, die ist natürlich auch nochmal schneller als die 32 bit Version.

Thomas
Parent - - By Benno Hartwig Date 2013-09-11 12:30
[quote="Thomas Zipproth"]Weiterhin ist der mingw-Compile von Stockfish ca. 1.7 mal schneller als der Visual Studio Compile.[/quote]Meinst du mit Compile das Kompilat, also die EXE-Datei? (Auch mit schnellen compile-Vorgängen wird halt bisweilen geworben)
Wie ist die Geschwindigkeit deiner mingw-Compile-EXE-Dateien im Vergleich zum Original-SF?

Für Schachprogrammierung ist halt ein System, welches möglichst schnelle Kompilate generiert, besonders wertvoll.

Benno
Parent - - By Thomas Zipproth Date 2013-09-11 16:03
Ja, die Exe Datei ist mit mingw compiliert ca 1.7 mal schneller,  offenbar ist die Optimierung von mingw in diesem Fall wesentlich besser.
Der Original-SF ist auch mit mingw compiliert, die Geschwindigkeit ist identisch.

Thomas
Parent - - By Benno Hartwig Date 2013-09-11 17:59
[quote="Thomas Zipproth"]Ja, die Exe Datei ist mit mingw compiliert ca 1.7 mal schneller,[/quote]Was meinst du denn damit?
Das 2010-Compilat ist nach meiner Erfahrung mit fixen Optimierungseinstellungen um ca. 5% langsamer als der originale SF4.
Allerdings unterstützt 2010 direkt nur 32bit-Kompilate.
Dass ein 64bit-Kompilat um ca. Faktor 1,7 schneller ist, kann natürlich sein.

Benno
Parent - - By Thomas Zipproth Date 2013-09-11 20:47
Ich hab nochmal genau nachgemessen.
Das 64-Bit mingw Compilat ist bei mir 1.5 mal schneller als das 64-bit VS 2012 Compilat.
Allerdings mingw mit profile guided optimizations, 2012 ohne, das bringt bei 2012 aber auch nicht soviel.
Den Grund für diesen großen Unterschied hab ich noch nicht rausgefunden, die Einstellungen bei 2012 sollten eigentlich in Ordnung sein, außer das evtl. popcnt nicht verwendet wird, das sollte allerdings maximal 5% ausmachen.

Thomas
Parent - - By Benno Hartwig Date 2013-09-12 07:25 Edited 2013-09-12 07:29
[quote="Thomas Zipproth"]Das 64-Bit mingw Compilat ist bei mir 1.5 mal schneller als das 64-bit VS 2012 Compilat.[/quote]Thanx.
Trotz meiner bisherigen Optimierungsversuche ist es tatsächlich auch so, dass meine 2012-Kompilate ca. um gut den Faktor 4/3 langsamer sind als meine 2010-Kompilate, welche ja schon annähernd original-SF4-Geschwindigkeit hatten.
Das ist schon schiet, denn dann macht auch das ganze 64-bit-Kompilieren keinen rechten Spaß.
Sämtliche Projekt-Einstellungen habe ich schon abgeglichen, will aber noch mal mit älteren Toolsets experimentieren. Vielleicht bekomme ich das ja auch noch besser hin. Und Google ist ja sowieso unser Freund...

Benno
Parent - - By Chess Player Date 2013-09-12 07:34
Hallo Benno,

da siehst Du was es ausmacht an Quelltexten Änderungen vorzunehmen und neu zu Compilieren.
Die sogenannten Verbesserungen werden durch das neue compilat mehr als zunichte gemacht.
Das sogenannte "HEXEN" oder Patchen macht eindeutig mehr Sinn. Ohne Bezug zu nehmen auf
die Vorgehensweise des Herrn Boden.

Nachdem ich so viele Tips zum compileren bekommen habe, danke ich Allen die sich daran beteiligt haben.

MfG

C.P.
Parent - By Benno Hartwig Date 2013-09-12 11:40
[quote="Chess Player"]Das sogenannte "HEXEN" oder Patchen macht eindeutig mehr Sinn.[/quote]Wenn du ein besonders schnelles Kompilat hat, und wenn du genau weißt, welche Bytes mit welcher Bedeutung es da gibt und wo sie liegen, dann hätte das einen gewissen Sinn. OK. Kennst du diese Stellen und ihre Bedeutung??
Abgesehen davon, dass sie sich ggf. mit jedem Neukompilat ändern.

Zu 'hexen' werde ich deshalb ganz bestimmt nicht anfangen, auch wenn du hier eine besonders hervorzuhebende Sinnhaftigkeit erkannt haben willst.

Benno
Parent - By Chess Player Date 2013-09-11 13:29
Vielen Dank für diesen Tip! Man sollte öfter diese Programme nutzen, nur so zur Übung.

mfG
C.P.
Parent - By Lars B. Date 2013-09-11 12:12
Offenbar hast Du die Debug-Version getestet. Der Compiler baut dann einen Haufen Prüfungen ein und Code, der das Finden von Fehlern erleichtert, aber den Code verlangsamt.

Es gibt ein ganzes Rudel Compiler-Schalter, mit denen man verschiedene Optimierungen triggert, die der Compiler vornehmen kann, um den Code zu beschleunigen. Schnel gegugelt finde ich unter unzähligen anderen Seiten das hier:

http://msdn.microsoft.com/de-de/library/aa290055%28v=vs.71%29.aspx

http://www.tantalon.com/pete/cppopt/compiler.htm

Es könnte spannend sein, mit verschiedenen Compiler-Schaltern zu spielen und auch die Compilate unterschiedlicher Compiler (gcc, MS, Intel) zu vergleichen. Sehr wahrscheinlich haben das aber  andere auch schon gemacht Trotzdem wird man dabei was lernen, könnte ich mir vorstellen.

Grüße
Lars
Parent - - By Benno Hartwig Date 2013-09-11 12:23 Edited 2013-09-11 12:32
[quote="Chess Player"]Nur war mein Compilat ca. um den Faktor zehn langsamer.[/quote]Dass du auf 'Release' schalten musst, wurde dir ja schon geschrieben.
Ich setzte dann in den Projekt-Eigenschaften bei
C++ - Optimieren 2 Schalter auf Geschwindigkeit optimieren (das bewirkt schon einiges)
Und bei 'Linker' gibt es auch noch Optimierungsschalter.

Ich messe die Geschwindigkeiten meiner SF-Kompilate einfach:
Feste Tiefe=21 oder 23 (je nach Rechner), 1 Kern, Ausgangsstellung, Zug Sh3, und gucken wie SF antwortet.
Typische Zeiten sind dann bei 32bit-2010-Kompilaten:
  - Original SF4 : 42 Sekunden
  - 2010-Kompilat : 44 Sekunden
Immerhin so fix sollten 32bit-2010-Kompilate schon sein!
Die logischen Ausgaben sind dann (fast  ) immer identisch, und nur diese Identischen betrachte ich.

Mit 2012 bin ich noch nicht da angekommen
Hat jemand damit auch schon schnelle (s.o.) Kompilate hinbekommen?

Benno
Parent - - By Chess Player Date 2013-09-11 13:40
Das sieht schon viel besser aus!

FEN: rn1qkb1r/pp2nppb/2p1p3/3pPP1p/3P2P1/2N5/PPP1N2P/R1BQKB1R w KQkq - 0 9

Stockfish_4_32bit:

21/40  00:29    21.016.453  702.351  +0,76  f5xe6 f7xe6 Lc1-g5 h5xg4 Se2-f4 Lh7-f5 Lf1-d3 Sb8-a6 Dd1-e2 Dd8-d7 O-O-O Sa6-c7 Sc3-a4 b7-b6 Kc1-b1 O-O-O Sa4-c3 Kc8-b8 Th1-g1 g7-g6 Td1-f1 c6-c5 d4xc5 b6xc5 De2-f2 d5-d4 Sc3-e4 c5-c4 Se4-c5
22/40  00:50    35.020.690  696.485  +0,82  f5xe6 f7xe6 Lc1-g5 h5xg4 Se2-f4 Lh7-f5 Dd1-d2 Sb8-d7 O-O-O Sd7-b6 b2-b3 Dd8-d7 Lf1-e2 a7-a5 a2-a4 Se7-g8 Td1-g1 Sg8-h6 Le2-d3 Lf5xd3 Sf4xd3 Lf8-e7 Kc1-b1 Sh6-f5 Tg1xg4 Dd7-c7 Lg5xe7 Dc7xe7
23/40  00:56    39.516.723  695.361  +0,82  f5xe6 f7xe6 Lc1-g5 h5xg4 Se2-f4 Lh7-f5 Dd1-d2 Sb8-d7 O-O-O Sd7-b6 b2-b3 Dd8-d7 Lf1-e2 a7-a5 a2-a4 Se7-g8 Td1-g1 Sg8-h6 Le2-d3 Lf5xd3 Sf4xd3 Lf8-e7 Kc1-b1 Sh6-f5 Tg1xg4 Dd7-c7 Lg5xe7 Dc7xe7

Stocki4: als release compiliert, da kann man weiter optimieren.

21/40  00:35    21.016.453  589.141  +0,76  f5xe6 f7xe6 Lc1-g5 h5xg4 Se2-f4 Lh7-f5 Lf1-d3 Sb8-a6 Dd1-e2 Dd8-d7 O-O-O Sa6-c7 Sc3-a4 b7-b6 Kc1-b1 O-O-O Sa4-c3 Kc8-b8 Th1-g1 g7-g6 Td1-f1 c6-c5 d4xc5 b6xc5 De2-f2 d5-d4 Sc3-e4 c5-c4 Se4-c5
22/40  01:00    35.020.690  582.154  +0,82  f5xe6 f7xe6 Lc1-g5 h5xg4 Se2-f4 Lh7-f5 Dd1-d2 Sb8-d7 O-O-O Sd7-b6 b2-b3 Dd8-d7 Lf1-e2 a7-a5 a2-a4 Se7-g8 Td1-g1 Sg8-h6 Le2-d3 Lf5xd3 Sf4xd3 Lf8-e7 Kc1-b1 Sh6-f5 Tg1xg4 Dd7-c7 Lg5xe7 Dc7xe7
Parent - By Chess Player Date 2013-09-12 10:39
[quote="Chess Player"]
Das sieht schon viel besser aus!

FEN: rn1qkb1r/pp2nppb/2p1p3/3pPP1p/3P2P1/2N5/PPP1N2P/R1BQKB1R w KQkq - 0 9

Stockfish_4_32bit:

21/40  00:29    21.016.453  702.351  +0,76  f5xe6 f7xe6 Lc1-g5 h5xg4 Se2-f4 Lh7-f5 Lf1-d3 Sb8-a6 Dd1-e2 Dd8-d7 O-O-O Sa6-c7 Sc3-a4 b7-b6 Kc1-b1 O-O-O Sa4-c3 Kc8-b8 Th1-g1 g7-g6 Td1-f1 c6-c5 d4xc5 b6xc5 De2-f2 d5-d4 Sc3-e4 c5-c4 Se4-c5
22/40  00:50    35.020.690  696.485  +0,82  f5xe6 f7xe6 Lc1-g5 h5xg4 Se2-f4 Lh7-f5 Dd1-d2 Sb8-d7 O-O-O Sd7-b6 b2-b3 Dd8-d7 Lf1-e2 a7-a5 a2-a4 Se7-g8 Td1-g1 Sg8-h6 Le2-d3 Lf5xd3 Sf4xd3 Lf8-e7 Kc1-b1 Sh6-f5 Tg1xg4 Dd7-c7 Lg5xe7 Dc7xe7
23/40  00:56    39.516.723  695.361  +0,82  f5xe6 f7xe6 Lc1-g5 h5xg4 Se2-f4 Lh7-f5 Dd1-d2 Sb8-d7 O-O-O Sd7-b6 b2-b3 Dd8-d7 Lf1-e2 a7-a5 a2-a4 Se7-g8 Td1-g1 Sg8-h6 Le2-d3 Lf5xd3 Sf4xd3 Lf8-e7 Kc1-b1 Sh6-f5 Tg1xg4 Dd7-c7 Lg5xe7 Dc7xe7

Stocki4: als release compiliert, da kann man weiter optimieren.

21/40  00:35    21.016.453  589.141  +0,76  f5xe6 f7xe6 Lc1-g5 h5xg4 Se2-f4 Lh7-f5 Lf1-d3 Sb8-a6 Dd1-e2 Dd8-d7 O-O-O Sa6-c7 Sc3-a4 b7-b6 Kc1-b1 O-O-O Sa4-c3 Kc8-b8 Th1-g1 g7-g6 Td1-f1 c6-c5 d4xc5 b6xc5 De2-f2 d5-d4 Sc3-e4 c5-c4 Se4-c5
22/40  01:00    35.020.690  582.154  +0,82  f5xe6 f7xe6 Lc1-g5 h5xg4 Se2-f4 Lh7-f5 Dd1-d2 Sb8-d7 O-O-O Sd7-b6 b2-b3 Dd8-d7 Lf1-e2 a7-a5 a2-a4 Se7-g8 Td1-g1 Sg8-h6 Le2-d3 Lf5xd3 Sf4xd3 Lf8-e7 Kc1-b1 Sh6-f5 Tg1xg4 Dd7-c7 Lg5xe7 Dc7xe7
[/quote]

Stocki4: Mit Visual Studio 2010 Express und optimierten Compilereinstellungenals als release compiliert. Geht das noch besser?
Mit den optimierten Compilereinstellungen bin ich bis auf 10% dran.

21/40  00:32    21.016.453  643.846  +0,76  f5xe6 f7xe6 Lc1-g5 h5xg4 Se2-f4 Lh7-f5 Lf1-d3 Sb8-a6 Dd1-e2 Dd8-d7 O-O-O Sa6-c7 Sc3-a4 b7-b6 Kc1-b1 O-O-O Sa4-c3 Kc8-b8 Th1-g1 g7-g6 Td1-f1 c6-c5 d4xc5 b6xc5 De2-f2 d5-d4 Sc3-e4 c5-c4 Se4-c5
22/40  00:55    35.020.690  635.641  +0,82  f5xe6 f7xe6 Lc1-g5 h5xg4 Se2-f4 Lh7-f5 Dd1-d2 Sb8-d7 O-O-O Sd7-b6 b2-b3 Dd8-d7 Lf1-e2 a7-a5 a2-a4 Se7-g8 Td1-g1 Sg8-h6 Le2-d3 Lf5xd3 Sf4xd3 Lf8-e7 Kc1-b1 Sh6-f5 Tg1xg4 Dd7-c7 Lg5xe7 Dc7xe7
23/40  01:02    39.516.723  634.317  +0,82  f5xe6 f7xe6 Lc1-g5 h5xg4 Se2-f4 Lh7-f5 Dd1-d2 Sb8-d7 O-O-O Sd7-b6 b2-b3 Dd8-d7 Lf1-e2 a7-a5 a2-a4 Se7-g8 Td1-g1 Sg8-h6 Le2-d3 Lf5xd3 Sf4xd3 Lf8-e7 Kc1-b1 Sh6-f5 Tg1xg4 Dd7-c7 Lg5xe7 Dc7xe7
Parent - - By Benno Hartwig Date 2013-09-11 18:40
Es gibt in den 2010-Projekt-Einstellungen natürlich reichlich viele Einträge.
Hier nur kurz:

Die C/C++ -Befehlszeile:
/Zi /nologo /W3 /WX- /O2 /Ob2 /Oi /Ot /Oy /GL /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /GF- /Gm- /EHsc /MD /Zp4 /GS- /fp:fast /fp:except- /Zc:wchar_t /Zc:forScope /Fp"Release\Bennofish4_xxxxxx.pch" /Fa"Release\" /Fo"Release\" /Fd"Release\vc100.pdb" /Gz /analyze- /errorReport:queue

und die Linker-Befehlszeile:
/OUT:"C:\Users\Fisch\Documents\Visual Studio 2010\Projects\Stockfish23\src\Release\Bennofish4_xxxxxx.exe" /INCREMENTAL:NO /NOLOGO /MANIFEST /ManifestFile:"Release\Bennofish4_xxxxxx.exe.intermediate.manifest" /ALLOWISOLATION /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /PDB:"C:\Users\Fisch\Documents\Visual Studio 2010\Projects\Stockfish23\src\Release\Bennofish4_xxxxxx.pdb" /SUBSYSTEM:CONSOLE /OPT:REF /OPT:ICF /PGD:"C:\Users\Fisch\Documents\Visual Studio 2010\Projects\Stockfish23\src\Release\Bennofish4_xxxxxx.pgd" /LTCG /TLBID:1 /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:QUEUE

Benno
Parent - - By Chess Player Date 2013-09-12 11:14
Hi Benno,

aus der Linker Befehlszeile entnehme ich dass Du die Vollversion von Visual Studio benutzt. Ist das so richtig?
Und könnte das der Grund dafür sein, dass dein Compilat im vergleich zum Original nur ca. 5% langsamer ist?

MfG

C.P.
Parent - - By Benno Hartwig Date 2013-09-13 07:11 Edited 2013-09-13 07:21
[quote="Chess Player"]aus der Linker Befehlszeile entnehme ich dass Du die Vollversion von Visual Studio benutzt. Ist das so richtig?
Und könnte das der Grund dafür sein, dass dein Compilat im vergleich zum Original nur ca. 5% langsamer ist?[/quote]Hmm, nee, ich habe ganz sicher nur 2010-Enterprise. Woran machtest du deine Vermutung fest?

Ich habe natürlich nur die 32bit-Kompilate (aus 2010-Enterprise und das Original) verglichen.
Typische Zeiten waren da 42 Sekunden und 44 Sekunden. Die Kompilate von noch älteren Enterprise-Versionen (2008 und 2005 waren das wohl) waren vergleichbar schnell.
Nur meine 2012-Enterprise-Kompilate sind bislang noch deulich langsamer (Ungefähr Faktor 1,4). Sowohl 32bit als auch 64bit 

Benno

PS:
Bei irgendeiner Enterprise-Version (war das noch 2010?) meine ich mal ein merkwürdiges Phänomen gesehen zu haben:
Da waren die Compiler-'Geschwindigkeit-Optimieren'-Schalter gesetzt, aber die Codezeile enthielt die entsprechenden Schaltern nicht(!!!).
Erst wenn man de Schalter mal umsetzte und alles übernehemn ließ (ggf. sogar aus den Projekteinstellungern raus ging), und wenn man die Schalter dann wieder auf 'Geschwindigkeit optimieren' setze, wurden die Optionen wirklich in die Parameterzeile des Compilers aufgenommen und wirksam.
Vorher stand da nur "Geschwindigkeit optimieren", machte er aber nicht.

Benno
Parent - - By Chess Player Date 2013-09-13 07:30
Hallo Benno,

in der dritten Zeile in fett gedruckt steht bei mir "Visual Studio Express 2010"

und die Linker-Befehlszeile:
/OUT:"C:\Users\Fisch\Documents\Visual Studio 2010\Projects\Stockfish23\src\Release\Bennofish4_xxxxxx.exe" /INCREMENTAL:NO /NOLOGO /MANIFEST /ManifestFile:"Release\Bennofish4_xxxxxx.exe.intermediate.manifest" /ALLOWISOLATION /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /PDB:"C:\Users\Fisch\Documents\Visual Studio 2010\Projects\Stockfish23\src\Release\Bennofish4_xxxxxx.pdb" /SUBSYSTEM:CONSOLE /OPT:REF /OPT:ICF /PGD:"C:\Users\Fisch\Documents\Visual Studio 2010\Projects\Stockfish23\src\Release\Bennofish4_xxxxxx.pgd" /LTCG /TLBID:1 /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:QUEUE

P.S.
Obendrein hast du in den Befehlzzeilen mehr Optionen aufgeführt die bei mir nicht vorhanden sind.
Ich warte noch auf eine Antwort von Thomas der mir zu devcpp riet. Ich komme damit aber nicht klar.

C.P.
Parent - By Benno Hartwig Date 2013-09-13 08:00
Zitat:
.../PGD:"C:\Users\Fisch\Documents\Visual Studio 2010\Projects\Stockfish23\src\Release\Bennofish4_xxxxxx.pgd"
Dieses Verzeichnis C:\Users\Fisch\Documents\Visual Studio 2010\Projects hat das System bei mir so angelegt. Weiß nicht, warum das bei dir anders benannt wurde.

Zitat:
Obendrein hast du in den Befehlzzeilen mehr Optionen aufgeführt die bei mir nicht vorhanden sind.
In den Einstellungsdialogen dieser Optionen wird doch auch immer angeführt, durch welchen Schalter das realisiert wird. Das könntest du gucken, durch welche Einstellung der fehlende Schalter gesetzt würde. Mühsam, OK.

Ich würde an deiner Stelle mal ganz konkret gucken, ob in den Compiler-Schaltern wirklich auch die beiden Schalter enthalten sind, die für 'Geschwindigkeit optimieren' stehen. Ich sah Fälle, wo im Option-Text ausgewählt war 'Geschwindigkeit optimieren', und der Schalter fehlte beharrlich trotzdem!! Trotz 'Übernehmen' und 'OK'. Der musste erst mal wirksam weggeändert und dann erneut gesetzt werden!
Muss ich nachher auch noch mal in meinem 2012-System kontrollieren. Vielleich soll dieses 'Feature' ja ein beständiges MS-Markenzeichen werden.


Benno
Parent - By Benno Hartwig Date 2013-09-13 08:52
Oh, Mann, so ein Quark:
Zitat:
Hmm, nee, ich habe ganz sicher nur 2010-Enterprise.

"Hmm, nee, ich habe ganz sicher nur 2010-Express." hatte es heißen müssen. Sorry
Parent - By Chess Player Date 2013-09-15 14:57
Hallo Benno,

hast Du auch mal die Quelldateien von c++11 mal ausprobiert? Kann Visual Studio damit umgehen?

C.P.
Parent - By Guest Date 2014-01-14 20:30
Schau bitte mal hier ob du da was brauchen kannst:

http://talkchess.com/forum/viewtopic.php?topic_view=threads&p=543765&t=50237
Parent - - By Thomas Plaschke Date 2013-09-11 17:39
Die wesentlichen Hilfen zum konkreten Problem wurde ja schon gegeben.
Zur Frage, mit welchem Compiler man das am besten in Angriff nimmt, möchte ich denen, die - wie ich - keine UNIX-Vergangenheit haben und/oder nicht make(file)-affin sind die freie Orwell Dev-C++-Programmieroberfläche ans Herz legen (http://orwelldevcpp.blogspot.de/). Diese Oberfläche enthält einen guten Editor und alle wesentlichen Funktionen, die man so braucht. - Manches funktioniert aber auch nicht ganz so, wie man es erwarten würde  . Entscheidend dürfte aber sein, dass mit den zur Verfügung stehenden gcc-Versionen (mingw oder TDM) sehr schnelle Compilate erzeugt werden können.

Für den Stockfish 4-Quelltext muss aber für Dev-C++ 5.4.2 die Autovervollständigung abgeschaltet werden, sonst "hängt" sich die Oberfläche beim Parsen der Datei position.cpp auf.

Bestimmte #defines sollten auch vor der Compilierung gesetzt/überprüft werden. Welche das sind, lässt sich dem makefile entnehmen (die zu setzenden Optionen fangen mit -D an und können am einfachsten unter Projekt-Optionen als Parameter des C++Compilers definiert werden - einfach als Liste eintragen).

Die Qualität der Stockfish-Compilate lässt sich übrigens am einfachsten durch starten und eingeben von bench testen.

Kuriosum am Rande: Von Toga II 3.0 erzeugt Visual Studio 2010 möglicherweise die schnellere Exe.

Viele Grüße
Th. Plaschke
Parent - - By Michael Scheidl Date 2013-09-11 18:21
Also alles ganz einfach.
Parent - By Thomas Plaschke Date 2013-09-11 20:35
Genau!

Zugegeben, der Stockfish-Quellcode ist für mich wirklich sehr gut zu handhaben (ich sag nicht: "verstehen"!). Genauso Viper (klar, gleicher Ursprung - und gut zu verstehen). Toga ist auch gut zu verarbeiten. Bei Crafty brauche ich länger.
- Bei manch anderen Quelltexten frage ich mich, wie die Windows-Version entstanden ist   (Deswegen gebührt JA großer Respekt, wenn man bedenkt, was der alles zum fehlerfreien Laufen gebracht hat!)

Viele Grüße
Th. Plaschke
Parent - By Sönke März Date 2013-09-12 07:46
[quote="Thomas Plaschke"]

Kuriosum am Rande: Von Toga II 3.0 erzeugt Visual Studio 2010 möglicherweise die schnellere Exe.

[/quote]

Also ich finde das nicht kurios. Der Compiler von VS hat seit .Net richtig zugelegt und gehört zur Spitzenklasse. Bei VS gibt es auch sehr gute Werkzeuge, um die Performance des jeweiligen Programms zu testen. Wenn diese Performance-Tests auch in der Express-Version zur Verfügung stehen, kann ich nur raten, diese anzuwenden. Man bekommt damit sehr gut dargestellt, welche Teile des Programms die Geschwindigkeit abbremsen und kann so punktgenau an der Performance arbeiten.
Parent - - By Chess Player Date 2013-09-13 05:51
Hallo Thomas,

ich habe den devcpp heruntergeladen und installiert. Nur gelingt es mir nicht
das Projekt korrekt zu erstellen und die Quelldateien einzubinden.
Kannst Du das bitte in Form eines Schnelleinstiegs hier einstellen?

Vielen Dank.

MfG

C.P.
Parent - - By Thomas Plaschke Date 2013-09-13 17:14
Mal sehen ob's klappt. Hier das Rezept für Stockfish 4:

Code:
Also der Anfang getreu dem preußischen Programmier-Reglement geht so:

1. Hinsetzen
2. PC anschalten
3. ...

Ich überspringe jetzt einige dutzend Punkte und komme zu

42. DevCpp starten
43. Menü Datei->Neu->Projekt
43a.   Tabulator Basic->Leeres Projekt (- zu dem Icon muss man abwärts scrollen)
45b.  Projektsprache C++
45c.  Projektnamen eingeben bspw. Meisterstock
46. DevCpp möchte die Projektdatei Meisterstock.dev abspeichern -> entsprechendes Verzeichnis angeben (am besten vorher eines anlegen und den Sourcecode da rein kopieren)
47. im Projektfenster links befindet sich jetzt das Projekt Meisterstock. Mit Doppelklick öffnen.
47a.  Rechtsklick auf Datei Unbenanntx
47b.  Im Kontextmenü Datei entfernen wählen.
48. Menü Werkzeuge->Editor
48a.  Tabulator Code Vervollständigung
48b.  Code-Vervollständigung einschalten ausschalten (sonst zickt die Oberfläche wegen position.cpp)
48c.  Dialog verlassen mit Ok
49. Menü Projekt->Zum Projekt hinzufügen wählen
50.  Im Sourcecodeverzeichnis alle Dateien mit den Endungen .cpp und .h auswählen (Tip: Nach Typ sortieren lassen)
51. F11 drücken oder Menü Ausführen->Kompilieren + Ausführen

Der Code sollte fehlerfrei kompiliert und das fertige Programm gestartet werden.

52. in das gestartete Meisterstock.exe bench eingeben und Werte merken und mit quit und 2x Enter schließen

Jetzt kommen wir zu den Optimierungen:

53. Menü Projekt->Projekt Optionen
53a.  Tabulator Compiler->Tabulator Code-Erzeugung
53a1.  Opionen Zeile 1 (-march) und 3 (-mx) nach Zielprozessor wählen; Zeile 2 ignorieren; Optimierungslevel High oder Highest wählen (highest enthält auch potentiell unsichere Optimierungen)
53a2.  Ob man eine 32- oder 64-Bit exe erzeugt, wählt man mit Zeile 5
53b.  Tabulator Compiler->Linker: Zeile 5 (-s) Yes setzen. Das macht die Exe klein.

Es gibt ein paar Steuerungsdefinitionen im Quellcode, mit denen man außerdem Optimierungen vornehmen kann.

54.Tabulator Parameter (in der oberen Tabulatorenreihe der Projektoptionen)
54a.  In der Spalte C++-Compiler kann man folgende #defines vornehmen, die sonst im Quellcode erfolgen müssten
-DNDEBUG
-DUSE_POPCNT
-DIS_64BIT
-DUSE_BSFQ
-DUSE_PREFETCH
  Die Erklärungen zu den Steuerungsvariablen sind in Datei makefile gegeben. Wichtig: Keine Leerzeichen. Will man einzelne #defines abwählen einfach anderen Namen geben. Aus -DIS_64BIT könnte -DxIS_64BIT werden. Aber keine Leerzeichen verwenden!
54b.  Dialog mit Ok schließen.
55. F12 oder Menü Ausführen->Alles erneuern
56. F10 oder Menü Ausführen->Ausführen
57. in das gestartete Meisterstock.exe bench eingeben und Werte mit den gemerkten vom nicht optimierten Programm vergleichen. Mit quit und 2x Enter schließen.

Das war's in aller Kürze 

Gruß und tschüss
Th. Plaschke
Parent - - By Chess Player Date 2013-09-14 08:20
Hallo Thomas,

Der Knackpunkt war hier:
48b.  Code-Vervollständigung einschalten ausschalten!!! Diesen Punkt habe ich irgendwie nicht gefunden...
Damit konnte ich schon mal nicht optimiert Compilieren.

Vielen Dank

C.P.
Parent - By Thomas Plaschke Date 2013-09-14 09:20
Ich glaube, ich muss klarstellen, dass der Punkt "Code Vervollständigung" in den Editor-Optionen nichts mit den (laufzeitverbessernden) Programmoptimierungen zu tun hat. Es handelt sich (nur) um eine Programmierhilfe des Editor von DevCpp. Diese Funktion parst/scannt/durchsucht den Quellcode-Dateien nach Funktionsdefinitionen, um beim Programmieren/Programmtexterstellen anzuzeigen, welche Parameter die jeweilige Funktion benötigt. Meine Beobachtung ist, dass beim Stockfish 4 - Quellcode die Verarbeitung der Datei position.cpp zum Absturz von DevCpp führt. Zum Kompilieren komme ich dann gar nicht mehr.

Zitat:
Damit konnte ich schon mal nicht optimiert Compilieren.


Hat denn die Programmerstellung zu irgendeinem Ergebnis (=Exe) geführt?

Gruß
Th. Plaschke
Parent - - By Chess Player Date 2013-09-14 09:25
FEN: rn1qkb1r/pp2nppb/2p1p3/3pPP1p/3P2P1/2N5/PPP1N2P/R1BQKB1R w KQkq - 0 9

Original Stockfish_4_32bit:
19/40  00:15    11.406.827  734.408  +0,70  f5xe6 f7xe6 Lc1-g5 h5xg4 Se2-f4 Lh7-f5 Dd1-d2 Sb8-d7 O-O-O Sd7-b6 Kc1-b1 Dd8-d7 Lf1-e2 O-O-O Sf4-d3 Kc8-b8 Td1-g1 Sb6-c4 Dd2-c1 Dd7-c7 Le2xg4 Td8-e8 Sd3-c5 Lf5xg4 Tg1xg4 Se7-f5

Stockfish_4_32bit mit studio express 2010 optimiert:

19/40  00:17    11.406.827  646.022  +0,70  f5xe6 f7xe6 Lc1-g5 h5xg4 Se2-f4 Lh7-f5 Dd1-d2 Sb8-d7 O-O-O Sd7-b6 Kc1-b1 Dd8-d7 Lf1-e2 O-O-O Sf4-d3 Kc8-b8 Td1-g1 Sb6-c4 Dd2-c1 Dd7-c7 Le2xg4 Td8-e8 Sd3-c5 Lf5xg4 Tg1xg4 Se7-f5


Stockfish_4_32bit mit devcpp optimiert:

19/40  00:17    11.406.827  667.261  +0,70  f5xe6 f7xe6 Lc1-g5 h5xg4 Se2-f4 Lh7-f5 Dd1-d2 Sb8-d7 O-O-O Sd7-b6 Kc1-b1 Dd8-d7 Lf1-e2 O-O-O Sf4-d3 Kc8-b8 Td1-g1 Sb6-c4 Dd2-c1 Dd7-c7 Le2xg4 Td8-e8 Sd3-c5 Lf5xg4 Tg1xg4 Se7-f5

Wobei die Optimierungen wahrlich vielleicht noch nicht optimal sind.
Parent - By Chess Player Date 2013-09-14 12:02
Diese Ergebnisse sind im Vergleich zum bench irgendwie nicht vergleichbar!??

stockfish_4_32bit.exe
###############
info nodes 92979 time 95
bestmove c5d5 ponder d1d5
Total time (ms) : 4798
Nodes searched  : 4132374
Nodes/second    : 861270

Stockfish_4_32bit mit studio express 2010.exe
###############################
info nodes 92979 time 157
bestmove c5d5 ponder d1d5
Total time (ms) : 6142
Nodes searched  : 4132374
Nodes/second    : 672805

Stockfish_4_32bit mit devcpp optimiert.exe
#############################
info nodes 92979 time 95
bestmove c5d5 ponder d1d5
Total time (ms) : 5267
Nodes searched  : 4132374
Nodes/second    : 784578

Rätsel über Rätsel...
Woran mag es liegen?
Parent - - By Thomas Plaschke Date 2013-09-14 12:47
Ich habe da mal ein paar Werte notiert:

                                 x32   x64
GCC mit DevCpp-GUI              2824  1998
GCC mit make und makefile       2762  1967
Visual Studio C++ 2010          3776  2700

Es handelt sich um die Dauer des Benchmarks in Millisekunden. (Zum Vergleich verschiedener Stockfish-Versionen verwenden die Entwickler auch diese Werte. - Ich glaube, das ist auch der Zweck, zu dem sie den Benchmark-Test eingebaut haben.  Der Referenzwert für die Nodes ist bei dem von mir verwendeten Quelltext der unveränderten Stockfish 4-Ur-Fassung: 4132374 Nodes. Mit diesem Wert wird erkennbar, ob die Exe das gleiche Ergebnis bringt wie die Entwicklerreferenz.)

Die Werte für die optimierten GCC 32-Bit-Versionen zu ermitteln hat mich 2 Stunden Lebenszeit gekostet. -Das war mit der 3er-Version nicht so ein Gewürge! Die obigen GCC-32-Bit-Werte sind letztlich auch nur mit der Optimierungsstufe -O2 erzeugt worden. Die Visual C++-Versionen zu bekommen ist dagegen ein erholsamer Spaziergang. Warum die makefile-Exes besser abschneiden (war schon beim 3er so), weiß ich nicht. Im makefile werden zusätzliche Parameter benutzt, die unter Windows nichts bringen sollten, oder aber keine Laufzeitoptimierungen sind. Ich habe keine Erklärung dafür.

VG
Th. Plaschke
Parent - - By Benno Hartwig Date 2013-09-16 13:10
[quote="Thomas Plaschke"]                                 x32   x64
GCC mit DevCpp-GUI              2824  1998
GCC mit make und makefile       2762  1967
Visual Studio C++ 2010          3776  2700

Es handelt sich um die Dauer des Benchmarks in Millisekunden. [/quote]Ist ein Benchmarktest, der weniger als 2 Sekunden dauert, nicht ggf. doch auch sehr störanfällig?
Da wird der Rechner wegen irgendwas ggf. mal logisch 'angerumpelt', Festplatte oder CD-ROM läuft an, eine Datei wird geladen, und dass das ohne Auswirkung auf die CPU-Leistung bleibt, glaube ich dann doch nicht.

Benno
Parent - By Thomas Plaschke Date 2013-09-16 16:11
[quote="Benno Hartwig"]Ist ein Benchmarktest, der weniger als 2 Sekunden dauert, nicht ggf. doch auch sehr störanfällig?[/quote]
Es hält sich in Grenzen. Wenn ich den Test mit der optimierten x64-Variante mehrmals ausführe, erhalte ich Werte zwischen ca. 1950 und 2000 Millisekunden. Um verschiedene "Compiles" des gleichen Quelltextes auf die Wirkung von Compileroptionen zu vergleichen, reicht mir das völlig aus. Die Wirkung der Optimierung von -O2 zu -O3 erkennt man an den Werten sofort.

Bei -O3 zu Ofast kann man den Test mehrfach laufen lassen und statistisch auswerten oder den Test mit anderen Parametern durchführen. 'bench 32 1 14' braucht schon ca. 5,5 Sekunden und 'bench 32 1 16' benötigt ca. 14,4 Sekunden. Die Bedeutung der Parameter ist in der Quellcodedatei benchmark.cpp beschrieben.

Gruß
Th. Plaschke
Parent - - By Chess Player Date 2013-09-14 10:45
Da habe ich mich etwas mißverständlich ausgedrückt. Deine Anleitung hat mir sehr geholfen.
Obwohl du die Abschaltung der Autovervollständigung im ersten Posting erwähnt hattest,
habe ich sie erst in der Anleitung finden können. Also, die Kurzanleitung ist wirklich Optimal!
Warum ist es denn immer sooo schwierig so etwas als 1. howto mit dem Programm gleich mit zu
veröffentlichen. Lerning bei doing klappt machmal, aber kostet sooo viel Zeit.

Mfg

C.P.
Parent - - By Thomas Plaschke Date 2013-09-14 12:48
Das freut mich!
Danke für das Lob.
Th. Plaschke
Parent - - By Chess Player Date 2013-09-16 08:42
Hallo Thomas,

mit den defines konnte ich mir einen Stockfish compilieren, der deutlich schneller war als das Original!
Ich habe das an einer Stellung ausprobiert, ob andere Stellungen auch abgearbeitet werden habe ich nicht kontrolliert.
Eine grosse Spielwiese hat sich mir eröffnet.

Vielen Dank nochmals.

C.P.
Parent - - By Benno Hartwig Date 2013-09-16 13:56 Edited 2013-09-16 14:01
[quote="Chess Player"]mit den defines konnte ich mir einen Stockfish compilieren, der deutlich schneller war als das Original![/quote]Oh, mit solchen Aussagen erweckst du natürlich Interesse und Begehrlichkeiten! Und den Wunsch, es zu überprüfen (die Zeiten, und besonders auch die Gleichheit der Funktionalität!)
Welche Zeiten hast du so erreicht, mit Vergleich zum Original?
(Mein Mess-Vorschlag: stelle in der 1core-Engine eine feste Tiefe ein, 21 oder 23 oder so, mache aus der Ausgangsstellung ein Sh3 und poste uns, was die Engine ausgibt. So Tiefen, die ungefähr 1 Minute rechnen, finde ich recht aussagefähig)
Bislang hatte ich immer den Eindruck, man ist schon gut, wenn man dicht rankommt an die Geschwindigkeit des Originals.
Benno
Parent - By Chess Player Date 2013-09-16 14:25
Hallo Benno,

ich nahm den devcpp und habe das Projekt so angelegt wie Thomas das beschrieb.
Dnach habe ich die Einstellungen für "meine" CPU und den erweiterten Befehlssatz
vorgenommen. Die Exe an dieser Fen Stellung:
rn1qkb1r/pp2nppb/2p1p3/3pPP1p/3P2P1/2N5/PPP1N2P/R1BQKB1R w KQkq - 0 9 
ausprobiert, eine Minute analysieren lassen und abgespeichert. Danach
habe ich verschiedene defines nach Thomas hinzugefügt, nochmals compiliert
und wieder die Teststellung eine Minute laufenlassen.

Die Bench Werte werden mittels mehrerer Teststellungen in eimem Rutsch getestet.
Ich schrieb dazu, dass sich die Benchwerte nicht mit meinen Testergebnissen vergleichen lassen.

MfG

C.P.
Parent - - By Chess Player Date 2013-09-16 17:46
Einen Übeltäter habe ich ausgemacht bezüglich Reproduzierbarkeit!

Ich hatte teilweise mehrere Stockfische gestartet um in der Konsole Eingaben zu tätigen, das sollte man tunlichst lassen!
Parent - - By Benno Hartwig Date 2013-09-17 07:53 Edited 2013-09-17 07:56
[quote="Chess Player"]Einen Übeltäter habe ich ausgemacht bezüglich Reproduzierbarkeit![/quote]Ich vermute, wenn deine Kompilierung gut läuft, dass du ungefähr so schnelle Kompilate erzeugst wie das Original. Richtig?
Falls du immer noch meinst, dass deine Kompilate (deutlich?) schneller sind, dann versuche das doch bitte mal mit Zeiten zu beschreiben. (Szenario, Original, dein Kompilat)
Wichtig wären dann aus meiner Sicht tatsächlich aber auch Engineausgaben (Original, dein Kompilat), damit erkennbar wird, dass deine Engine auch wirklich die gleiche Suche durchführt. (darum auch mein Vorschlag mit der festen Tiefe. Dadurch sollten sich zeitabhängigen Einflüsse auf die Logik der Suche ausschließen lassen)
Benno
Parent - By Chess Player Date 2013-09-17 09:50
[quote="Benno Hartwig"]
[quote="Chess Player"]Einen Übeltäter habe ich ausgemacht bezüglich Reproduzierbarkeit![/quote]Ich vermute, wenn deine Kompilierung gut läuft, dass du ungefähr so schnelle Kompilate erzeugst wie das Original. Richtig?

Antwort: Ja

Falls du immer noch meinst, dass deine Kompilate (deutlich?) schneller sind, dann versuche das doch bitte mal mit Zeiten zu beschreiben.

Antwort: Mein Compilat war etwas mehr als 10% schneller und hatte auch eine andere Größe als jetzt erzielen kann. Warum weiß ich nicht.

MS hatte mir zwischendurch ein Update untergejubelt, vielleicht war das der Grund. Leider habe ich bei den vielen Testversuchen auch das scnhellste Compilat weggeworfen. Das passiert mir nie mehr wieder!!! So ein Mist. Ich könnte die Wände hochlaufen...
[/quote]
Parent - - By chessmaster Date 2013-09-18 18:25
hallo hier ist noch ein posting nicht freigegeben
Parent - By Thomas Müller Date 2013-09-18 18:47
und?
dauert halt manchmal länger
Parent - - By chess player Date 2013-11-12 08:17
ich versuche mich gerade an crafty 23.8 für windows; scheitere aber an einer fehlenden Datei: include
wo finde ich die richtige version?
Parent - - By chess player Date 2013-11-12 14:54
sorry, ein times.h fehlt mir, im vorposting wurde es nicht dargestellt!!!

include

Parent - - By Peter Behringer Date 2013-11-12 20:07
Ist ja fast wie in einem Gentooforum hier...

"times.h fehlt mir"

Natürlich - ist ja auch POSIX. Schreib dem Prof. Hyatt doch mal eine Mail (funktioniert denn ein Gewurschtle mit Makefile.xp/nmake nicht?)...
Parent - - By Chess Player Date 2013-11-13 08:54
[quote="Peter Behringer"]
Ist ja fast wie in einem Gentooforum hier...

"times.h fehlt mir"

...Schreib dem Prof. Hyatt doch mal eine Mail ...
[/quote]
Danke,

habe ich gerade gemacht. Hoffentlich köpft er mich nicht. 
Parent - - By Wolfram Bernhardt Date 2013-11-13 16:05
Ah... wie hast Du denn "Gewurschtle" übersetzt?
Up Topic Hauptforen / CSS-Forum / Optimale Compilierung von Quelltexten
1 2 Previous Next  

Powered by mwForum 2.29.3 © 1999-2014 Markus Wichitill