Compileroptimierung: Verbesserung der nahezu divisionslosen Zufallszahlengenerierung von Lemire

2025-03-09

Der Autor hat einen nahezu divisionslosen Algorithmus zur Erzeugung beschränkter Zufallszahlen (Lemires Algorithmus) verbessert. Eine vorherige Version reduzierte Code-Bloat durch Inline-Einbindung des schnellen Pfads, aber die Compileroptimierung war begrenzt. Der Autor entdeckte, dass, wenn die Grenze eine Kompilierzeitkonstante ist, die Ablehnungsschwelle zur Kompilierzeit berechnet werden kann und die Vermeidung der Division unnötig ist. Die neue Implementierung hat nur einen Aufruf an den Zufallszahlengenerator, und der Compiler eliminiert die Schleife automatisch, wenn die Grenze eine Zweierpotenz ist. Dies ist effizienter als die Version des letzten Jahres, und der Autor untersucht ähnliche Kompilierzeitoptimierungstechniken in Rust.