Back to the mainindex



Fractale - ein ästhetisches Benchmarkprogramm

Einleitung

Das Grundfractal - die GesamtmengeWie hat sich der PC entwickelt ? Wie viel leistungsfähiger ist er geworden ? Diesen Fragen geht in meine Artikelserie über die Entwicklung des PC's nach. Natürlich kann man dies an technischen Daten festmachen - Der Taktfrequenz, die Größe des Arbeitsspeicher, die Anzahl an Transistoren der CPU. Doch was interessiert den Anwender ? Wie es ein Bundeskanzler ausdrückte : "Was hinten rauskommt".  Die subjektive Leistung eines Computers ist schwer zu fassen, da er bei den meisten Aufgaben nur Däumchen dreht, um auf den nächsten Tastendruck zu warten. Schon früher ging es daher darum die Geschwindigkeit in einem "Benchmark" zu messen. Um ein Benchmark geht es in diesem Artikel.

Was sind Benchmarks ?

Ein Benchmark ist vereinfacht ein Test in der ein Computer eine Aufgabe löst. Idealerweise sollte man diese Aufgabe mit Ergebnissen anderer Computer vergleichen können, um eine objekte Maßzahl der Geschwindigkeit zu erhalten. Bei Grossrechnern berechnete man n Ziffern der Zahl Pi oder ermittelte die 1 Millionste Primzahl. Heute wendet man eine Reihe von Wissenschaftlich - Technischen Rechnungen an die sehr viele Einzelkomponenten prüfen. Trotzdem gab es von der bekanntesten "Suite", den SPEC Benchmarks mindestens 4 größere Versionen seit 1992, auch um der gestiegenen Rechenkraft der Prozessoren Rechnung zu tragen.

Viel problematischer sind hier die Rechner mit denen der Autor den Einstieg in die Computerei machte. 8 Bit Rechnern mit typischerweise 16-128 KByte RAM. Wer damals einen Rechner kaufte, der tat dies um Programmieren zu lernen. Es meldete sich kein MS-DOS Prompt oder gar eine grafische Oberfläche. Sondern ein Basic Interpreter meldete "Ready", und wartete auf Eingaben wie "Print 3+5-7". Benchmarks bestanden damals darin in BASIC in kurzen Schleifen einige 1000 Zahlen zu addieren, 100 Strings zu sortieren oder aus dem Bildschirm auszugeben. Was damals getestet wurde war nicht die Geschwindigkeit des Mikroprozessors, sondern die des Systems inklusive Basic Interpreters. Der Autor kann sich noch ganz gut an Benchmarks erinnern die auf einem Rechner schnell liefen, auf dem anderen mit demselben Mikroprozessor aber langsam, weil die Implementierung des Interpreters schlecht war. Beispiel : Z80 Prozessor einmal in Schneider CPC 464 und einmal in - bei fast gleicher Taktfrequenz waren letzter viermal langsamer.

Fractale - ein etwas anderer Benchmark

Selbnstähnlichkeit - Die gleiche Struktur, in verschiedenen Skalen1985 wurde von Benoit Mandelbrot ein Aufsatz veröffentlicht, der von Fractalen handelte, einer mathematischen Menge, die selbstähnlich ist. Darunter versteht man, das man die zugrunde liegende Grafik immer wieder vergrößern kann um immer wieder auf dieselben Figuren zu stoßen. (Siehe die Apfelförmige Struktur, die im Übersichtsbild, wie im Detail auftritt). Die ästhetischen Bilder dazu konnte jeder mit einem Rechner selber programmieren und ausgeben und bald brach eine Fractalmanie aus. Der Vorteil von Transputern - Chips die dazu bestimmt waren parallel an einem Problem zu arbeiten, wurde an Fractalen gezeigt als 12 Transputer dieses Bild in Minuten anstatt einer Stunde aufbauten.

Damit ist ein Fractal ein sinnvoller Benchmark, denn es gibt eine Rechenvorschift die man auch heute noch umsetzen und mit den damaligen Werten vergleichen kann.

Was sind Fractale ?

Eigentlich sind Fractale sehr einfach. Es sind Ergebnisse einer Rechenvorschift. Sie ist sehr einfach und lautet :

Z=Z2+C

Das klingt etwas profan oder ?

Nun bei den reellen Zahlen - denen sie im täglichen Leben begegnen - gibt es auch nur eine Lösung für diese Gleichung. Doch Z und C sind komplexe Zahlen. Darunter versteht man Zahlen die aus einem reellen und einem imaginären Wert bestehen. Bei einer komplexen Zahl gibt es z.B. für den gleichen Wert Z2 unendlich viele Lösungen die in einem Kreis mit dem Radius Z liegen. Man braucht komplexe Zahlen für einige Fragestellungen in Wissenschaft und Technik, z.B. in der Elektrotechnik. Die Grafiken entstehen nun dadurch das man den Bildschirmkoordinaten reelle (X Achse) und Imaginäre (Y Achse) Anteile der Zahl z zuordnet und die Rechenvorschift durchführt.
Dabei geht man so vor :

  1. Berechne die Gleichung Z=Z2+C und prüfe ob sie erfüllt ist. Wenn ja dann gehört diese Zahl zur Mandelbrotmenge und das Pixel ist Schwarz zu färben.
  2. Wenn nicht, prüfe ob das neue Z größer als ein Grenzwert ist, der so gewählt ist, das man weiss das dieses Z nie zur Mandelbrotmenge gehört. Ist dies der Fall so färbe das Pixel in der Farbe, die der Anzahl der Wiederholungen der Rechenvorschift entspricht.
  3. Wenn dieses nicht der Fall ist, dann wiederhole die Rechnung mit dem neuen Z Wert als Basis, und merke dir die Wiederholung
  4. Wurde die Rechnung n mal wiederholt ohne das man ermittelt hat ob das Z zur Mandelbrotmenge gehört oder nicht, so betrachte als zur Mandelbrotmenge gehörend und färbe das Pixel schwarz.

Alle Z laufen entweder irgendwann in die Mandelbrotmenge herein oder heraus. Es ist nur die Frage wann. Das macht diese Rechenvorschrift die in Pascal etwa so aussieht so aufwendig :

Einfluss der Tiefe auf die Zeichnung. Hier Tiefe 30


function Tmandelbrot.Rechne(Re,Im:Double; const X,Y : Double) : 
Integer;
const Abbruch = 8;
var Reel,Imag:Double;
    Farbe : Integer;
begin
  for Farbe:=0 to Iteration do
  begin
    Reel:=Re*Re;
    Imag:=Im*Im;
    if Reel+Imag>Abbruch then begin Result:=Farbe; Exit; end;
    Im:=Im*Re*2-Y;
    Re:=Reel-Imag-X;
  end;
  Result:=0;
end;

Hier entspricht dem n das Ende der Iteration, Abbruch ist der Wert von dem man weiss das er nie zur Mandelbrotmenge gehört. Es wird hier die komplexe Zahl in reelle und imaginäre Teile zerlegt. Pro Durchlauf fallen hier 4 Multiplikationen, 3 Subtraktionen und eine Addition an.  Im schlimmsten Fall pro Pixel also Iteration*8 Rechnungen. Damit hängt die Rechendauer auch von der Iterationstiefe ab.

Die Entwicklung der letzten 17 Jahre.

...und bei Teiefe 300Das erste Fractalprogramm das ich sah, war in Basic geschrieben mit Assemblerteilen um bei diesem rechenintensiven Kernstück Zeit zu sparen. Es war ein Z80 8 Bit Rechner mit 64 K Hauptspeicher und er brauchte 45 min für das Übersichtsbild mit den Koordinaten (-0.5..2,4 in X und -1.2,..1.2 in Y) bei einer Tiefe von 30 zu zeichnen. Das war nicht schlecht, denn ein Turbo Pascal Programm brauchte dafür eine Stunde weil die Rechengenauigkeit mit 12 Stellen höher war. Der Rechner zeichnete damals 320 x 200 Punkte. Schaffte also 24 Punkte pro Sekunde. Mein heutiger Rechner braucht für dieselbe Aufgabe erheblich weniger Zeit - weniger als eine Sekunde bei erheblich mehr Punkten. Er kommt auf 378000 Punkte pro Sekunde, wobei bei Windows  das Zeichnen der Punkte einen großen Teil der Rechenzeit ausmacht - anders als bei meinem 8 Bitter. Eine Assembler optimierte Fassung mit MMX Befehlen ohne Zeichnen der Punkte schafft sogar über 1 Million Punkte pro Sekunde.

Mein heutiger Rechner mit einem 1200  Mhz Athlon ist also fast 40000 mal schneller als mein damaliger 8 Bit Rechner. Das ist eigentlich nicht überraschend, denn ein 8 Bitter hat weder einen Fliesskommaprozessor noch verfügt er über Befehle um auch nur Ganzzahlen zu multiplizieren. Er muss also relativ schlecht bei einem solchen Vergleich abschneiden. Benutzt man wie damals Variablen die nur der Prozessor verarbeitet aber nicht der Coprozessor, so ist der heutige Rechner nur noch 5400 mal schneller - trotzdem eine enorme Steigerung der Rechengeschwindigkeit in den letzten 17 Jahren. Es ist auch heute noch möglich den Rechner durchaus lange mit Fractalen zu beschäftigen. Denn die Menge ist unendlich gross. Nur die Tiefe entscheidet wieviel man davon sieht (vor allem bei kleinen Ausschnitten. Hier z.b. die Spitze in der Mitte des Fractals. Bei der Tiefe 30 und der Tiefe 300. Würde man hier noch weiter gehen, so würde man noch immer feinere Strukturen erkennen.

Dabei haben diese Bilder in den letzten 17 Jahren nichts von ihrer Anziehungskraft und ästhetischen Schönheit verloren. Man findet dieses Prinzip der Selbstähnlichkeit übrigens laufend in der Natur. Sie es bei der Form von Wolken, Küstenformen oder dem Verlauf von Blutgefäßen oder Blattadern. Doch dies ist ein  anderes Thema.

Version 1.0 vom 12/18/2003 09:00:42 © by Bernd Leitenberger