Not logged inCSS-Forum
Forum CSS-Online Help Search Login
CSS-Shop Impressum Datenschutz
Up Topic Hauptforen / CSS-Forum / Threads-Faktor: Komodo, Houdini, Stockfish und Zappa
1 2 Previous Next  
- - By Andreas Strangmüller Date 2014-05-17 09:08 Upvotes 1
Bedingungen: 
Hardware:     Dual AMD Opteron 6376, 32 x 2.3 GHz (Turbo Core aus)
BS:           Windows 7 Pro 64-Bit
GUI:          keine
Settings:     Alle Engines default settings
Large Tables: keine
Stellung:     Grundstellung
Rechenzeit:   20 Sekunden
 
UCI Kommandos:
setoption name threads value 1 (bis 32)
go movetime 20000


Die Tests wurden im Konsolenmodus ausgeführt.
Das bedeutet z. B. unter Windows die .exe auszuführen und dann die UCI Kommandos einzugeben.

Hier die Werte der einzelnen Engines von 1 bis 32 Threads aus der Grundstellung heraus mit 20 Sekunden Rechenzeit.
nps = nodes per second = Knoten pro Sekunde



Komodo, Houdini und Zappa liegen bis 16 Threads fast gleichauf (Faktor 11,94 - 11,37 - 11,34). Stockfish DD und auch die neueste Stockfish Version fallen hier bereits ein wenig ab.
Komodo skaliert auch jenseits der 16 Threads noch ausgezeichnet. Auch bei Zappa zeigt sich eine gute SMP-Implementierung.
Bei Houdini und Stockfish DD ist nach 16 Threads keine große Steigerung mehr erkennbar, während bei der aktuellen Stockfish Version eine positive Entwicklung in diesem Bereich zu sehen ist.

Steigerung von 16 auf 32 Threads:
Komodo TCECr     (11,94 - 20,60 = 73%)
Zappa Mexico II  (11,37 - 16,46 = 45%)
Stockfish 140513 ( 9,79 - 14,21 = 45%)
Stockfish DD     ( 8,01 - 10,18 = 27%)
Houdini 4 Pro    (11,34 - 13,48 = 19%)


Hier noch die graphische Aufbereitung:

Parent - By Thomas Plaschke Date 2014-05-17 10:49
Sehr gut gemacht! Vielen Dank!

Ich interpretiere die Grafik als Darstellung der Effizienz der Parallelsuche der Programme. So deutlich (bis 32 Kerne) habe ich das noch nirgends gesehen. - Viele Programmierer vermutlich auch.

Man kann aus dem Vergleich der verschiedenen Engines jetzt die Verzögerung bei der Veröffentlichung von Komodo MP im Nachhinein so erklären, dass Don Dailey einen äußerst effizienten Algrithmus implementieren wollte. Sein Algorithmus scheint auch bei hoher Kernzahl gut und annähernd liniear zu skalieren. Die Wartezeit hat sich für die Komodo-Besitzer also gelohnt. - Jetzt müssen sie nur noch auf einen passenden handelsüblichen Multi-vielfach-Core-PC warten

Viele Grüße
Th. Plaschke
Parent - - By Ingo B. Date 2014-05-17 10:56
Andreas Strangmüller schrieb:

b]Bedingungen: 
Hardware:     Dual AMD Opteron 6376, 32 x 2.3 GHz (Turbo Core aus)
BS:           Windows 7 Pro 64-Bit
GUI:          keine
Settings:     Alle Engines default settings
Large Tables: keine
Stellung:     Grundstellung
Rechenzeit:   20 Sekunden
 
UCI Kommandos:
setoption name threads value 1 (bis 32)
go movetime 20000

Die Tests wurden im Konsolenmodus ausgeführt.
Das bedeutet z. B. unter Windows die .exe auszuführen und dann die UCI Kommandos einzugeben.

Hier die Werte der einzelnen Engines von 1 bis 32 Threads aus der Grundstellung heraus mit 20 Sekunden Rechenzeit.
...


Wie häufig hast du das denn wiederholt? Engines haben leider keine identische Knotenzahl im MP Betrieb. Gerade eben mit nur 4 Kernen und S-DD 4 mal mit deinen UCI Parametern getestet und folgende Werte erhalten:
1. 128905135
2. 129722027
3. 133222486
4. 131754820
(Jeweils 20 Sekunden)

Nicht das ich glaube das groß etwas anderes rauskommen würde, aber wenn, dann jeden Lauf 5 mal machen und Mittelwert bilden ...

Und wie hast du den Hash eingestellt? Default nimmt z.B SF-DD 32MB. Wenn die 32MB von SF mit X-Kernen innerhalb deiner 20s voll gemacht werden geht die Performance auch runter ... ! Auch zählt jeder anders. Der eine wird lngsamer wenn Hash voll ist, der andere bleibt immer superschnell weil er jede erzeugte Stellung zählt - wie willst du zwei solche Engines anhand von Knoten vergleichen? Ich habe keine Ahnung welche Hashgröße die anderen als default haben, aber wenn das zu klein ist ... Ich würde den Test vielleicht mal mit 4 GB Hash wiederholen, der sollte in 20 Sekunden auf keinen Fall "volllaufen".

Der Klassiker wäre natürlich TTD zu zählen und nicht Knoten, aber seitdem Komodo MP fähig ist da wohl ein anderes Konzept verfolgt ist auch das etwas zweifelhaft. Im ganzen halte ich das von aussen für nicht seriös testba! Solange man nicht den Sourcecode hat und tief in der Materie drinsteckt - und für 4 von deinen 5 Kandidaten haben wir leider keinen Sourcecode - ist das alles schwierig (und auch nicht wirklich wichtig )

Trotzdem vielen Dank für die Mühen und

Gruß
Ingo
Parent - By Stefan Pohl Date 2014-05-17 12:39
Ich denke auch, die Hashgröße und eben die Frage, ob Hashzugriffe bei den Angezeigten Knoten mitgezählt werden, könnte ein erhebliches Problem bei dieser Art der Messungen sein. Wenn man so mißt, sollten die Hashtables daher unbedingt sehr, sehr groß eingestellt werden.
Noch besser wäre es natürlich ganz ohne Hash, aber das geht bei den Engines meist nicht, und es gibt da auch verschiedene Hashgrößen-Untergrenzen in den Optionen bei unterschiedlichen Engines.

Stefan
Parent - - By Andreas Strangmüller Date 2014-05-17 21:03 Edited 2014-05-17 21:06
Hallo Ingo,

jeder Testlauf wurde 5x durchgeführt und danach der Mittelwert gebildet.
Das waren immerhin ingesamt 800 Läufe und beschätfigte mich viele Abende.

Die Hastables wollte ich so gering wie möglich halten, bei Stockfish sind 32 MB default, bei allen anderen 128 MB.
Um den Einfluss der Hashtables auf das Resultat zu ermitteln, werde ich mal mit anderen Größen experimentieren. Denke bei diesen geringen Größen ist der Einfluss eher zu vernachlässigen. Wir werden sehen...

Wichtig war mir zu sehen wo aktuell bei den führenden Engines die Grenze ist wo mehr Kerne noch etwas bringen.
Glaube das kann man anhand der Knoten pro Sekunde schon messen.

Denke ich teste bei 1, 16 und 32 Kerne, bei 3 Minuten und 8192 MB Hash interessehalber auch noch.

Grüße,
Andreas
Parent - - By ? Date 2014-05-17 21:46
Hallo Andreas,

Andreas Strangmüller schrieb:

Wichtig war mir zu sehen wo aktuell bei den führenden Engines die Grenze ist wo mehr Kerne noch etwas bringen.
Glaube das kann man anhand der Knoten pro Sekunde schon messen.


Danke, für die Klarstellung mit den 5 Durchläufen. Das glättet natürlich enorm - und zeigt deinen unermüdlichen Einsatz!

Ich glaube, dass man anhand der Knoten leider nicht so viel messen kann. Ich schrieb schon im ersten Posting warum und das ich das für fragwürdig halte. TTD wäre besser, aber seit Komodo, und wie du im CCC gelesen hast auch seit einem Patch in Stockfish, ist sogar das "kritisch". (TTD ist aber immer noch besser als n/s, mach doch mal den Test als Gegenprobe!)
So gern auch ich etwas "messe" und du mit dem Hardwaremonster ganz besonders (man muß das ja rechtfertigen), glaube ich das uns heutzutage in diesem Fall NUR Ergebnisse aus vielen Spielen helfen würden. Das ist allerdings extrem schwer zu bewerkstelligen.

Gruß
Ingo
Parent - - By Michael Scheidl Date 2014-05-18 00:04
Für Feinschmecker könnte man sogar "TTS", also Time to Solution anhand eines ausreichend großen Samples von Testpositionen vergleichen. Da der jeweils schneller zu erzielende Erfolg letztlich aus konkreten Zügen die gefunden werden bestehen muß - Knoten und/oder Tiefe hin oder her - schiene mir das als Alternative oder zusätzliche Messung sinnvoll.

Man würde damit immer noch einen Vergleich von "effektiven" Geschwindigkeiten erhalten, während man mit den vielen kompletten Testpartien vor allem Elodifferenzen erhält.

P.S. Die Leistungen von Andreas sind von der erkennbaren Einsatzfreude, sachgerechter Methodik und exzellenter Darbietung her rundum bewundernswert!
Parent - - By Ingo B. Date 2014-05-18 08:39
Michael Scheidl schrieb:

