Um nach gut 3 Jahren nicht völlig aus der Übung zu kommen, schrieb ich Ende 1996 mal wieder ein C-Programm. Zufrieden stellte ich fest, daß unter Windows NT auch die Microsoft-C++-Compiler endlich Standard-C-Code (mit main und ohne Fenster) übersetzen können und daraus ein normales Kommandozeilenprogramm entsteht.
Siebera führt eine schnelle Primzahlsuche durch nach dem Sieb des Eratosthenes. Besagter Eratosthenes hat im 3. Jahrhundert v.Chr. diesen beeindruckenden Algorithmus entwickelt.
Für diverse Hashfunktion ist es praktisch, eine Primzahl bestimmter Größe geliefert zu bekommen. Und als kleine Kostprobe, was man mit achtstelligen Primzahlen noch machen kann:
Das Programm kann nicht nur ziemlich große Primzahlen ermitteln, es hat noch ein paar andere nützliche Eigenschaften: verschiedene Subsysteme (CPU, Caches, Hauptspeicher, ggf. Festplatten) eines Rechner werden stark beansprucht. Damit kann man
Siebera berechnet Primzahlen von 1 bis zu einem Maximalwert. Pro MByte bringt es gut 16 Millionen (2^24) Zahlen unter. Bedingt durch die Verwendung von 32-Bit-Arithmetik liegt der Maximalwert bei 2^32, dies entspricht 256 MByte Speichernutzung. Geschwindigkeitsbestimmend ist das Speichersubsystem.
Siebera rechnet mit einem 100-MHz-Pentium mit 256 KByte PB-Cache 3,8 Sekunden pro MByte
und auf einem 2,8 GHz Pentium-4 0,35 - 0,40 Sekunden pro MByte. Das Hyperthreading des Pentium-4
zeigt bei diesem Lastprofil keine Verbesserung: 0,74 - 0,80 Sek / MB 2-fach parallel.
siebera -h
gibt einen kleinen Hilfetext aus. Für viele Zwecke ist etwas wie
siebera -m 20M
sinnvoll, 20 Megabyte Speicher belegen. Diese Zahl sollte 10 - 20 Megabyte unter dem vorhandenen Hauptspeicher liegen.
Wenn auf die Platte ausgelagert wird, dauert es wesentlich länger. Ein Absturz während des Laufs läßt auf ein Hardwareproblem schließen.
Und zur Ausgabe der Primzahlen im Bereich 9100 bis 9200:
siebera 10k -p 9100,9200
Binary für MS-Windows95 / Windows98 / WinNT / WinXP :
siebera.zip, 18.884 Bytes
Quellcode auf Anfrage: technik(at)tarohloff.de
Autor: Thomas A. Rohloff, 7.11.1999, aktualisiert am 14.10.2006