Parallele Mandelbrtchen, 
------------------------------------------------------------
c't 19/2006, S. 220


ctapfel.exe    Ausfhrbare Datei  braucht: 
apfelmc.dll    (Berechnungsroutinen, erstellt mit MCV8) 
apfelicc.dll     (Berechnungsroutinen, erstellt mit ICC9.1) 
libguide30.dll  (OpenMP-DLL von Intel)  

ctapfel.dpr          GUI-Hauptproramm fr Delphi 6/7/2005    
apfelunit1.pas       drei Units 
apfelimage.pas
apfelcommon.pas 
ctapfel.ini          Konfigurationsprogramm 
+ dfm-Dateien , Ressourcen etc. 

apfeldll.sln        Solution fr Visual Studio 2005 mit den Projekten 
apfeldll.vcproj   fr MSVC 
apfeldll.icproj   fr Intel   
apfeldll.cpp      Das C++-Programm dazu 

Die SSE- und SSE3-Berechnungsroutinen fr die Mandelbrotfraktale  befinden sich in einer mit MVC8 oder ICC9.1 
erzeugten DLL, so dass sie auch von anderen Programmen, hier mal von einer Delphi-GUI aus benutzt werden knnen.
Die Funktionen knnen einzelne Pixel,  Zeilen (Line) oder Bilder (Frame) erzeugen und die Ergebnisse in einen 
Puffer schreiben. Der Rckgabewert der Funktion ist die Gesamtzahl der Iterationen als 64-Bit-Wert.    

In der apfelicc.DLL befindet sich auch ein OpenMP-Framework, dem man ein komplettes Bild mit einer als ersten
Parameter bergebene  Funktion zum Berechnen einer ganzen Zeile  bergeben kann.  Die Berechnung wird dann  per 
OpenMP parallel ausfhrt - so kommt selbst die  generische Delphi-Routine in den Genuss von OpenMP. 

Das Hauptprogramm ctapfel.exe erfhrt Namen und Art der einzelnen DLL-Routinen ber die ctapfel.ini-Datei, hierber 
lassen sich bei Bedarf auch andere  DLLs einbinden, falls die Funktion einen der untersttzen Typen 
entspricht (siehe ctapfel.dpr). Die Grafikausgabe verzichtet auf DirectX, aber die Methode ber Bitmaps und
den Scanline-Befehl ist auch schon einigermaen schnell. Fr die Farbzuordnung (RGBtab) stehen ein paar einfache
Routinen zur Verfgung - hier knnte man phantasievolle Erweiterungen einplanen. 

Berechnete Bilder lassen sich entweder als .BMP abspeichern oder als Wertetabelle. 

Viel Spass 
Andreas Stiller (as) 
  
  



