Laufzeiten Sequentiell & Parallelisiert

bttf
Mausschubser
Mausschubser
Beiträge: 76
Registriert: 9. Nov 2011 14:04

Re: Laufzeiten Sequentiell & Parallelisiert

Beitrag von bttf » 14. Jan 2012 14:29

mw1039 hat geschrieben:Es muss eine Laufzeit von \(\displaystyle\frac{\text{sequentielle Gesamtzeit}-6\text{s}}{\mathbf{5}}+6\text{s}\) erreicht werden.
Ich hab es nach dem offiziellem Statement berechnet. Bei den 60,2 Sekunden sind dann natürlich die 6 Sekunden Ladezeit schon berücksichtigt. Soll heißen, wenn der time Befehl bei real ca. 60s zurückgibt, dann reicht's für die 2 Punkte.

Benutzeravatar
ut53xuco
Mausschubser
Mausschubser
Beiträge: 57
Registriert: 20. Nov 2011 18:07

Re: Laufzeiten Sequentiell & Parallelisiert

Beitrag von ut53xuco » 15. Jan 2012 11:56

Kann diese Berechnung bitte mal ein Moderator absegnen?
Dann bin ich nämlich fertig.

bttf
Mausschubser
Mausschubser
Beiträge: 76
Registriert: 9. Nov 2011 14:04

Re: Laufzeiten Sequentiell & Parallelisiert

Beitrag von bttf » 15. Jan 2012 13:15

Diese Berechnung IST von einem Moderator! Guck mal, von wem dieses Zitat stammt! :wink:

Original nachzulesen in dem Thema "Fragen zum Testat", zu finden hier. Letzter Beitrag bei diesem Thema.

Benutzeravatar
ut53xuco
Mausschubser
Mausschubser
Beiträge: 57
Registriert: 20. Nov 2011 18:07

Re: Laufzeiten Sequentiell & Parallelisiert

Beitrag von ut53xuco » 15. Jan 2012 14:45

Oh, Danke^^

Daki
Windoof-User
Windoof-User
Beiträge: 36
Registriert: 4. Nov 2010 14:34

Re: Laufzeiten Sequentiell & Parallelisiert

Beitrag von Daki » 15. Jan 2012 19:06

Hilfe!

Es ist wie verhext! Egal, ob ich den Code daheim auf einer 32-Bit- oder 64-Bit-Maschine ausführe, und egal, ob ich dabei mit jeweils allen Kernen (beide Rechner haben 2 Kerne) oder nur mit einem Thread "parallelisiere": Meine parallelisierte Version benötigt immer etwa 1 Sekunde mehr(!) Zeit als die rein sequentielle Version. (Hinweis: kleineres Bild mit nur 192x192 statt 768x768 Punkten. Laufzeit je nach Prozessor bei mir etwa 75 Sekunden.)

Was ich dabei nicht verstehe: Ich habe einen Prototypen in Java gebaut, für gut befunden (doppelte Threadzahl ergab doppelte Geschwindigkeit usw.) und den Code dann nach C++ portiert. Es gibt dabei nur einen einzigen kritischen Abschnitt im ganzen Code, und dieser wird in meinen Testläufen auch nur etwa 4- bis 8-mal für ein paar Mikrosekunden betreten, je nach Laune der Kerne. Der Rest läuft komplett ohne Synchronisationsbarrieren oder Ähnlichem und lastet die Kerne auch wirklich zu 100% aus! Ich habe auch schon einen Profiler drüberschauen lassen: die zeitfressendste meiner Methoden benötigt gerade mal 0.19% der gesamten Ausführungszeit (inklusive "Startzeit"). Der Großteil der Zeit geht für Funktionen/Methoden drauf, die vorgegeben waren. Es werden auch keine Bildpunkte doppelt berechnet, und alle Threads nehmen bis zum Ende Arbeit an, zur Not auch 1-Pixel-Aufträge.

Habe ich vielleicht irgendetwas bei den Threads falsch eingestellt? Mir kommt es so vor, als ob das Verhalten von mehreren Threads nur simuliert wird, aber in Wirklichkeit doch wieder alles hintereinander ausgeführt wird, oder so. Kann mir da jemand auf die Sprünge helfen oder weiß, wo das Problem liegt?

EDIT: An rand() liegt's nicht, das habe ich schon getestet.

Grüße und frohes Schaffen

Daki
Zuletzt geändert von Daki am 15. Jan 2012 19:37, insgesamt 1-mal geändert.
Nein, mein Nick hat nichts mit Kissen zu tun!

mw1039
Computerversteher
Computerversteher
Beiträge: 346
Registriert: 12. Apr 2011 12:18

Re: Laufzeiten Sequentiell & Parallelisiert

Beitrag von mw1039 » 15. Jan 2012 19:26

Ich weiss nicht, was da passiert. Aber hast du mal versucht, was auf unseren Clusterrechnern passiert?
Vielleicht zeigt sich dieses Verhalten dort ja nicht. Deine Abgabe muss sowieso am Ende darauf lauffaehig sein:
Ihre Abgabe muss ohne Modifikationen mit Hilfe der auf diesem Aufgabenblatt angegebenen Kompilationsanweisungen
auf den von uns zur Verfügung gestellten Rechnern kompilierbar und lauffähig sein.
Auch die geforderten Speedups beziehen sich auf den Cluster.

Daki
Windoof-User
Windoof-User
Beiträge: 36
Registriert: 4. Nov 2010 14:34

Re: Laufzeiten Sequentiell & Parallelisiert

Beitrag von Daki » 15. Jan 2012 19:51

Okay, ich habe noch eine Frage:

Ist es erlaubt, auf die Verwendung von expliziten Warteschlangen und atomics.h zu verzichten? Bisher komme ich nämlich ganz gut ohne aus. Ich verfahre auch nicht nach einem Producer-Consumer-Modell, wo das zwei verschiedene Rollen sind, sondern alle meine Worker sind quasi Producer und Consumer gleichzeitig. Um mal in Netzjargon zu argumentieren: Peer-to-Peer statt Server-Client. Deswegen benötige ich auch keine explizite Warteschlange.

Grüße

Daki
Nein, mein Nick hat nichts mit Kissen zu tun!

mw1039
Computerversteher
Computerversteher
Beiträge: 346
Registriert: 12. Apr 2011 12:18

Re: Laufzeiten Sequentiell & Parallelisiert

Beitrag von mw1039 » 15. Jan 2012 21:26

Die Frage hat Prof. Goesele schon vor Weihnachten in der Vorlesung geklaert:
Nein.
Im Raycaster-Wettbewerb ist alles erlaubt, aber im Praktikum muss! mit Queue gearbeitet werden. Atomics muessen nicht zwingend benutzt werden, wenn du sicher bist, dass keine zwei Threads sich gegenseitig beim Schreiben dazwischenfunken.

Daki
Windoof-User
Windoof-User
Beiträge: 36
Registriert: 4. Nov 2010 14:34

Re: Laufzeiten Sequentiell & Parallelisiert

Beitrag von Daki » 15. Jan 2012 22:57

Okay, das Zeitproblem scheint nur auf meinen lokalen Rechnern zu existieren (Laufzeiten mit kleinerer Szene, ich glaube 256² oder 320² oder so was, inklusive Vorbereitungszeit und ohne Jitter auf dem 06er):

sequentiell:
real 0m36.849s
user 0m36.704s
sys 0m0.051s

parallel:
real 0m9.909s
user 0m52.500s
sys 0m56.080s

Grüße
Nein, mein Nick hat nichts mit Kissen zu tun!

cwb38
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 125
Registriert: 4. Okt 2010 15:53

Re: Laufzeiten Sequentiell & Parallelisiert

Beitrag von cwb38 » 16. Jan 2012 00:32

Wie bitter ist das: Vor einer Stunde herausgefunden, wo der Flaschenhals für die 10 Sekundenmarke ist und in der verbliebenen Zeit nicht mehr hinbekommen zu fixen...

radio_controlled
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 107
Registriert: 8. Okt 2010 20:31

Re: Laufzeiten Sequentiell & Parallelisiert

Beitrag von radio_controlled » 16. Jan 2012 00:53

cwb38 hat geschrieben:Wie bitter ist das: Vor einer Stunde herausgefunden, wo der Flaschenhals für die 10 Sekundenmarke ist und in der verbliebenen Zeit nicht mehr hinbekommen zu fixen...
wo waren denn die flaschenhälse?
ich bin bei 50sek. geblieben und hatte nicht mehr weiter geguckt, aber das interessiert mich noch^^

core
Mausschubser
Mausschubser
Beiträge: 55
Registriert: 3. Sep 2011 16:29

Re: Laufzeiten Sequentiell & Parallelisiert

Beitrag von core » 16. Jan 2012 03:07

radio_controlled hat geschrieben:
cwb38 hat geschrieben:Wie bitter ist das: Vor einer Stunde herausgefunden, wo der Flaschenhals für die 10 Sekundenmarke ist und in der verbliebenen Zeit nicht mehr hinbekommen zu fixen...
wo waren denn die flaschenhälse?
ich bin bei 50sek. geblieben und hatte nicht mehr weiter geguckt, aber das interessiert mich noch^^
Ebenfalls. :)

Ich war schon bei den 23 Sek. recht neidisch. :)

cwb38
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 125
Registriert: 4. Okt 2010 15:53

Re: Laufzeiten Sequentiell & Parallelisiert

Beitrag von cwb38 » 16. Jan 2012 09:43

Scheinbar braucht man auf dem Cluster extrem viel Zeit um in aosampler.cpp in der Methode "sample" mittels rand() Zufallszahlen zu generieren; hab schnell versucht alternative, schnellere Generatoren dafür einzusetzen (womit man zumindest 11 Sekunden erreicht), allerdings hat wohl was mit den ranges nicht gestimmt, weshalb das Shading des Ergebnisbildes recht anders aussah; eventuell hätte man auch während des Ladens am Anfang schon mit einem seperaten Thread Zufallszahlen vorgenerieren können und in einer Queue zur Verfügung stellen....

Thomas Huxhorn
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 171
Registriert: 6. Okt 2011 15:25

Re: Laufzeiten Sequentiell & Parallelisiert

Beitrag von Thomas Huxhorn » 16. Jan 2012 10:23

cwb38 hat geschrieben: (womit man zumindest 11 Sekunden erreicht)
Mit 24 Thread, 4 sample, 16 AO?? Uff. Welch Zaubertricks hat du denn angewandt.

rand() ist nicht Threadsafe. Darum blockiert das und das Programm ist lahm. rand_r() ist die Alternative.

kbraden
Mausschubser
Mausschubser
Beiträge: 98
Registriert: 15. Okt 2010 20:35

Re: Laufzeiten Sequentiell & Parallelisiert

Beitrag von kbraden » 16. Jan 2012 11:04

Grrr, das hatte ich bei mir ausgeschlossen, weil ich uniform samplen liess. Natuerlich nicht dran gedacht (oder mal nachgeschaut) dass das AO shading auch noch Zufallszahlen braucht :s

Antworten

Zurück zu „Archiv“