Für Feinschmecker könnte man sogar "TTS", also Time to Solution anhand eines ausreichend großen Samples von Testpositionen vergleichen. Da der jeweils schneller zu erzielende Erfolg letztlich aus konkreten Zügen die gefunden werden bestehen muß - Knoten und/oder Tiefe hin oder her - schiene mir das als Alternative oder zusätzliche Messung sinnvoll.


TTS hat aber den Nachteil das

a) die "Solution" von Menschen bewertet werden müßte und nicht immer stimmen muß
b) "Solutions" im allgemeinen einem Motiv folgen, also ein Opfer/Angriff/Stellung schließen ... Dinge die meistens im Spiel nicht vorkommen. Dies könnte bestimmte Engines bevorteilen die im realen Spiel weniger gut abschneiden (Das ist das alte Problem mit Ranglisten mit Bestmoves aus Teststellungen - es geht einfach nicht vernünftig.)

Nachdem durch Komodo und jetzt wohl auch Stockfish die TTD Methodik aufgeweicht wurde und man von vielen anderen Engines schlicht nicht sicher weiß was sie wie machen, halte ich das Threadverhalten nicht für vernünftig messbar. Mir ist klar das ein Bedürfniss besteht so etwas zu beurteilen und mir ist auch klar das die breite Masse solche Messreihen toll findet, es ändert aber nichts daran das die Methodik dem gewählten Ziel nicht gerecht wird / nicht gerecht werden kann.
Nichts gegen Andreases Riesenarbeit, wenn man so etwas testen will ist Knoten eben am "einfachsten" und er hat sich da schon richtig ins Zeug geworfen!

Kurz: Knoten sind Schall und Rauch, TTS ist zu "subjektiv", TTD wäre wohl noch am besten (möglichst mit verschiedenen Stellungen), ist aber auch nicht das Gelbe vom Ei. Was bleibt ist, dass wir entweder mit der Unsicherheit leben müssen oder die Statistik glauben. Egal welche Alternative man wählt, man merkt, dass sich danach nichts ändert. Die Engines bleiben Engines, Ranglisten bleiben auch bestehen, es wird nicht nur eine Engine geben und nur noch diese eine benutzt werden. Da sich nichts wirklich ändert, stellt sich die Frage der Relevanz ... (das meinte ich mit der Klammer und dem Smily im ersten Posting).

Gruß
Ingo
Parent - - By Peter Martan Date 2014-05-18 09:04
Ingo B. schrieb:


TTS hat aber den Nachteil das

a) die "Solution" von Menschen bewertet werden müßte und nicht immer stimmen muß
b) "Solutions" im allgemeinen einem Motiv folgen, also ein Opfer/Angriff/Stellung schließen ... Dinge die meistens im Spiel nicht vorkommen. Dies könnte bestimmte Engines bevorteilen die im realen Spiel weniger gut abschneiden

Was spricht denn bitte dagegen, wenn du dir als schwaches Menschlein einer Lösungskorrektheit nicht sicher bist, dass du sie dir von den angehimmelten engines bestätigen lässt, oder willst du uns einfach sagen, dass das, was engines so ausspucken, für Menschen sakro sanct ist und es keinen Zusammenhang mehr zwischen dem gibt, was Menschen und was engines spielen, auch wenn beides Schach heißt?
In diesem Fall würde ich jetzt wirklich endlich anfangen, die beiden Spiele völlig voneinander abzukoppeln, wir können dann erst recht ruhig die Elo in beiden Spielen weiterhin gleich nennen, man würde die beim Fussball ja auch nicht mit denen beim Schach vergleichen.

Und was genau meinst du bitte, was im "realen Spiel" nicht vorkommt, und wobei bestimmte engines dann automatisch weniger gut abschneiden?
Beim Remisschieben?
Hingegen kommen im "realen Spiel" (der engines, der Menschen?) Opfer, Angriffe, Motive nicht vor?
Parent - By Ingo B. Date 2014-05-18 09:15
Peter Martan schrieb:


Was spricht denn bitte dagegen...


Der Peter; immer bemüht um die Ecke zu denken und alles misszuverstehen. Schade eigentlich.
Parent - - By Ludwig Buergin Date 2014-05-18 09:40
Hallo Ingo

   Du schreibst=== Kurz: Knoten sind Schall und Rauch,

Das stimmt so nicht absolut.Je nach Gängikeit einer in einem fortlaufenden Spieles entstandenen Stellung können unterschiedliche abweichende Knotengrößen schon eine Aussage über die  mögliche momentan vorhandene Schwierigkeit der weiteren Zugfindungen   aussagen.

Gruß Ludwig
Parent - By Ingo B. Date 2014-05-18 11:11
Ludwig Buergin schrieb:

Hallo Ingo

   Du schreibst=== Kurz: Knoten sind Schall und Rauch,

Das stimmt so nicht absolut.Je nach Gängikeit einer in einem fortlaufenden Spieles entstandenen Stellung können unterschiedliche abweichende Knotengrößen schon eine Aussage über die  mögliche momentan vorhandene Schwierigkeit der weiteren Zugfindungen   aussagen.



Hmm, über die Aussage ob Knotenzahlen etwas über die "Schwierigkeit" einer Stellung aussagen müßte ich jetzt nachdenken. Aus dem Bauch wüßte ich jetzt keine Engine deren Knotenzahlen bei einer schwierigen Stellung "sinkt". Was ist "schwierig" und hat eine Engine nicht Ruck Zuck über diese Schwirigkeit hinweggerechnet? Warum wäre das denn so? Weil die Eval in schwierigen Stellungen länger dauert?
Wie gesagt, müßte ich nachdenken...

Natürlich ist das nicht absolut, die ein oder andere Engine kenne ich ganz gut und meine aus den Knoten etwas lesen zu können (Bei Shredder kann ich dir sagen wann er ziehen wird - aber nicht wegen der Knoten ) in der Praxis taugen Knoten aber nur für denjenigen der den Sourcecode kennt und sind ansonsten irrelevant (insbesondere im MP Betrieb).
Im obigen Thread geht es um die Vergleichbarkeit von verschiedenen Engines. Da bei verschiedenen Engines jeder anders (und etwas anderes) misst, sind in diesem Fall Knoten nur Schall und Rauch. (Näheres oben)

Gruß
Ingo
Parent - - By Thomas Plaschke Date 2014-05-18 13:20
Ludwig Buergin schrieb:
...
Je nach Gängikeit einer in einem fortlaufenden Spieles entstandenen Stellung können unterschiedliche abweichende Knotengrößen schon eine Aussage über die  mögliche momentan vorhandene Schwierigkeit der weiteren Zugfindungen   aussagen.
...

So ganz mag ich da nicht folgen. Unterschiedliche Knotenzahlen sind mE nur zum Vergleich verschiedener Versionen einer Engine aussagekräftig (Auswirkungen von Änderungen im Quellcode, veränderter Hardwareressourcen (Hashtables, Endspieltabellen) oder anderer Hardware). Verschiedene Engines würde ich aber nicht über die Knotenzahlen vergleichen. Welche Aussage hätte das Ergebnis Engine 1 benötigt in Stellung A 100.000 Knoten, Engine 2 dagegen 500.000 Knoten. Aber in Stellung 2 benötigen die Engines 75.000 und 115.000 Knoten.

