Konto_check

Bibliothek zum Test deutscher Bankkonten

Überblick Testseite Download BLZ-Daten Beispiele Programme
Konto_check ÜberblickBenchmarks

Bibliothek zum Test deutscher Bankkonten

Geschwindigkeit von konto_check

Die erste Version der Bibliothek war nicht auf Geschwindigkeit hin optimiert, obwohl auch sie sehr schnell war. Für die Version 2.0 wurden eine Reihe Optimierungen gemacht (mit Hilfe eines eigenen Profilers auf Basis des TSC Prozessorregisters, das mit jedem Takt inkrementiert wird und so Zeitmessungen sogar für einzelne Befehle ermöglicht), und damit die Geschwindigkeit nochmals etwa verdoppelt.

In den späteren Versionen wurde nicht mehr so viel Wert darauf gelegt, aber der grundlegende Programmierstil natürlich beibehalten. Daher ist bei den späteren Routinen nicht jeder Taktzyklus herausgekitzelt worden, aber trotzdem sind die Konstrukte eher auf Geschwindigkeit getrimmt.

Ich habe jetzt (Juli 2014) noch einmal einige Tests mit meinem Laptop gemacht, um aktuelle Werte zu haben. Der Prozessor ist eine Intel® Core™ i7-3720QM CPU @ 2.60GHz, Hauptspeicher sind 16 GB; bei dem Test wird natürlich nur eine logische CPU benutzt. Das Betriebsystem ist 32 Bit Fedora Linux 18 (Kernel 3.11 PAE). Compiler ist der gcc 4.7.2

Für den Test wurde eine Datei mit 63.900.000 Testkonten erzeugt (BLZ/Konto Kombinationen, etwa 1,2 GB Daten). Sowohl die Ein- als auch die Ausgabedatei wurde in /dev/shm/ gespeichert, da ja nicht die Geschwindigkeit der Festplatte gemessen werden sollte :-). Es wurden die folgenden Konfigurationen untersucht:

  1. Compilierung mit -DDEBUG=0 -O3 -fexpensive-optimizations -fomit-frame-pointer -funroll-loops
  2. Compilierung mit -DDEBUG=1 -O3 -fexpensive-optimizations -fomit-frame-pointer -funroll-loops
  3. Compilierung mit -DDEBUG=1 (ohne Optimierung)

Die Zeitmessung erfolgte mit dem Befehl

time ./konto_check -f /dev/shm/testkonten.blz /dev/shm/testkonten.out

Für den Test ergaben sich die folgenden Zeiten:

  1. 4.726 s (13.632.000 Tests/s)
  2. 4.964 s (12.873.000 Tests/s)
  3. 9.674 s ( 6.605.000 Tests/s)

Dabei fällt auf, daß der Unterschied zwischen 1 und 2 nur knapp 6 % ist. Die Option -DDEBUG=1 ist für etliche IBAN-Routinen wichtig, ohne die Option werden einige für diese Berechnungen notwendige Daten nicht bereitgestellt. Einen wesentlich größeren Einfluß auf die Geschwindigkeit hat jedoch die Compiler-Optimierung; mit den ausgewählten Compileroptionen ergibt sich ohne weitere Änderung im Code eine Geschwindigkeitssteigerung um den Faktor 2.

Der Schalter -f (fast) des Kommandozeilentools ist für solche Benchmarks gedacht. Das Programm geht davon aus, daß in jeder Zeile eine 8-stellige BLZ und ein Konto angegeben werden, durch ein (beliebiges) Zeichen getrennt. Falls das nicht der Fall ist, würden u.U. fehlerhafte Tests gemacht. Ohne den Switch -f werden für die erste Variante 7,8 s benötigt, d.h. etwa 8.179.000 Tests/s