|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2507 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 22.12.2013, 21:37 Titel: [FB] [Übung/Demo] Thread-Mandelbrot |
|
|
In Anbetracht zum Diskussionsthema hier ein etwas praktischeres Beispiel zusammengebaut: Mandelbrot-Menge mit Threads berechnen.
Download:
http://beilagen.dreael.ch/QB/ThreadMandelbrot.bas
Damit könnt Ihr Eure modernen Intel Core i7-Prozessoren einmal im Windows-Taskmanager bzw. "top" in Linux kurzzeitig auf 100% CPU bringen. ;-)
Hintergründiges: Dieses Demo-Beispiel verwendet kritische Abschnitte, einerseits das Ausgabefenster (Mutex um jeden PSET), andererseits auf die globale Array-Variable zeiverw(), welches die "Arbeit" verwaltet, also die Threads mit Zeilen zum Bearbeiten "füttert", bis es nichts mehr zu tun gibt.
Das Ganze ist nebenbei noch eine nette Anwendung eines ENUM-Datentyps (Zustände als Symbole für den Compiler statt irgendwelche Integers).
Nebenbei: Vor 25 Jahren hätte ich von einer derartigen Rechenleistung heutiger CPUs nur geträumt, denn damals hätte dieses Bild bei deutlich geringerer Auflösung und geringerer maximaler Rechentiefe bereits eine Nacht lang auf einem IBM PC/XT oder Commodore 64 gerechnet...
/edit: Klasse GfxThreadSafe zur Demonstration von Einkapselung implemenetiert; diese könnte der Autor in der zu Beginn genannten Diskussion noch um Methoden wie tsLine(), tsCircle() usw. ergänzen. Und weil Mandelbrotmengen aus der Welt der komplexen Zahlen stammen, gleich noch eine Klasse für komplexe Zahlen geschrieben; dank Operator-Implementiermöglichkeit kann in FB dadurch sogar 1:1 die Formel z=z^2+c formuliert werden! :-) _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
|
darkinsanity aka sts
Anmeldungsdatum: 01.11.2006 Beiträge: 456
|
Verfasst am: 23.12.2013, 07:05 Titel: |
|
|
Nette Sache, und du hast sogar an die langsame Wurzel gedacht
Wobei es sich allerdings anbieten würde in Zeile 83 die Konstanten für Breite und Höhe zu verwenden statt fester Werte.
Vor kurzem durfte ich sowas selbst für die Uni implementieren, allerdings in C. Verlangt waren eine serielle und eine mit SSE optimierte Implementierung, meine Lösung hat zusätzlich noch OpenMP verwendet. In FreeBASIC wäre das leider nur schwer machbar, da es da weder SSE-Intrinsics noch OpenMP gibt. _________________ Traue keinem Computer, den du nicht aus dem Fenster werfen kannst -- Steve Wozniak |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|