In der (Computerschach-Stein-)Zeit haben wir aus der unterschiedlichen Knotenzahl auf die Wirksamkeit bestimmter Algorithmen geschlossen. In der von Andreas Strangmüller angestoßenen Diskussion geht es aber um die Nutzung der Hardwareressoucen (konkret: der CPUs) durch die Engines. Zur Beschreibung der Intelligenz/Wirksamkeit der verschiedenen Parallelsuchverfahren hat er die Zahl der Prozessorkerne zur Suchtiefe bei fester Zeitvorgabe genommen (DTT = depth 'til time?). Ein nahe liegender Ansatz, finde ich.

Nachvollziehen kann ich aber auch die Testbedingungen Zeit bis Tiefe (TTD = time to depth) oder Zeit bis zur Lösung (TTS = time to solution). Zur TTS muss ich anmerken, dass ich mich erinnere, bei Stockfish (bei 4 cores) bis zu 3 Halbzüge Unterschied gesehen zu haben. - Bei Branchingfactor 2 könnte das 1/2³= ein Achtel der sonst benötigten Bedenkzeit sein. Wenn man da ein statistisches Mittel nehmen will, könnten die Extrema ganz schön viel Gewicht bekommen. Diese Problematik würde sich bei 32 cores vermutlich noch viel stärker stellen.

TTD ist letztlich identisch mit dem von Andreas Strangmüller beschriebenen Verfahren. Das eine ist doch nur der Kehrwert des anderen (das eine Mal mit konstanter Zeit, das andere Mal mit konstanter Tiefe), oder irre ich mich da?

Viele Grüße
Th. Plaschke
Parent - - By Benno Hartwig Date 2014-05-19 07:10

> Unterschiedliche Knotenzahlen sind mE nur zum Vergleich verschiedener Versionen einer Engine aussagekräftig


Das ist sicher so.
Gerade Vas hatte uns doch gezeigt, wie phantasievoll mit dieser nps-Angabe umgehen kann.
Da nps-Vergleiche verschiedener Engines sind m.E. sinnlos, egal ob die ähnliche Werte zeigen oder ob diese Werte sehr unterschiedlich sind.

Benno
Parent - - By ? Date 2014-05-19 08:41
Benno Hartwig schrieb:
...
Da nps-Vergleiche verschiedener Engines sind m.E. sinnlos, egal ob die ähnliche Werte zeigen oder ob diese Werte sehr unterschiedlich sind.
...
Völlig richtig!

Schaut man auf die Grafik, sieht man, dass aus einem anderen Grund nicht einmal die Stockfish-Versionen miteinander vergleichbar sind. Die scheinbar schlechtere Parallelsuche von Stockfish DD wäre auch durch einen anderen Suchansatz zu erklären (ab einer bestimmten Core-Anzahl weniger selektiv). Ich vermute aber, dass Stockfish140513 schlicht stärker selektiert.

Was man darüber auch nicht vergessen darf, sind die Auswirkungen unterschiedlicher Suchverfahren und ihre unterschiedlichen Implementationen. Als Nicht-Fachmann ist mir bspw. aufgefallen, dass die Threads untereinander über Datenstrukturen kommunizieren, die zeitweise für andere Threads gegen lesen oder schreiben gesperrt werden. Dadurch scheint mancher Engine eine Menge Sand ins Getriebe zu geraten. Im TCEC ist mir aufgefallen, dass Togas Knotenleistung und Tiefe bei 16 Cores kaum besser waren als auf meinem 4 Core-PC.

Die Vergleichbarkeit erleichtert das auch nicht gerade.

Viele Grüße
Th. Plaschke
Parent - - By Benno Hartwig Date 2014-05-19 09:28 Edited 2014-05-19 09:32

> Als Nicht-Fachmann ist mir bspw. aufgefallen, dass die Threads untereinander über Datenstrukturen kommunizieren, die zeitweise für andere Threads gegen lesen oder schreiben gesperrt werden. Dadurch scheint mancher Engine eine Menge Sand ins Getriebe zu geraten. Im TCEC ist mir aufgefallen, dass Togas Knotenleistung und Tiefe bei 16 Cores kaum besser waren als auf meinem 4 Core-PC.


Mag sein, dass deine Idee in die richtig Richtung führt.

Ich hatte gedacht gehabt, dass eine schlechte Parallelisierung dazu führt, dass viele Knoten berechnet werden, die für die Entscheidung letztlich irrelevant sind, oder dass trotz Hashtable Berechnungen mehrfach erfolgen. Beides hätte dann aber wohl zu hohen nps-Werten führen müssen, auch wenn die Geschwindigkeit des in-die-Tiefe-Gehens und damit die Spielstärke davon nur wenig profitieren könnte.

Und nun steigt bei Houdini bei der Rechenpowerverdopplung 16->32 kerne der nps-Wert nur um schlappe 20 Prozent.
(und bei diesen 20% können immer noch unsinnigerweise und doppelt berechnete Knoten dabei sein)
Sand im Getriebe, Sperrungen, Warteschlangen. Mag sein.

Geschwindigkeitssteigerungen durch Schnellermachen einzelner Kerne werden zunehmend schwierig, denke ich.
Da ist die Flucht in viele-Kerne dann schon ein Weg, weiterhin kräftig Leistungssteigerungen zu produzieren.
Wird ein anständiger Arbeitsplatzrechner in 20 Jahren ggf. 16 Kerne haben?
Und wieviele Kerne wird eine Maschine haben, die man sich hinstellt, um eine Super-(schach-)Maschine zu besitzen?

Entwicklungsarbeit in eine sehr gute Parallelisierung erscheint mir sehr wichtig, wenn man auchin paar Jahren noch eine Top-Engine anbieten will.
Komodo(?) wurde doch auch lange nicht wirklich ernst genommen, eben weil es da nur eine 1-Kern-Version gab.
Ähnlich wird es in ein paar Jahren den Engines ergehen, die nur bis zu 4 Kernen gut skalieren.

Benno
Parent - By Thomas Plaschke Date 2014-05-19 20:03
Ich glaube auch, dass viele Programme noch gute Optimierungspotentiale in ihrer Parallelsuche haben. - Stichwort: Sand im Getriebe!

Es dürfte aber auch schwer sein, für etwas zu optimieren, das man nicht zum Testen hat. Die meisten Autoren opfern ihre Freizeit für ihre Programme (und uns, denen ihre Arbeit ja auch zugute kommt). Man kann kaum von ihnen erwarten, dass sie für ihr Hobby auch noch kostspielige Hochleistungsrechner anschaffen, um zu sehen, wie gut ein bestimmter Teil ihres Programms ist, der bei den meisten Anwendern nicht voll ausgenutzt werden kann. Ich bin daher sicher, dass sie solche Informationen, wie sie Andreas Strangmüller zur Verfügung stellt, aufmerksam prüfen.

Auf der Hardwareseite scheint die Reise zu CPUs mit immer mehr Kernen zu gehen. Da der PC-Sektor aber schwächelt und die Welt auf x86 geeicht ist, vermute ich, dass die normale PC-Hardware nie aus CPUs mit dutzenden, x86-kompatiblen Kernen bestehen wird. Ein anderer Ansatz wären Multi-Array-Prozessoren wie der Cell -Prozessor der Playstation 3. Als besonders gutes Heim für Schachprogramme wurde die aber auch nicht bekannt. Zurzeit findet man Multi-Array-Prozessoren mit hunderten Recheneinheiten auf Grafikkarten. Die dort gegenwärtig eingesetzten Prozessoren taugen aber nicht für's Schach. - Aber vielleicht später einmal.

Langfristig ist für mich also nichts absehbar - nicht genug Phantasie bzw. Fachwissen. - Aber umso größer die Überraschung am Ende!

Viele Grüße
Th. Plaschke
Parent - - By Roland del Rio Date 2014-05-18 11:16
Zitat:
TTS hat aber den Nachteil das

a) die "Solution" von Menschen bewertet werden müßte und nicht immer stimmen muß
b) "Solutions" im allgemeinen einem Motiv folgen, also ein Opfer/Angriff/Stellung schließen ... Dinge die meistens im Spiel nicht vorkommen. Dies könnte bestimmte Engines bevorteilen die im realen Spiel weniger gut abschneiden (Das ist das alte Problem mit Ranglisten mit Bestmoves aus Teststellungen - es geht einfach nicht vernünftig.)


Hallo Ingo.

Vielleicht verstehe ich hier auch etwas nicht richtig, ich dachte es ging in diesem Thread doch um die jeder Engine inhärente Skalierungsperformance der Threads. Knoten/s halte ich hier erstmal für ein sehr gutes Maß, wenn es rein um dieses Maß geht. Stellt man sich dann die Frage, inwieweit jede
Engine diesen Knoten-Durchsatzgewinn dann in Nutzleistung im Spiel umsetzt, ergibt sich natürlich eine neue Fragestellung. Und wenn ich dich richtig verstehe, ist es diese Frage, um die es dir geht.
Zu b) Ich gebe dir hier recht, dass eine Bestmoves-Rangliste nicht gleich einer ELO-Rangliste sein muss. Aber hier geht es doch um weder noch,
sondern darum wieviel jede Engine durch Hinzunahme weiterer Threads in Hinblick auf die Lösung einer Teststellung profitiert. Das wäre ein Maß,
das die sich aus den Kn/s entstandene Nutzleistung für die Engine misst. Gleicher Ansatz also, als wenn man Partien x Threats vs. y Threads der
gleichen Engine gegeneinander spielen läßt.
Zu a) ich halte gut ausgewählte Teststellungen durchaus für objektiv bewertbar. Natürlich muss hier was greifbares rumkommen und die Lösung
sollte in +4.00 und nicht "in dem entstandenen Endspiel ist der Läufer besser als der Springer" enden. Ich sehe hier den Vorteil der TTS-Lösung
im Vergeich zum Ausspielen von Partien letzlich darin, dass man nicht aus statistischen Gründen sehr viele Partien spielen muss. Der Nachteil
wäre aber sicherlich, dass man daraus eben nicht auf die Nutzleistung der Threads für echte Partien schliessen darf, sprich die Aussage "Engine X löst mit 2x mehr Threads Teststellungen 1.7 mal schneller" ist nicht in ELO-Zugewinn umrechenbar. Um Knotenleistungszuwachs in ELO-Gewinn auszudrücken,
müsste ohnehin jeder Ranglistenbetreiber seine eigenen Messungen machen, denn natürlich hängt das von jeweiligen Testbed ab, also gegen welche Engines man unter welchen Spiel-Bedingungen testet.
Schönen Sonntag
Roland
Parent - - By Peter Martan Date 2014-05-18 11:59
Komisch, Roland, was du da so schreibst, verstehe ich eigentlich alles ganz gut und finde es auch gut nachvollziehbar, und das, obwohl ich doch prinzipiell immer bemüht bin, ums Eck zu Denken und die Dinge misszuverstehen.
Hmh, vielleicht liegt's ja doch nicht nur an mir allein.
Parent - By Ingo B. Date 2014-05-18 12:46
Peter Martan schrieb:

Komisch, Roland, was du da so schreibst, verstehe ich eigentlich alles ganz gut und finde es auch gut nachvollziehbar, und das, obwohl ich doch prinzipiell immer bemüht bin, ums Eck zu Denken und die Dinge misszuverstehen.
Hmh, vielleicht liegt's ja doch nicht nur an mir allein.



Nein nein, das du dich bemühst ums Eck zu denken liegt an mir!

Ingo
Parent - - By Ingo B. Date 2014-05-18 12:45
Moin,

Roland del Rio schrieb:

Vielleicht verstehe ich hier auch etwas nicht richtig, ich dachte es ging in diesem Thread doch um die jeder Engine inhärente Skalierungsperformance der Threads.


Was verstehen die meisten unter Skalierungsperformance? Meiner Meinung nach lautet die Antwort: Wie viel besser wird eine Engine mit mehr Kernen (und so lesen sie die obige Grafik). Und da habe ich Zweifel das das so gemessen werden kann.

Roland del Rio schrieb:

Knoten/s halte ich hier erstmal für ein sehr gutes Maß, wenn es rein um dieses Maß geht.


"Sehr gut" - Nein. Abgesehen von den oben erwähnten Problemen mit dem Hash ist auch bekannt das Komodo ein anderes Skalierungskonzept verfolgt. Wofür Knoten in diesem Fall ein Maß sind ist völlig unklar! Die gesteigerte Knotenperformance von Komodo ist offensichtlich da, aber ob die sich in Spielstärke wiederspiegelt (wie die meisten die Grafik lesen) ist unbekannt. Selbst für klassische Engines (z.B. Crafty) gibt der Autor an das er nie Knoten sondern immer TTD messen würde.

Roland del Rio schrieb:

Stellt man sich dann die Frage, inwieweit jede Engine diesen Knoten-Durchsatzgewinn dann in Nutzleistung im Spiel umsetzt, ergibt sich natürlich eine neue Fragestellung.


"Nutzleistung" ist ein schönes Wort. Ich glaube das das die meisten die obige Statistik so sehen - und das ist falsch!

Roland del Rio schrieb:

Und wenn ich dich richtig verstehe, ist es diese Frage, um die es dir geht.


Dann hättest du den oberen Teil auch nicht schreiben müssen

Roland del Rio schrieb:

Zu b) Ich gebe dir hier recht, dass eine Bestmoves-Rangliste nicht gleich einer ELO-Rangliste sein muss. Aber hier geht es doch um weder noch,
sondern darum wieviel jede Engine durch Hinzunahme weiterer Threads in Hinblick auf die Lösung einer Teststellung profitiert.


Ja, (nur am Rande: Eine (oder 100) Teststellungen haben nichts mit der Komplexität eines Spieles zu tun)

Roland del Rio schrieb:

Das wäre ein Maß, das die sich aus den Kn/s entstandene Nutzleistung für die Engine misst. Gleicher Ansatz also, als wenn man Partien x Threats vs. y Threads der gleichen Engine gegeneinander spielen läßt.


Nein. EINE (oder 100)  Teststellungen erreichen niemals die Komplexität einer (möglichst großen) Serie von Spielen. Also mit deinen vorgeschlagenen Partien X-Threads gegen Y-Threads hast du Recht, mit deiner Analogie zu ein paar Teststellungen, die wie ich oben schrieb immer einem menschlichen Motiv folgen das einer Engine liegen kann und nicht notwendigerweise mit Spielstärke zu tun hat, nicht.

Roland del Rio schrieb:

Zu a) ich halte gut ausgewählte Teststellungen durchaus für objektiv bewertbar. ...


Dachte ich auch mal. Aber entweder sind diese trivial weil von Menschen begreifbar oder von Engines "errechnet" und das kann sich in ein paar Enginegenerationen ändern.
(Und selbst wenn es welche gäbe, wir bräuchten tausende von sicher bewerteten Stellungen die Komplexität von längeren echten Spielserien abzubilden. Diese Anzahl haben wir schlicht nicht!)

Roland del Rio schrieb:

... Ich sehe hier den Vorteil der TTS-Lösung im Vergeich zum Ausspielen von Partien letzlich darin, dass man nicht aus statistischen Gründen sehr viele Partien spielen muss.


Ja, das wäre ein (theoretischer) Vorteil. Nur wie gesagt, wir haben nicht genug komplexe Stellungen um das sinnvoll durchzuführen ... Insofern ist das sehr akademisch.

Roland del Rio schrieb:

Der Nachteil wäre aber sicherlich, dass man daraus eben nicht auf die Nutzleistung der Threads für echte Partien schliessen darf, sprich die Aussage "Engine X löst mit 2x mehr Threads Teststellungen 1.7 mal schneller" ist nicht in ELO-Zugewinn umrechenbar.


Das sehe ich genauso.

Roland del Rio schrieb:

Um Knotenleistungszuwachs in ELO-Gewinn auszudrücken, müsste ohnehin jeder Ranglistenbetreiber seine eigenen Messungen machen, denn natürlich hängt das von jeweiligen Testbed ab, also gegen welche Engines man unter welchen Spiel-Bedingungen testet.


Oh je, wer will denn das wie tatsächlich machen? Eine Rangliste ist schon ein Riesenaufwand. Da der Test (Verhältniss Knoten/Spielstärke) für jede Engine und jeden neuen Release erneut durchgeführt werden müßte, also erst die Spielstärke konventionell mit einer Rangliste festgestellt werden müßte, um dann die Knoten zu betrachten, fragt man sich warum man die Knoten betrachten sollte wenn die gewünschte Information der Spielstärkesteigerung ja schon vorliegt?!! Knoten sind Schall und Rauch

Gruß
Ingo
Parent - - By Roland del Rio Date 2014-05-18 18:18
Moin,

oje, ich sehe schon, da bin ich an einen echten ELOisten geraten. Wenn für dich einzig und allein zählt "was hinten raus kommt" und "hinten raus" = ELO,
dann ist alles was du schreibst korrekt, aber eben auch nur in dem Fall, wenn man das so sieht.
Ich schreibe ja deutlich in meinem ersten Posting, dass Kn/s und TTS nicht in ELO umzurechnen sind.
Wer sich nur für ELO interessiert, für den sind all die Messungen da wie du schreibst in der Tat nicht wirklich greifbar/umrechenbar.
Vermutlich könnte ich mir deiner Meinung nach den Rest des Postings sparen

Zitat:
Und wenn ich dich richtig verstehe, ist es diese Frage, um die es dir geht.

Dann hättest du den oberen Teil auch nicht schreiben müssen


aber ich will es trotzdem nochmal versuchen.

Wer sich in der Formel 1 nur für die WM-Punkte interessiert, der könnte natürlich sagen, dass ihn einzig un allein der Rennerfolg interessiert.
Es gibt aber auch Leute, die beschäftigen sich mit Dingen wie Drehmomentkurven, Aerodynamik des Chassis und Leistungsdiagrammen an der Kurbelwelle.
Eine Verbesserung in einem dieser Teilbereiche ist schwer in Rundenzeiten umzurechnen, denn auch hier greift ein komplexes System ineinander,
dessen Gesamtergebnis eben den Rennerfolg darstellt.
Ebenso im Schach, wen nur ELO-Performance interessiert, der kann diese eben schlecht aus solchen Dingen wie Kn/s oder TTS-Leistungszuwachs direkt
errechnen. Das ist auch nicht Ziel der Übung. Aber es gibt Leute, die interessieren sich nicht mal primär für ELO-Zahlen von Engines.
Dazu zähle zum Beispiel ich, bei mir ist es eher umgekehrt, ich interessiere mich hauptsächlich für ELO-Listen, weil ich davon ausgehen muss,
dass Engines, die hier gut dastehen, diese Kraft aus Komponenten schöpfen, die für mich wichtig sein könnten, wie z.B. TTS.
Für mich sind in diesem Forum z.B. die Postings von Frank Quisinsky meist interessanter, als die von Stefan Pohl zu Zeiten seiner LS-Rangliste.
Und nicht selten gibts hier ja auch Threads der Art "Welcher Engine findet den richtigen Zug in welcher Zeit", mit nicht wenig Resonanz.
Könnte mir auch vorstellen, dass Leute, die Engines in Einsatzgebieten wie Problemschach oder Partieanalyse benutzen sich nicht nur
für ELO-Zahlen interessieren, denn genau die sind für ihre Zwecke ein zu ungenaues Maß
Also, jedem Tierchen doch sein Pläsierchen.

gruß
roland
Parent - - By Ingo B. Date 2014-05-18 18:41
Roland del Rio schrieb:


Zitat:
Und wenn ich dich richtig verstehe, ist es diese Frage, um die es dir geht.

Dann hättest du den oberen Teil auch nicht schreiben müssen




und genau im Zitat unterschlägst oder übersiehst oder  du den Smiley und baust den Rest darauf auf, schade.

Gruß
Ingo
Parent - By Peter Martan Date 2014-05-19 04:51 Edited 2014-05-19 05:13
Ingo B. schrieb:

, schade.


Nachdem dein posting an mich auch genau so geendet hat, und ich dir in genau dem Punkt auch recht gebe (), probier ich's auch nochmal, obwohl es Roland eigentlich schon gut genug auf den Punkt gebracht hat.
Du sagst, wir hätten einfach nicht genug Teststellungen und kannst damit eigentlich auch wieder nur meinen, "um damit Ranglisten unnötig zu machen".
Stimmt, die haben wir aber auch nicht, wenn wir meinen, wir könnten die engines den Großteil dieser Teststellungen selbst erfinden lassen, indem wir sie einfach nur eine entsprechend große Zahl von Partien aus sehr viel weniger Teststellungen, die wir aber auch rein willkürlich aussuchen, ausspielen lassen.
Ich gehe mal auf diesen Denkfehler gar nicht wieder näher ein, aus dem aber das einfach falsche Dogma entsteht: "Elo aus gut erstellten Ranglisten sind das einzig aussagekräftige Spielstärkekriterium und geben perfekt etwas wieder, was man als overall playing strength bezeichnen könnte und müsste, und dadurch und nur dadurch braucht einen  an engines und deren Entwicklung sonst nichts zu interessieren".
Obwohl es einem mit der Flut an >3000-Elo-engines längst rein praktisch vor Augen geführt wird, dass dieses Dogma sich selbst widerlegt hat, und die Speerspitze der engine- Entwicklung, das Stockfish- framework, längst die Elo, die hinten rauskommen sollen, nur mehr mit gezielt für bestimmte Stellungstypen programmierten patches füttert, (merke: autoplay als Fortschrittskontrolle ist nicht gleich autotuning, es kommt einfach nicht nur darauf an, wie, sondern auch darauf, was genau du testest), obwohl das alles so ist und hinlänglich bekannt, hältst du eisern daran fest, ich bin mir nach dem, was du in diesem thread hier wieder so schreibst, ziemlich sicher, aus genau einem Grund:
Du lässt einfach als "Teststellungen", wie du sie dir vorstellst, nur solche gelten, bei denen es deiner persönlichen Ansicht nach nur einen einzigen best move gibt, der noch dazu mit einem Riesenevalabstand gegen alle anderen Kandidatenzüge beweisbar ist.
Das ist einfach Scheuklappendenken, Ingo, deine Teststellungen deines Ranglistentestsets sind auch Teststellungen, egal wie du sie nennst, und du legst besonderen Wert darauf, dass sie keinen best move als "Lösung" haben, in Wirklichkeit ist genau das der pure Selbstbetrug, es sind Teststellungen und deshalb, weil du die best moves, die es in jeder Stellung gibt, einfach nicht kennst, und ihn dir die engines auch nicht anhand ihrer einzelnen numerischen Evals beweisen können, ist das noch lange nicht anders.
Du sagst, es gäbe einfach nicht genug Teststellungen und im selben Satz sagst du dazu, wenn sie die engines nicht in Unmengen von Partien selbst erfinden.
Das ist interdictio in se, Ingo, nicht mehr und nicht weniger, da denke nicht ich ums Eck, sondern du, um dir selbst nicht die logisch sonst sofort anstehende Frage beantworten zu müssen, wo ist denn der Unterschied zwischen Stellungen, die der Mensch und solchen, die die engines "erfinden"?
Es gibt keinen in Wirklichkeit, buddhistisch betrachtet genauer gesagt in Wahrheit, nämlich im Wesentlichen:
Schachstellungen sind praktisch unendlich zahlreich, aber alle sind "lösbar", die einen leichter, die anderen schwerer, auch das liegt im Auge des Betrachters, wenn sie dir schwer oder unlösbar vorkommen, liegt das nur daran, dass du nur ganze und halbe Punkte als Ergebnis gelten lässt.
Der einzig wirkliche Unterschied ist, wie ähnlich sie einander in Hinblick auf bestimmte verschiedenste schachliche und programmiertechnische Kriterien sind, wenn du nur 0, 1 und 1/2 zählst, entgeht dir der Großteil dieser Unterschiede ziemlich sicher und du beschränkst dich auf ein kleines Teilgebiet, von dem du meinst, ah, eh unlösbar, kann man an die engines delegieren.

Nimm einfach, wenn du nicht nur die taktischen hot shots als Teststellungen gelten lassen willst und kannst, irgendwelche aus der Fernschachpraxis und der allgemeinen Eröffnungstheorie hinlänglich als ausanalysiert bekannte Stellungen in beliebiger Anzahl, befreie dich von dem Zwangsgedanken, es dürfe nur einen einzelnen Lösungszug geben, lass ein paar verschiedene gelten, die nach gründlicher Analyse in den Evalverläufen in den relevanten Abspielen innert einer definierten Range liegen, was den Quotienten der Evaländerungen über diese relevanten Varianten angeht, nimm von mir aus ruhig auch den STS (hast du dir den überhaupt schon einmal etwas näher angeschaut, ist doch für TDS völlig wurscht, wie du das krampfhaft in diesbezüglich völlig irrelevante Elos umrechnen könntest) und wirf das mit allen möglichen taktischen Testsets zusammen, wenn es dir nur um Quantität geht, um die geht's aber außer dir hier niemandem in dem Zusammenhang.
Bestimmte technische Fähigkeiten in bestimmten Stellungen zu beurteilen, braucht kein Riesenkollektiv, es braucht ein klare Fragestellung, was genau man testen will, und dann muss man sich halt mit der Antwort auf nur genau die eine Frage zufrieden geben und für die nächste Antwort die nächste klare Frage mit der nächsten Teststellung stellen.
Das alles sagt dir nix, ist ok, schade, wenn du es selbst schade findest, aber wenn's dir eh egal ist, nicht einmal das, dann nicht einmal schade, Ingo.
Wissen ist Macht, du weißt nix, macht auch nix, wenn du's eh nicht wissen willst.
Parent - - By Frank Brenner Date 2014-05-19 12:29
Formel 1 ist ein völlig ungeeigneter Vergleich.

bei einer Engine spielt tatsächlich (bei neutralen Enginetests)  ohne Ausnahme nur das was am Ende an ELO herauskommt eine Rolle.

Bei Formel 1 ist es mindestens das folgende:
- Fahrer
- Teamstrategie (Anzahl Liter die getankt werden, Art der Bereifung)
- Motor, Getriebe, Chassis, Reifen

Bezugnehmend zum Ursprungspost:

Kn/s sind ungeeignet um die Qualität der Implementierung der parallelen Suche zu bewerten.
Wir wissen nicht was die Engines genau zählen und mehr knoten bedeutet nicht dass die Knoten auch an sinnvollen Stellungen Rechnen  Eine "dumm" programmiete Engine ordnet jedem Thread jede noch so dumme Suche zu - egal ob das Ergebnis dieser Suche  den Wurzelwert der Stellung beeinflussen kann oder nicht. Eine intelligentere Engine managed die threadverwaltung cleverer und teilt jedem Thread möglichst nur eine solche Suche zu die mit möglichst hoher Wahrscheinlichkeit das Potential besitzt den Wurzelwert beeinflussen zu können.
(Ganz Grob: Bei 2 Threads ist es sinnvoller aus den beiden vermutlich besten Zügen eine Suche zu initiieren als zb nur vom dem besten Zug und von einem vermutlich sehr schlechten. In beiden Fällen wären aber die Kn/s die gleichen)
Parent - - By Benno Hartwig Date 2014-05-19 13:01

> Kn/s sind ungeeignet um die Qualität der Implementierung der parallelen Suche zu bewerten.


Im Prinzip teile ich deine Bedenken.
Aber was da so im Einzelnen passiert, wenn eine Engine bei Kernverdopplung nur 20% nps gewinnt, würde mich doch interessieren.
Und ich vermute einfach mal frech, da läuft irgendwas verdammt schlecht, ist unglücklich programmiert.
Insofern sind zumindest einige Bewertungen wohl schon möglich.

Benno
Parent - - By Frank Brenner Date 2014-05-19 13:52

> Aber was da so im Einzelnen passiert, wenn eine Engine bei Kernverdopplung nur 20% nps gewinnt, würde mich doch interessieren.


Ja das ist richtig. Das muss man dann mal genauer analysieren mit einigen  anderen Stellungen ob das bei Stockfish immer so schlecht ist.

Überhaupt ist es empfehlenswert zumindestens Stichprobenartig andere Stellungen zu vermessen und zu überprüfen ob die messwerte immer ähnlich sind.

Übrigens: Die dümmste nur denkbare Engine skaliert linear (kn/s) mit der Anzahl der Cores. Es ist trivial eine goofy Suche zu programmieren die perfekt skaliert bezüglich  kn/s. Die Effizienz dieser Suche wäre aber freilich ungenügend.
Parent - - By Benno Hartwig Date 2014-05-19 15:02

> Es ist trivial eine goofy Suche zu programmieren die perfekt skaliert bezüglich  kn/s. Die Effizienz dieser Suche wäre aber freilich ungenügend.


Klar. Gerade weil ich einige Angaben so überraschend finde, interessiert mich aber trotzdem sehr diese kn/s Untersuchung.

Ansonsten will ich einfach mal darauf vertrauen, dass eine Suche bis zur Tiefe T bei 1 core dieselbe Qualität liefert wie eine mit 2, 4 oder 16 Kernen, nur dass sie eben unterschiedlich schnell fertig sind (Ist das eigentlich zu mutig?). Und dann fänd ich auch einfach die Zeiten sehr interessant, die bei verscheidenen Kern-Zahlen praxisnah für eben diese Tiefe T benötigt wird.
Diese Zeiten hätten dann einen direkten Bezug zur Spielstärke.
Und man könnte direkt abschätzen, welcher Taktsteigerung eine Kernverdopplung effektiv entspricht.

Korrespondieren diese Zeiten eigentlich gut mit den gemessenen nps-Werten?
Ich wäre wirklich nicht überrascht, wenn es hier auch deutliche Abweichungen gäbe!

Benno
Parent - - By Timo Haupt Date 2014-05-19 17:16
Benno Hartwig schrieb:

Ansonsten will ich einfach mal darauf vertrauen, dass eine Suche bis zur Tiefe T bei 1 core dieselbe Qualität liefert wie eine mit 2, 4 oder 16 Kernen, nur dass sie eben unterschiedlich schnell fertig sind (Ist das eigentlich zu mutig?).


Hallo Benno,

die oben gemachte Aussage trifft auf Engines wie Komodo und vor allem Junior leider nicht mehr zu, denn die Suche liefert mit threads > 1 möglicherweise bessere Qualität, da etwas mehr in die Breite gerechnet, also Selektivität zurückgenommen wird. Kai Laskos hat im Talkchess-Forum dazu mal Untersuchungen angestellt: http://talkchess.com/forum/viewtopic.php?t=51956

Interessant und damit lesenswert ist dazu allerdings auch die Meinung von Dr. Hyatt in dem entsprechenden Thread. Er hat ja sehr viel Erfahrung mit SMP-Implementierung, insofern kann man seinen Ansichten dazu sicherlich vertrauen.

Viele Grüße
Timo
Parent - - By Jörg Oster Date 2014-05-19 17:44
Timo Haupt schrieb:

Benno Hartwig schrieb:

Ansonsten will ich einfach mal darauf vertrauen, dass eine Suche bis zur Tiefe T bei 1 core dieselbe Qualität liefert wie eine mit 2, 4 oder 16 Kernen, nur dass sie eben unterschiedlich schnell fertig sind (Ist das eigentlich zu mutig?).


Hallo Benno,

die oben gemachte Aussage trifft auf Engines wie Komodo und vor allem Junior leider nicht mehr zu, denn die Suche liefert mit threads > 1 möglicherweise bessere Qualität, da etwas mehr in die Breite gerechnet, also Selektivität zurückgenommen wird. Kai Laskos hat im Talkchess-Forum dazu mal Untersuchungen angestellt: <a class='urs' href='http://talkchess.com/forum/viewtopic.php?t=51956'>http://talkchess.com/forum/viewtopic.php?t=51956</a>

Interessant und damit lesenswert ist dazu allerdings auch die Meinung von Dr. Hyatt in dem entsprechenden Thread. Er hat ja sehr viel Erfahrung mit SMP-Implementierung, insofern kann man seinen Ansichten dazu sicherlich vertrauen.

Viele Grüße
Timo

Da wage ich mal vorsichtig zu widersprechen. 
Sicher hat Dr. Hyatt sehr viel Erfahrung, aber er hält auch sehr an 'alten' Erkenntnissen fest. Frei nach dem Motto: was nicht sein kann, darf nicht sein.

Warum z. B. sollte eine Engine von einer parallelen Suche nicht auch qualitativen Nutzen ziehen können? Sprich, mehr in die Breite gehen in der Suche als mit 1 Thread?
Engines wie Junior, Rybka und vor allem Komodo beweisen dies eindrucksvoll.
Aber lt. Bob ist eine parallele Suche nur dafür da, quantitativen Nutzeffekt zu haben, sprich schneller auf Tiefe zu kommen!

Ich habe da eine andere Meinung ...
Parent - - By Timo Haupt Date 2014-05-19 20:13
Jörg Oster schrieb:

Da wage ich mal vorsichtig zu widersprechen. 
Sicher hat Dr. Hyatt sehr viel Erfahrung, aber er hält auch sehr an 'alten' Erkenntnissen fest. Frei nach dem Motto: was nicht sein kann, darf nicht sein.

Warum z. B. sollte eine Engine von einer parallelen Suche nicht auch qualitativen Nutzen ziehen können? Sprich, mehr in die Breite gehen in der Suche als mit 1 Thread?
Engines wie Junior, Rybka und vor allem Komodo beweisen dies eindrucksvoll.
Aber lt. Bob ist eine parallele Suche nur dafür da, quantitativen Nutzeffekt zu haben, sprich schneller auf Tiefe zu kommen!

Ich habe da eine andere Meinung ...


Hallo Jörg,

aber er könnte Recht damit haben, wenn er meint, dass man diese "Suchoptimierung" dann auch für einen Thread anwenden könnte. Die Frage ist ja, ob das In-die-Breite-Rechnen nicht auch bei Singlethread die Spielstärke erhöhen würde - ob das die Programmautoren hinreichend untersucht haben? Wenn ja und das Ergebnis war, dass es bei einem Thread keinen Nutzen brachte (oder sogar geschadet hat), wäre es natürlich ein starkes Indiz dafür, dass die zusätzlichen Threads effektiver sind, wenn man das Suchfenster etwas breiter macht als einfach nur stur die nächste Iteration schneller zu erreichen.

Viele Grüße
Timo
Parent - - By Jörg Oster Date 2014-05-19 20:58
Timo Haupt schrieb:

Jörg Oster schrieb:

Da wage ich mal vorsichtig zu widersprechen. 
Sicher hat Dr. Hyatt sehr viel Erfahrung, aber er hält auch sehr an 'alten' Erkenntnissen fest. Frei nach dem Motto: was nicht sein kann, darf nicht sein.

Warum z. B. sollte eine Engine von einer parallelen Suche nicht auch qualitativen Nutzen ziehen können? Sprich, mehr in die Breite gehen in der Suche als mit 1 Thread?
Engines wie Junior, Rybka und vor allem Komodo beweisen dies eindrucksvoll.
Aber lt. Bob ist eine parallele Suche nur dafür da, quantitativen Nutzeffekt zu haben, sprich schneller auf Tiefe zu kommen!

Ich habe da eine andere Meinung ...


Hallo Jörg,

aber er könnte Recht damit haben, wenn er meint, dass man diese "Suchoptimierung" dann auch für einen Thread anwenden könnte. Die Frage ist ja, ob das In-die-Breite-Rechnen nicht auch bei Singlethread die Spielstärke erhöhen würde - ob das die Programmautoren hinreichend untersucht haben? Wenn ja und das Ergebnis war, dass es bei einem Thread keinen Nutzen brachte (oder sogar geschadet hat), wäre es natürlich ein starkes Indiz dafür, dass die zusätzlichen Threads effektiver sind, wenn man das Suchfenster etwas breiter macht als einfach nur stur die nächste Iteration schneller zu erreichen.

Viele Grüße
Timo

Hallo Timo,

es ist doch keine Frage, dass wenn man in die Breite rechnet, dies besser ist. Das Problem ist doch bei Single-Thread, dass man dadurch weniger in die Tiefe kommt, und dieser Nachteil dann den Vorteil der breiteren Suche ganz schnell ins Gegenteil verkehrt. Mit anderen Worten, wo soll man bei Single-Thread die Resourcen hernehmen, um ohne Geschwindigkeitsverlust in die Breite zu gehen?
Aber bei einer typischen YBW Parallel-Suche hast du immer wieder idle Threads. Warum diese idle-Zeit nicht dazu nutzen, in die Breite zu suchen? Wenn man das richtig dosiert, geschieht dies ohne Geschwindigkeitsverlust!
Das heißt, hier stehen uns ungenutzte Resourcen zur Verfügung, die wir für eine breitere Suche einsetzen können.

Gruß, Jörg.
Parent - By Peter Martan Date 2014-05-20 06:17 Edited 2014-05-20 06:20
Jörg Oster schrieb:

es ist doch keine Frage, dass wenn man in die Breite rechnet, dies besser ist. Das Problem ist doch bei Single-Thread, dass man dadurch weniger in die Tiefe kommt, und dieser Nachteil dann den Vorteil der breiteren Suche ganz schnell ins Gegenteil verkehrt. Mit anderen Worten, wo soll man bei Single-Thread die Resourcen hernehmen, um ohne Geschwindigkeitsverlust in die Breite zu gehen?
Aber bei einer typischen YBW Parallel-Suche hast du immer wieder idle Threads. Warum diese idle-Zeit nicht dazu nutzen, in die Breite zu suchen? Wenn man das richtig dosiert, geschieht dies ohne Geschwindigkeitsverlust!
Das heißt, hier stehen uns ungenutzte Resourcen zur Verfügung, die wir für eine breitere Suche einsetzen können.


Klingt ja wirklich plausibel, Jörg. Ich frage mich nur als Programmierlaie, weiß die engine eigentlich, wieviel Zeit ihr für die Suche gerade bleibt?
Sonst könnte man ja auch hergehen und in Fällen, wo taktische hot shots oder einfach auch nur kleinwinzige Evaljumps (sozusagen Bewertungshopser) in größerer Zahl "in Sicht" kommen, mehr Rechenleistung in die Breite investieren oder auch mehr in die Tiefe, wenn sich die Evalschwankungen nur in einigen wenigen Varianten und erst in größerer Tiefe zeigen, je nachdem, wie groß der Zeitdruck gerade ist, die Bedenkzeit an und für sich und die Restzeit, auch im Vergleich zum Gegner.

Man macht das ja als user immer wieder manuell mit MV- Modus oder indem man einfach ein paar Züge einer bestimmten Variante eingibt.
Die engine, die ja sicher in den Suchbaumbeschneidungen und -extensions da ohnehin schon lange sehr raffiniert variiert, je nachdem, was die Suche  an Evaldifferenzen bringt, könnte sich doch dann auch danach richten, wenn noch viel Zeit auf der Uhr ist (relativ zu der vom Gegner?), rechne ich an kniffligen Stellen einfach länger, nein?

Wie siehst du das eigentlich mit Michael Scheidls Vorschlag nicht nur Knoten in der Zeit und TTD, sondern auch TTS (time to solution) zum direkten Leistungsvergleich heranzuziehen?
Ich weiß wohl, das Teststellungen verschiedenster Art schon längst wieder mehr verwendet werden, und dass das durchaus nicht mehr nur, sondern ohnehin schon eher seltener die klassischen taktisch best move- Aufgaben sind, kann man aber deiner Meinung nach überhaupt einen vergleichbaren und reproduzierbaren Output gewinnen aus TTS, der dann auch Input für die Programmierer bietet?

Ich finde sowieso, es sollte nichts ausmachen, ob das bm oder am (avoid move) Aufgaben sind oder rein positionelle Stellungen, in denen man halt die paar annähernd gleich guten Lösungzüge anhand von gut durchanalysierten Varianten in eine bestimmte Evalrange einordnen kann.
Damit die numerischen Unterschiede in den Evals verschiedener engines weniger zählen, könnte man ja einfach eine Range eines Evalquotienten aus der Bewertung vor und der nach den gefragten Lösungszügen verlangen, was da nicht drin liegt und eine beliebig große Zahl von Lösungszügen nicht findet, ist ein Nuller und sonst ein Einser. Auf die Art wäre man endlich weg von dem in den Hirnen vieler Tester festgefrorenen Bild vom Pfui-Pfui-Stellungstest, der nur die Stellungen testet, was übrigens natürlich sowieso die nobelste Aufgabe jedes Stellungstests ist und die unabdingbare Voraussetzung dafür, dass man engines damit testen kann.
Würde sich endlich der Krampf, alles, was getestet wird, müsse sofort in Elo umgerechnet werden, etwas lockern, wäre das meiner Meinung nach schon ein Gewinn für sich.
Parent - By Benno Hartwig Date 2014-05-20 10:27
Ich denke, es ist bei 1 Thread und bei mehrern Threads immer die Abwägung, die der Entwickler zu machen hat, ob er die zur Verfügung stehenden Ressourcen mehr für Breite oder Tiefe nutzt. Und dabei ist es einigermaßen unerheblich, ob diese Ressourcen aus viel Zeit oder vielen Kernen bestehen. Eine Besonderheit bei vielen Kernen sehe ich nicht.

Eine Schwächung, die durch einen zu mutigen Cut hineingekommen ist, kann ja kaum durch größere Tiefen der verbliebenen Varianten ausgeglichen werden. Daher kann ich mir vorstellen, dass bei reichlich Ressourcen, egal ob viele Kerne oder viel Zeit, zumindest auf den unteren Ebenen breiter gerechnet wird (werden sollte).

Allerdings kann ich mir vorstellen, dass bei Parallelsuche das Wissenshandling weniger gut geschieht. Manches ist ggf. bei einer Teil-Analyse auch nicht bekannt, was auf einem Thread bekannt wäre. Hier könnte es dann  bei der Parallelsuche auch unfreiwillig zu einer breiteren Suche kommen. (hohe nps-Werte ohne Nährwert)

Benno
Parent - By Frank Brenner Date 2014-05-19 21:54

>Sicher hat Dr. Hyatt sehr viel Erfahrung, aber er hält auch sehr an 'alten' Erkenntnissen fest. Frei nach dem Motto: was nicht sein kann, darf nicht sein.


Mit dieser Aussage liegst du völlig daneben !!!
Parent - - By Benno Hartwig Date 2014-05-19 21:42

> denn die Suche liefert mit threads > 1 möglicherweise bessere Qualität


Ich habe gerade mal ein kleines Duell gestartet, bei dem der altuelle Stockfish 14051924 gegen sich selbst antritt.
- gleiches Buch
- 1 Thread gegen 2 Threads
- feste Tiefe 18
mal gucken, ob sich da einer irgendwie absetzen kann.

Benno
Parent - - By Jörg Oster Date 2014-05-20 10:57
Tiefe 18 ist natürlich schon 'ne Hausnummer. Tiefe 14 hätte es auch getan und wäre schneller fertig gewesen.
Nach den Tests von Kai Laskos im CCC, müssten 2 Threads besser sein.
Wie siehts denn bisher aus?
Parent - - By Benno Hartwig Date 2014-05-20 11:44

> Tiefe 18 ist natürlich schon 'ne Hausnummer.


So schlimm ist das nicht. SF kommt halt schnell auf Tiefe, auch auf dem kleinen i3-Notebook. Eine Partie dauert dann nur 3 bis 4 Minuten.
Ich hatte eher gegrübelt, ob ich nicht lieber Tiefe 20 nehme.

Im Moment steht es noch ziemlich ausgeglichen (c2 steht für "2 cores"):
   Motor                 Punkte
1: Stockfish_14051914_c2 151,0/298
2: Stockfish_14051914_c1 147,0/298


1000 Partien wollte ich gern spielen lassen.
Und wenn mir nix Geschieiteres einfällt, schicke ich das danach mit 1 Kern gegen 4 Kerne hinterher (der i3 kann ja Hyperthreading)
Benno
Parent - - By Tom Paul Date 2014-05-20 11:59
Wenn der Unterschied gerade einmal 4 Punkte beträgt, müsste dann nicht Stockfish im MV 2 Modus besser spielen als Stockfish im MV 1 mit 2 Kernen?
Parent - By Benno Hartwig Date 2014-05-20 12:55
MV=2 ist doch eine ganz andere Schiene.
Während im normalen Spielmodus nach einem 'bislang besten Zug' die anderen ja 'nur' widerlegt zu werden brauchen, muss bei MV=2 ja wirklich auch der zweitbeste Zug analysiert werden. Widerlegen kann man dann nur, dass ein Zug zu den zwei besten gehört.
MV=2 muss daher deutlich mehr Knoten durchrechnen als MV=1, und es wird daher spürbar langsamer sein.
Im zeitgesteuerten Spielbetrieb ist das nicht zu gebrauchen.

Aber bei vorgebenen Tiefen könnte man MV=1 und MV=2 mal vergleichen um zu prüfen, ob die bei MV=2 gefunden Züge im Durchschnitt ggf. ein wenig besser sind (auch wenn diese Analyse länger dauert), oder ob das gar nicht der Fall ist.

Benno
Parent - - By Jörg Oster Date 2014-05-20 12:29
Ja, bei 2 Kernen kann man noch nicht so viel erwarten. Vielleicht mache ich hier mal einen Test mit 1 zu 8 Kernen. Da müsste der Unterschied dann schon deutlicher sein.
Parent - - By Benno Hartwig Date 2014-05-20 12:50 Edited 2014-05-20 12:58

> Vielleicht mache ich hier mal einen Test mit 1 zu 8 Kernen


Fänd ich sehr interessant.
Mein i3 hat nur 2 reale Kerne, mit Hyperthreading eben 4.

Vor einer Weile hatte ich hier mal frech noch höhere Kern-Werte eingetragen.
Ich hatte dann den Eindruck, dass es nicht nur wieder deutlich langsamer wurde (klar), sondern dass die Ergebnisse dann auch falsch bis grotesk wurden. So als ob sowas die SF-Logik total verwirrt! Das fand ich nun wieder überraschend!!

Benno
Parent - - By Jörg Oster Date 2014-05-20 19:01
Benno Hartwig schrieb:

Fänd ich sehr interessant.
Mein i3 hat nur 2 reale Kerne, mit Hyperthreading eben 4.

Benno

Hier das Ergebnis nach 1000 Partien mit fester Suchtiefe 12.

Rank Name    Elo    +    - games score oppo. draws
   1 SF-T8     6    9    9  1000   52%    -6   61%
   2 SF-T1    -6    9    9  1000   48%     6   61%


Im Gegensatz zu vorher hat der Patch von Joona also auch bewirkt, wenn auch sehr wahrscheinlich unbeabsichtigt, dass SF jetzt wie manch andere Engine, im SMP-Modus etwas in die Breite sucht.
Parent - - By Benno Hartwig Date 2014-05-20 19:34
Interessant.
Welchen Stockfish genau hast du getestet?
Und 52% lässt noch Spielraum. Wie viele Punkte genau holte denn der T8-SF in diesen 1000 Spielen?

Benno
(bei mir steht es gerade knappe 219,0 zu 216,0 für die 2-Thread-Variante)
Parent - By Jörg Oster Date 2014-05-20 20:45
Es ist diese https://github.com/mcostalba/Stockfish/commit/5ec63eb6b6f43cbd4e25b8f8b97bc8980dbbabef Version.
Hier der Endstand:

Finished game 1000 (SF-T1 vs SF-T8): 1/2-1/2 {Draw by 3-fold repetition}
Score of SF-T8 vs SF-T1: 217 - 178 - 605  [0.519] 1000
ELO difference: 14
Finished match


Gruß, Jörg.
Parent - - By Benno Hartwig Date 2014-05-22 08:57 Edited 2014-05-22 09:00
Nach 1000 Partien:
1: Stockfish_14051914_c1 509,5/1000
2: Stockfish_14051914_c2 490,5/1000


