Die Hardware-Sensitivitätsanalyse ist genau das richtige Instrument, um einzuschätzen, wie stark sich historische DOS-Engines und dedizierte Schachrechner bei unterschiedlicher CPU-Leistung wirklich verhalten. Eine präzise, reproduzierbare Textanalyse mit:
- einer einfachen, transparenten Mathematik (Formel) zur Abschätzung von Elo-Änderungen bei veränderter CPU-Taktfrequenz,
- empfohlenen Parametern (drei „Scaling-Raten“: konservativ / typisch / aggressiv),
- konkreten Beispielen für die hier genannten Engines/Device-Typen bei typischen CPU-Punkten (486/66, P90, P133, P233, P333, K6/450),
- einer Diskussion der Nichtlinearitäten und weiterer Einflussfaktoren (Speicher/Cache, Hash, Tabellendaten, Architektur, Compiler/ASM), und
- einer kurzen Praxisanleitung, die Abschätzung für andere Kombinationen selbst anzuwenden
Grundmodell — wie Elo von CPU-Takt abhängt
Viele historische Messreihen zeigen: Elo wächst (nicht linear) mit der Rechenleistung. Ein einfaches, gut brauchbares Modell ist die logarithmische Skalierung (Verdopplung der CPU gibt ungefähr konstanten Elo-Zuwachs):
- (\text{Elo}{\text{ref}}) = bekannte (Referenz-)Elo auf (\text{clock}{\text{ref}}).
- (\text{clock}) in MHz (oder beliebiger Einheit — wichtig ist das Verhältnis).
- (k) = Elo-Gewinn pro Verdopplung (einstellbar; hängt vom Engine-Typ / Alter / Suchalgorithmus ab).
Warum diese Form?
- Bei α–β/iterative-deepening-Engines führt mehr Geschwindigkeit typischerweise zu größerer Suchtiefe, und Suchtiefe wächst ungefähr mit dem Logarithmus des Knotenausstoßes; dadurch ist die Elo-Zunahme pro Verdopplung ungefähr konstant (bis zu den Grenzen des Algorithmus).
Empfohlene Werte für (k) (Elo pro Doubling)
Anhand historischer Beobachtungen (SSDF/CCRL/Retro-Messungen) und Praxiserfahrung drei typische Szenarien zu empfehlen:
- Konservativ: (k \approx 35) Elo / Doubling — für sehr gut skalierende, bereits optimierte Engines (z. B. stark in Assembler oder mit effizienten caches).
- Typisch: (k \approx 50) Elo / Doubling — Faustwert für viele gut geschriebene DOS-Engines der 90er.
- Aggressiv: (k \approx 65) Elo / Doubling — für einfache, taktikorientierte Engines bzw. hardware-simple Programme, die stark von Takt profitieren (oder für kleine Schachcomputer, bei denen jede Verdopplung drastisch die Knotenzahl erhöht).
Hinweis: Für herkömmliche Schachcomputer (z. B. 8-Bit-Designs wie MM II) kann (k) deutlich größer ausfallen (bei Verdopplung von 3.7→7.4 MHz haben historische Messungen z. B. ~+100 Elo gezeigt). Für moderne multi-core Engines ist die Skalierung komplizierter (mehrere Kerne, Hash-Synchronisation, diminishing returns).
Konkrete Beispiele (mit (k=50) als Standard)
Angewendet wird die Referenz-Elo und Referenz-Takte, die zuvor verwendet wurde:
- Nimzo 3.5: Referenz (= 2301) Elo bei Pentium-90 (90 MHz).
- Hiarcs 3: Referenz (= 2276) Elo bei Pentium-90.
- Rebel 10: Referenz (= 2550) Elo bei Pentium-II-333 (333 MHz).
- ChessTiger 12: Referenz (= 2601) Elo bei K6-2 450 MHz (450 MHz).
- Mephisto MM II (Schachcomputer): bekannte Messwerte: ≈1800 Elo bei 3,7 MHz und ≈1900 Elo bei 7,4 MHz (d.h. eine Verdopplung brachte hier ~+100 Elo).
Berechnet wird exemplarisch für fünf Zieltakte (in MHz): 66, 90, 133, 333, 450. (Rechenschritte sind unten transparent angegeben.)
Formel angewendet: (\Delta = k \cdot \log_2(\text{target}/\text{ref})) und (\text{Elo}{\text{target}}=\text{Elo}{\text{ref}}+\Delta).
A) Nimzo 3.5 (Ref 90 MHz → 2301 Elo)
- target 66 MHz: ratio = 66/90 = 0.7333; (\log_2) ≈ −0.447 → Δ ≈ −22.4 → ≈ 2279 Elo
- target 90 MHz: 2301 Elo (Referenz)
- target 133 MHz: ratio ≈ 1.478; (\log_2) ≈ 0.563 → Δ ≈ +28.2 → ≈ 2329 Elo
- target 333 MHz: ratio ≈ 3.700; (\log_2) ≈ 1.888 → Δ ≈ +94.4 → ≈ 2395 Elo
- target 450 MHz: ratio =5.0; (\log_2) ≈ 2.322 → Δ ≈ +116.1 → ≈ 2417 Elo
B) Hiarcs 3 (Ref 90 MHz → 2276 Elo)
- 66 MHz: ≈2254 Elo
- 90 MHz: 2276 Elo (Ref)
- 133 MHz: ≈2304 Elo
- 333 MHz: ≈2370 Elo
- 450 MHz: ≈2392 Elo
(Die Zahlen parallel zu Nimzo, aber ~25 Elo tiefer wegen anderem Referenzwert.)
C) Rebel 10 (Ref 333 MHz → 2550 Elo)
- 66 MHz (sehr langsame Maschine): ratio = 66/333 ≈ 0.198; (\log_2) ≈ −2.333 → Δ ≈ −116.6 → ≈ 2433 Elo
- 90 MHz: ratio ≈ 0.270 → (\log_2) ≈ −1.885 → Δ ≈ −94.3 → ≈ 2456 Elo
- 133 MHz: ratio ≈ 0.399 → (\log_2) ≈ −1.327 → Δ ≈ −66.3 → ≈ 2484 Elo
- 333 MHz: 2550 Elo (Ref)
- 450 MHz: ratio ≈ 1.351 → (\log_2) ≈ 0.435 → Δ ≈ +21.7 → ≈ 2572 Elo
D) ChessTiger 12 (Ref 450 MHz → 2601 Elo)
- 66 MHz: ratio ≈ 0.1467; (\log_2) ≈ −2.773 → Δ ≈ −138.7 → ≈ 2462 Elo
- 90 MHz: ratio 0.200 → (\log_2) ≈ −2.322 → Δ ≈ −116.1 → ≈ 2485 Elo
- 133 MHz: ratio ≈ 0.296 → (\log_2) ≈ −1.761 → Δ ≈ −88.0 → ≈ 2513 Elo
- 333 MHz: ratio ≈ 0.740 → (\log_2) ≈ −0.435 → Δ ≈ −21.7 → ≈ 2579 Elo
- 450 MHz: 2601 Elo (Ref)
E) Mephisto MM II (dediziertes Gerät; zwei reale Messpunkte)
- 3.7 MHz → ≈1800 Elo (historisch gemessen)
- 7.4 MHz → ≈1900 Elo (historisch gemessen)
Das bedeutet: eine Verdopplung (3.7→7.4) brachte hier ~+100 Elo, also (k_{\text{MMII}} \approx 100). Bei sehr einfachen / stark taktikorientierten Engines / festverdrahteten Schachcomputern ist (k) in der Tat viel höher als bei komplexen x86-Programmen, weil jede zusätzliche Rechenpower die Suchtiefe dramatischer erhöht.
Was die Zahlen praktisch aussagen (Interpretation)
- Grobregel: Ein Pentium-II (333 MHz) erzielt für viele gut optimierte DOS-Engines deutlich höhere Elo-Werte als die alte 486er/P90-Plattform. Beispiel: Nimzo 3.5 steigt von ~2300 (P90) auf ~2395 Elo (P2-333) bei (k=50). Das kann eine Änderung von „gegen CM knapp chancenlos“ zu „gegen CM konkurrenzfähig“ bedeuten.
- Hardware-abhängige Spitzenwerte (z. B. ChessTiger12 bei K6-450 mit >2600) sind realistisch — aber auf schwächerer Hardware (P2-333) sinkt diese Zahl spürbar (beispielsweise ~2580 Elo).
- Für dedizierte Schachcomputer (Mephisto MM II) gilt: schon kleine Taktsteigerungen können große Elo-Sprünge bewirken (hier +100 Elo pro Verdopplung beobachtet), weil die Engines sehr „rechenabhängig“ sind.
Wichtige Nichtlinearitäten & zusätzliche Einflussfaktoren (warum einfache Takt- → Elo-Modelle limitiert sind)
Die oben gezeigte Skalierung ist eine nützliche Näherung, aber reale Messungen weichen ab, weil:
- Prozessorarchitektur unterscheidet stark: ein 450-MHz K6-2 kann in Schach-Loops anders performen als ein 450-MHz Pentium. Manche Engines sind in Assembler für 486/Pentium feinoptimiert; portierte C-Versionen profitieren anders.
- Cache / Pipeline / Memory-Bandbreite: hohe Takte nützen nur, wenn der Cache/Memory-Subsystem mithält. Moderne Out-of-order-CPUs gewinnen mehr aus Rechenparallellität als reine Taktzahl.
- Compiler & Assembler-Optimierung: einige DOS-Engines waren in handoptimiertem Assembler (bessere Knotenausbeute / MHz). Bei Umstellungen auf andere CPUs ohne erneute Optimierung verliert man / gewinnt man.
- Hash-Size / RAM: größere Hash-Tables können die Effektivität bei Multi-PV und Wiederverwendung stark erhöhen. Hardware mit viel RAM erlaubt große Hashes; DOS-Systeme hatten oft Limitierungen (EMS/XMS).
- Endspieltabellen (EGTB): Einsatz von Tablebases verändert Endspiel-Elo dramatisch (vor allem gegen sehr starke Gegner). Historische Schachcomputer hatten meist keine (oder nur kleine) EGTB, moderne Engines profitieren stark davon.
- Parallel-Scaling (Multi-Core): Für Engines, die Mehrkern-Suche unterstützen, ist Skalierung nicht mehr eine reine Funktion der Taktfrequenz: Zunahme von Threads bringt ab einem Punkt immer kleinere Elo-Zuwächse (Kommunikations-Overhead, Shared Hash).
- Zeitkontrolle/Time-Management: einige Engines nutzen Mehrzeit sehr effizient — das heißt, Elo-Gewinn bei zusätzlicher CPU wird unter langen Kontrollen wirkungsvoller.
Praktische Faustregeln
- Faustformel (schnelle Schätzung): Nutze obenstehende Formel mit (k=50) als Default. Das gibt in den meisten historischen Fällen eine brauchbare Näherung.
- Wenn Engine in Assembler/auf einfachen Geräten: erhöhe (k) (z. B. 60–100), weil Verdopplung deutlicher „tiefer“ in die Suche reicht.
- Für moderne multi-thread Engines: verwende kleinere effektive (k) für Takt (z. B. 20–40 pro Verdopplung einer einzelnen Kernfrequenz) — stattdessen berücksichtige Anzahl Kerne separat.
- Wenn genaue Werte nötig sind: Nimm zwei bekannte Messpunkte (z. B. SSDF bei 90 MHz und 450 MHz) und kalibriere (k) aus diesen echten Messungen — das reduziert Fehler durch Architekturunterschiede.
Kurze Beispiele zur Anwendung
Angenommen: es gilt zu wissen, wie stark Hiarcs 3 auf einem P2-333 läuft, wenn Referenz ist P90→2276:
- ratio = 333/90 = 3.7
- log2(3.7) ≈ 1.888
- Δ ≈ 50 * 1.888 ≈ +94.4
- Elo ≈ 2276 + 94.4 ≈ ≈2370 Elo.
Wenn konservativ gerechnet wird (k=35), dann Δ≈65.6 → Elo≈2341 (also Spanne ~2340–2370, je nach k).
Ergebnis aus der Sensitivitätsanalyse
- Elo ist sehr sensitiv zur verfügbaren Rechenleistung, aber nicht linear — Verdopplungen sind die sinnvolle Maßeinheit.
- Für DOS-Engines der 90er bedeutet ein Sprung von P90 → P333 typischerweise ~80–120 Elo Gewinn (bei (k) in [40…60]). Das kann ein Programm vom „starken Klubspieler“ in die Nähe von CM/FM bringen.
- Kleine, dedizierte Schachcomputer reagieren noch empfindlicher auf Taktänderungen; bereits moderate Overclocks können große Elo-Sprünge bringen.
- Die Architektur, Speicher, Hash-Einsatz, Endspieltabellen und Compiler/ASM-Optimierung sind mindestens so wichtig wie die nackte Taktfrequenz — für genaue Vorhersagen müssen diese Faktoren mit einbezogen werden.