000
23.10.2006, 15:22 Uhr
Archimedes
|
Hi Coder und Performancefetischisten,
es existiert ja schon paralleler Beitrag über Matheoperatoren. Da ich im Quellcode selber nur noch wenig optimieren kann, stellt sich die Frage, ob man for-Schleifen durch andere Anordnung (Reihenfolge) die Performance verbessern kann.
Der Fall: 3 geschachtelte for-Schleifen. Die Aufgabe: Ein Bild Pixel für Pixel durchlaufen und auf jedem Pixel Untersuchungen berechnen. Die Schleifen: 1. for-Schleife: Höhe des Bildes (ca 400 Pixel) 2. for-Schleife: Breite des Bildes (ca 400 Pixel) 3. for-Schleife: Rechenintensive Untersuchung durch Transformation des Bildes (20 for-Durchläufe) Das Ziel: Maximale Geschwindigkeit ! Es geht um eine Echtzeitanforderung. Sollte ich den "C"-Code nicht schnell genug bekommen, so muss ich auf Assembler zurück greifen (und davor grauts mir ! ;-))
Meine Vermutung: Da ich in 2 Felder nacheinander schreibe (in 3. for-Schleife), muss im Cache viel gesprungen werden (Speichersprünge). Dieser Zugriff schätze ich als Flaschenhals ein. Aufgrund eines Optimierungstools weis ich auch ganz genau, dass die Performance in den beiden Zeilen hängen bleibt, in welchen in die Felder geschrieben wird.
Da ich jeden Pixel durchlaufen und untersuchen muss, kann ich die Schleifen nicht weiter "kastrieren".
Meine Frage: Kann ich durch andere Reihenfolge der for-Schleifen viel Performance gewinnen ? Gibt es weitere Möglichkeiten, bei diesem Problem einen Geschwindigkeitsgewinn zu bekommen ?
Vielen Dank, Grüsse, Archi Dieser Post wurde am 23.10.2006 um 15:40 Uhr von Archimedes editiert. |