Es ist also sehr ausgeglichen. (Einen kleinen Vorsprung bei mir hatte die 1-Thread-Version!)
Ich denke, ich sollte das Ergebnis aber so werten, dass sich keiner der beiden als stärker zeigen konnte. Der Vorsprung erscheint mir doch zu knapp.
Meine Befürchtung ist halt: Weil ich sah, dass die Ergebnisse bei mehr als 1 Thread nicht wirklich reproduzierbar sind, könnten sich da bei gleicher Tiefe auch schwächere Züge dazwischen mogeln. Aber da kann ich auch daneben liegen.

Das Notebook hat im Moment keine andere Aufgabe, also habe ich jetzt einen Lauf 1-Thread vs. 4-Threads gestartet. Ma' gucken...

Benno
Parent - By Benno Hartwig Date 2014-05-24 08:11
Jetzt sind die 1000 Partien 1-Thread gegen 4 Threads durch.
Feste Tiefe 18

     1: Stockfish_14051914_c1 516,5/1000
     2: Stockfish_14051914_c4 483,5/1000


Wieder ein Vorsprung für die 1-Thread-Version, diesmal ein wenig deutlicher.

Meine Tests würden bei mir allmählich doch zu der Vermutung führen, dass SF bei gleicher Tiefe eine etwas schlechtere Zugqualität liefert, wenn mehrere Kerne eingesetzt werden.
Aber Jörgs Ergebnisse weisen ja eher in die entgegengesetzt Richtung.
Vermutlich ist die Zugqualität doch im Wesentlichen gleich

Benno
Parent - By Hauke Lutz Date 2014-05-19 17:17
Vielen Dank für diesen wunderbaren Test.
In wie weit sich die Rechengeschwindigkeit erhöht (oder eben nicht wesentlich) ist interessant.
Möglicherweise wäre jedoch eine Liste mit der Anzahl der berechneten Halbzüge innerhalb von 20 Sekunden sehr ergänzend.

Gruß
Hauke
Parent - - By Roland del Rio Date 2014-05-20 14:48 Edited 2014-05-20 15:26
Zitat:
bei einer Engine spielt tatsächlich (bei neutralen Enginetests)  ohne Ausnahme nur das was am Ende an ELO herauskommt eine Rolle.

Bei Formel 1 ist es mindestens das folgende:
- Fahrer
- Teamstrategie (Anzahl Liter die getankt werden, Art der Bereifung)
- Motor, Getriebe, Chassis, Reifen


Irgendwie verstehe ich die Argumentation nicht. Beim Schach sagst du, spiele für dich nur die Zielgröße ELO eine Rolle.
Für die Vermessung der für die Erreichung des ELO-Ergebnisses verantwortlichen Komponenten wie Stellungsbwertung, (paralleler) Suchalgorithmus, technissche SMP-Implementierung (z.B. semaphoren, spinlocks, process- oder thread-basierend), Bedenkzeitmanagement, ...  interessierst du dich nicht.
In der Formel 1 ist es aber nicht das Rennergebnis was einzig interessieren soll, sondern hier spielen nun die Berachtung der einzelnen Komponenten eine wichtig Rolle?

Aber ok, ich versuche es mal ohne Autos.

Zitat:
Kn/s sind ungeeignet um die Qualität der Implementierung der parallelen Suche zu bewerten.


"Qualität der Implementierung der parallelen Suche", bin mir nicht genau sicher, wie du das meinst und bevor ich das
falsch interpretiere, will ich lieber mal etwas weiter ausholen, damit wir auch vom Gleichen sprechen.
In der Landschaft der heute etablierten parallelen Suchalgorithmen befinden sich neben weiterentwickelten Konzepten wie parallel Alpha-Beta-Suche,
Algorithmen wie YBWC (heute in vermutlich vielen Schach-Engines verwendet) und brute-force Ansätzen wie Shared-Hash-Table
(vermutlich das was du als "dumm programmierte Engine" bezeichnen würdest, so sie ihn benutzen würde).
Parallele Suchalgorithmen haben als Kenngrößen die Merkmale "Speedup" und "Skalierung".
Mal auf Schach übertragen könnte man sagen das Speedup in TTD und Skalierung in NPS gemessen werden kann.
Da die traversierende Baumsuche nunmal inhärente serielle Merkmale aufweist, ist deren Parallelisierung niemals trivial
und auf Schach bezogen heißt das, dass man versuchen muss a) möglichst wenig Arbeit doppelt zu machen und b)
Ergebnisse möglichst unmittelbar in die Suche einfließen zu lassen, um nicht an schon "veralteten" Stellungen herumzurechnen.
Für a) gibt es Hash-Tables und b) versucht z.B. YBWC zu adressieren. Charakteristikum von Algortithmen wie YBW ist aber
deren begrenzte Skalierbarkeit bei aber gutem Speedup. So einfach wie du das mit der "dummen und cleveren Threadverwaltung"
einer Engine beschreibst ist das dann aber nicht, denn natürlich wird das niemand so programmieren, wie du es in dem "dummen Fall"
beschreibst. Das Problem entsteht an der Stelle, wo deine "clevere Engine" nicht genau weiß, was in dem Moment an der Stelle im Baum
clever ist. Sie könnte sich vermeintlich clever verhalten und als clever annehmen, was bis eben noch clever erschien, aber genau
das macht der YBW eben nicht, sondern er rückversichert sich in einem nicht parallelisierten Schritt an vermeintlich optimaler Stelle,
ob sich die  nicht vielleicht der ganze Zweig des Baumes erledigt hat, bevor er mit der Gewalt von vielen Threads in dessen Analyse
einsteigt. Übrigens eines der Beispiele an denen man sieht, dass Algorithmen aus menschenhand stammen  
So, und was machen wir nun in solchen Momenten des "Wartens vom kleinen Bruder", CPU-Resourcen idlen lassen oder vermeintlich
"dumme" Aufgaben verteilen?
Als Engineentwickler ist es sicherlich schwer vorhersehbar, inwieweit die eigene Engine mit ihrem Suchalgorithmus später mal auf
bestimmter Hardware skaliert, also sich die Kurve der Knotenleistung/sec pro weiteren Prozessor/Core/Thread darstellt.
Insoweit sind Messungen wie die von Andreas hier von sehr großem Wert für sie (insbesondere, wenn sie nicht selbst solche Maschinen
zur Verfügung haben). Und ich könnte mir gut vorstellen, dass Engines wie Junior oder Komodo hieraus ihre Konsequenzen gezogen haben
und versuchen auf Systemen in denen ihre Programme mit vielen Threads ins Rennen geschickt werden, dem Problem der abflachenden
Skalierungskurve des mit zunehmender Anzahl von Threads, mit zunehmender Verbreiterung des Suchbaums zu begegnen, die ein besseres
Skalierungsverhalten hat.
In gewisser Weise also aus SMP-Sicht ein Shift zu besserer Skalierbarkeit auf Kosten schlechteren Speedups mit dem Ergebnis einer besseren ELO.
Das die Komodo/Junior-Teams hier festgestellt haben, dass eine breitere Baumstruktur generell Vorteile bringt, kann ich mir nicht vorstellen,
dass müsste dann für single-thread genauso gelten. Die Fragestellung, inwieweit sich die Struktur des Baumes
auf die Spielstärke des Programms, sagen wir mal gemessen in den beliebten ELO, auswirkt, sehe ich als eine sehr komplexe Funktion mit
vielen Variablen. Ob es besser ist in Tiefe X lieber nach X+1, oder breiter in Tiefen <X zu rechnen, hängt sicher ausser von der aktuellen Tiefe X
auch ganz wesentlich von der jeweiligen Stellung ab. Hinzu kommen, wenns um ELO geht, Fragestellungen inwieweit sich Weiterrechnen in
Anbetracht der zu investierenden Bedenkzeit und sich der vielleicht seit mehreren Plys kaum noch ändernden Wurzelknotenbewertung
überhaupt noch lohnt.

Nur nochmal zur Sicherheit:

- nps ist kein gutes Maß um den Spielstärkezuwachs in ELO-Zahlen auszudrücken, sondern ein Maß der Skalierung einer Engine
- TTD ist auch kein gutes Maß um Spielstärkezuwachs in ELO-Zahlen auszudrücken, sondern ein Maß des Speedups einer Engine
- ELO ist vermutlich das einzig gute Maß um Spielstärkezuwachs in ELO-Zahlen auszudrücken.

Ansonsten kann ich jedem (des englischen mächtigen) nur empfehlen bei talkchess vorbeizuschauen, da gibt es viele sachkundige
Diskussionen hierzu.

so, mittagspause um
gruß
roland
Parent - - By Frank Brenner Date 2014-05-21 13:52

>Da die traversierende Baumsuche nunmal inhärente serielle Merkmale aufweist, ist deren Parallelisierung niemals trivial und auf Schach bezogen heißt das, dass man versuchen muss a) möglichst wenig Arbeit doppelt zu machen und b) Ergebnisse möglichst unmittelbar in die Suche einfließen zu lassen, um nicht an schon "veralteten" Stellungen herumzurechnen.


....

Klingt wie aus einem Satiremagazin.
Up Topic Hauptforen / CSS-Forum / Threads-Faktor: Komodo, Houdini, Stockfish und Zappa
1 2 Previous Next  

Powered by mwForum 2.29.3 © 1999-2014 Markus Wichitill