Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Tutorial

Threading-Optimierung - Teil 2

von MitgliedThePuppetMasterSeite 2 von 5

Das Problem an sich

Als Beispiel in diesem Tutorial nehme ich ein Projekt von mir als Basis. Es heißt 'Nani' und stellt eine Simulation von Naniten in einem Heterogenem System mit Festen und Dynamischen Einflüssen dar.

Ein Fester Parameter wäre z.B. die Tatsache, das diese Naniten grundsätzlich Energie verbrauchen und auch wieder Aufnehmen können. Jede Nanite kann dies tun. Dadurch stellt die Berechnung dieses Parameters eine feste und immer wiederkehrende Größe dar.
Ein dynamischer Parameter wäre der Tot einer Nanite. Dieser tritt ein, wenn entweder die gesamte Energie verbraucht ist, ein umweltbedingter Strahlentod vorliegt, oder ein sonstiger Einfluss gegeben war.

Diese Berechnung kann theoretisch als auch praktisch in einem Thread erfolgen.

Sehen wir uns einmal die Rechenverteilung an.

Auf einem Feld haben wir 100 Naniten. Diese Erzeugen bei meiner Workstation (Hier ein Fujitsu Siemens Celsius M440) unter den Bedingungen einer dauerhaften Schleifenberechnung mit einer Wartezeit von 1ms eine Wiederholrate von rund 207 Berechnungen pro Sekunde. Das macht ca. 5ms pro Berechnung der Naniten.

Jetzt kommt eine dynamische Größe hinzu. Diese ist eine Strahlungsquelle, deren entstehen quasi nicht vorhersagbar ist. Würde man dies umsetzen wollen, müssten man den Verlauf des Lebenszykluses einer Nanite vorher rechnen, was durchaus machbar, aber nicht im Sinne meiner Simmulation wäre.
Aber zurück: Diese dynamische Größe kann den Wiederholungsrythmus derart drosseln, das pro Berechnung mehr als eine Sekunde vergeht.

Kurz zum Hintergrund dieses Phänomens. Eine Strahlungsquelle ist im Grunde nur ein 'Spot', welcher innerhalb einer Sekunde ca. 100 Partikel aussendet (erzeugt). Jedes dieser Partikel fliegt frei zu einem vordefinierten Punkt, bis es verschwindet (wieder gelöscht wird).
Trifft eines dieser Partikel auf eine Nanite, wird das Partikel sofort gelöscht, und der Nanite ein Schaden hinzu gerechnet. Dies kann zu einem Erdrutscheffekt führen. Anders ausgedrückt: Es kann dazu führen, das Alle Naniten in der näheren Umgebung ebenfalls sterben (je nach Ihrem aktuellen gesundheitlichen Status). Diese wiederum erzeugen selbst Strahlungsquellen, usw.

Aus diesem Grunde bezeichnet man solch einen Einfluss als dynamische Größe.


An sich ist es natürlich nicht sehr ratsam, diese beiden Komponenten voneinander zu trennen. Da das Simulationsmodell jedoch einen größeren Anteil eines Zufälligen Komponente beinhaltet, ist es durchaus möglich, beide Komponenten voneinander in separate Threads auszulagern.

Ein Thread kümmert sich ausschließlich um die Berechnungen der Naniten, der andere um die Partikelpositionierung.

Die gemeinsame Verbindung dieser Berechnungen ist die Kollision eines Partikels auf eine Nanite. Diese muss erkannt werden um eine Aktion ausführen zu können.

Und genau hier ist das 'Nadelöhr' dieser Simulation. Zu viele Partikel produzieren einen gravierenden Anstieg der Berechnungszeit der Naniten.





 

Gehe zu Seite Gehe zu Seite  1  2  3  4  5  
Zusätzliche Informationen und Funktionen
  • Das Tutorial wurde am 05.05.2010 von MitgliedThePuppetMaster angelegt.
  • Die aktuellste Version wurde am 27.05.2010 von Mitgliedfrebas gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen