Busy Beaver
Der heutige Abend war geprägt von leichter Erkältung und dem Willen ein vollständiges Programm zu implementieren.
Daraus wurde die Implementierung einer Busy Beaver ‚Maschine‘. Eigentlich wollte ich nur mnochmal wissen, ob ich performant implementieren kann und hier bin ich soweit glücklich. 47.000.000 Runden werden innerhalb einer halben Sekunde berechnet.
var states = BeaverRuleParser.ParseRule("1RB 0LC 1RC 1RD 1LA 0RB 0RE 1RH 1LC 1RA", beaver);
Was ist der Busy Beaver… Am Besten hier beschrieben: htttps://en.wikipedia.org/wiki/Busy_beaver.
Ich finde es immer wieder beeindruckend, wie man aus einem ganz kleinen Satz an Regeln (10 Regeln) eine Beschäftigung über mehr als 47 Millionen Schritten erzeugen kann ohne dass eine unendliche Wiederholung eintritt. Der fleißige Bieber ist beschäftigt, er ist sehr lange beschäftigt, wird jedoch fertig!
Der Quellcode ist natürlich auch unter https://github.com/mbrenn/busybeaver-csharp abrufbar…
Paar Erkenntnisse habe ich auch mitgenommen:
- bit[] ist ähnlich schnell wie int[]
- BitArray brachte keinen Geschwindigkeitsvorteil, eher im Gegenteil
- Properties {get;set;} haben einen deutlichen Geschwindigkeitsnachteil, auch wenn sie nur auf ein internes Feld gehen
- JetBrains Performance Viewer ist brauchbar und hilft bei der punktuellen Optimierung
- Der Unterschied zwischen ‚Debug‘ und ‚Release‘ liegt grob bei Faktor 5 bis 10.