Moin,
[quote="Michael Huber"]
Hallo miteinander,
aufgrund meines geringen Verständnisses zu Thema muss ich hier schon wieder mal doofe Fragen stellen.
Ich möchte gerne die Skalierbarkeit verschiedener Engines messen und vergleichen. Mein Ziel wäre es die Frage zu beantworten
welche Engine am meisten von mehr CPUs/Cores profitiert.
Meine Testumgebung wäre ein Server mit 24 Cores - d.h. ich könnte die Skalierbarkeit von 1 Core über 12 Cores (1 CPU AMD Opteron 6168) bis 24 Cores (2 CPUs AMD Opteron 6168) messen.
Dazu fallen mir folgende Möglichkeiten ein:
1.)
Messen der Summe der berechneten Nodes (über die Engine) über eine gewisse Zeit (z.B. 30 Minuten) in der Grundstellung.
Daraus Berechung der Nodes / Minute für die jeweilige Anzahl an Cores.
Allerdings stellt sich mir die frage - kann man sich da auf die Ausgaben der verschiedenen Engines verlassen?
2.)
Ermitteln in welcher Zeit eine Engine in der Grundstellung auf n Cores eine gewisse Rechentiefe erreicht und Vergleichen der Ergebnisse mit n+x Cores
Das Ganze wäre dann für alle interessierenden Engines die 24 Cores unterstützen (Deep Shredder, Deep Fritz, Deep Rybka, Zappa Mexico, Deep Junior.....)
zu wiederholen.
Aus den Ergebnisse mit verschiedener Anzahl Cores kann man dann ja leicht ermitteln wie weit die jeweilige Engine von einer linearen (idealen) Skalierbarkeit entfernt ist.
Sind das eurer Meinung nach brauchbare Ansätze um das gesteckte Ziel zu erreichen?
Sind euch dazu bessere Möglichkeiten bzw. Teststellungen bekannt?
Michael
[/quote]
Da hst du das große Problem getroffen.
Im allgemeinen wird so etwas über Punkt 2 gemessen. Man nennt das "Time to depth", also die Zeit die eine Engine zum erreichen einer bestimmten Tiefe braucht. Damit kannst du Skalierbarkeit sehr gut messen. Leider mußt da das pro Stellung mehrmals wiederholen und dann natürlich nict nur für ein Stellung sondern für viele. Das "mehrmals" und "viele" kannst du nicht oft genug machen, sagen wir mal so 100 Stellungen pro Spielphase (Eröffnung, frühes Mittel-, spätes Mittelspiel, Endspiel), dann jede Stellung pro Enigne so mindestens 10 mal wiederholen und am Schluß über alles den Durchschnitt nehmen. Wenn du 24 Kerne hast , würde ich bei 1, 2, 4, 8, 12, 16 und 24 Kernen messen und eine Tiefe nehemen, die die jeweile Engine bei 12 Kernen so durchschnittlich (Achtung Rekursion) nach 5 Minunten erreicht. Weiterhin sollte es bei ordentlich großem Hash passieren, am besten ohne das die Enigne Einträge im Hash überschreibt.
Kleiner Hinweis: Solltest du irgend etwas herrausbekommen was jemandem nicht passt, waren es zu die falschen oder zu wenig Stellungen, nicht tief genug gerechnet oder die falsche CPU/OS/Hashgröße.
Ich darf dich für eine genaure Prinzipbeschreibung hierhin verweisen:
http://de.wikipedia.org/wiki/SisyphosGruß
Ingo