Laufzeiten Sequentiell & Parallelisiert

danny
Mausschubser
Mausschubser
Beiträge: 51
Registriert: 17. Okt 2010 22:32

Re: Laufzeiten Sequentiell & Parallelisiert

Beitrag von danny » 5. Jan 2012 23:22

Bei mir hat das herausnehmen von gleich mehreren Jobs aus der Workqueue schon einen Vorteil gebracht, allerdings nur bis zu ungefähr 10 auf einmal entnommenen Jobs.

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

Re: Laufzeiten Sequentiell & Parallelisiert

Beitrag von core » 6. Jan 2012 09:04

bttf hat geschrieben:
Matthias Senker hat geschrieben:Was mich auch etwas verwundert: Ich habe eine Workqueue implementiert, die alle noch abzuarbeitenden Pixel enthält und egal ob die Threads sich 4 Pixel, 16 Pixel oder sogar 512 Pixel zum bearbeiten rausnehmen, die Ausführungszeit beeinflusst das nicht merklich. Die liegt konstant bei etwa 50 Sekunden. Konnte noch jemand so etwas beobachten bei seiner Implementierung???
Dito. :)

Bei einer "Jobsize" von 1 (also 1 Ray/Thread) benötige ich aktuell 1:16 Min.
Bei einer "Jobsize" von 20 sind dies 1:09 Min.
Bei 50: 1:07 Min. ... und bei 50.000 sind es 1:01 Min.

Ich hab' mich dann für #Threads * 50 entschieden, bevor's noch heißt das wäre "zu sequentiell"...

Dennis Albrecht
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 222
Registriert: 4. Okt 2010 18:15

Re: Laufzeiten Sequentiell & Parallelisiert

Beitrag von Dennis Albrecht » 6. Jan 2012 12:57

core hat geschrieben:
bttf hat geschrieben:
Matthias Senker hat geschrieben:Was mich auch etwas verwundert: Ich habe eine Workqueue implementiert, die alle noch abzuarbeitenden Pixel enthält und egal ob die Threads sich 4 Pixel, 16 Pixel oder sogar 512 Pixel zum bearbeiten rausnehmen, die Ausführungszeit beeinflusst das nicht merklich. Die liegt konstant bei etwa 50 Sekunden. Konnte noch jemand so etwas beobachten bei seiner Implementierung???
Dito. :)

Bei einer "Jobsize" von 1 (also 1 Ray/Thread) benötige ich aktuell 1:16 Min.
Bei einer "Jobsize" von 20 sind dies 1:09 Min.
Bei 50: 1:07 Min. ... und bei 50.000 sind es 1:01 Min.

Ich hab' mich dann für #Threads * 50 entschieden, bevor's noch heißt das wäre "zu sequentiell"...
"Zu sequentielle" Verarbeitung würdest du merken, da irgendwann (Jobsize >> 500) die Bearbeitungszeit wieder zunehmen würde (beispielsweise, da von Anfang an nur fünf der gestarteten 10 Threads überhaupt Arbeit zugeteilt bekommen, da halt nur fünf Jobs da sind).

Gruß

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

Re: Laufzeiten Sequentiell & Parallelisiert

Beitrag von core » 6. Jan 2012 16:24

Ich habe ja mindestens 768 * 768 * 4 Rays, maximal 768 * 768 * 4 * (16 + 1).

Bei 24 Threads würde jeder Thread über seine gesamte Laufzeit mindestens 98.304 und maximal 1.671.168 Rays verarbeiten.

So bin ich auf die 50 Tsd. (s.o.) gekommen. Die Annahme stimmt aber, denn ab ca. 200 Tsd. wird es in der Tat wieder langsamer (gerade getestet). Den genauen Grenzwert teste ich jetzt aber nicht aus, ich denke das ist auch extrem implementationsabhängig. (Ich sammle bspw. alle neu generierten Rays [> AO-Shading] und Änderungen am Bild in einer eigenen Queue die ich während der Locking-Phase abarbeite, die sich parallel "neue Arbeit" sucht.)

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

Re: Laufzeiten Sequentiell & Parallelisiert

Beitrag von core » 6. Jan 2012 23:53

x539 hat geschrieben:Mit 24threads:

Code: Alles auswählen

real    0m23.560s
user    6m13.608s
sys     0m21.061s
Also den ersten Flaschenhals habe ich offensichtlich gefunden und vollständig entfernt (es war nicht die RAM-Geschwindigkeit).

Mit einer handvoll hässlicher Zeilen mehr:

Code: Alles auswählen

real    0m13.429s
user    2m10.803s
sys     0m39.154s
Das ist übrigens beides im Wesentlichen die vorgegebene Implementierung. Ganz ohne Assembler.
Ich muss nun doch noch mal fragen. :D

Hast du von den vorgegebenen Dateien (abgesehen der pr4.cpp) auch andere Klassen angepasst?

Legst du bei dem AO Shading die einzelnen gesampleten Rays wie die normalen auch in die allgemeine Workqueue?
(das hab ich btw. schon in der Aufgabenstellung nicht verstanden, warum... - ich verarbeite pro Thread doch sowieso wieder mehr als 16 Rays auf einmal...)

Ich bin zwar nun bei 0.44 Min (bei 24 Threads und einer "Jobsize" von 1.000) - aber mittlerweile hab ich absolut keine Optimierungsansätze mehr...
(innerhalb pr4.cpp - die anderen Dateien habe ich komplett unverändert gelassen!)

Viele Grüße
core

x539
Windoof-User
Windoof-User
Beiträge: 30
Registriert: 24. Nov 2010 15:52

Re: Laufzeiten Sequentiell & Parallelisiert

Beitrag von x539 » 7. Jan 2012 01:35

core hat geschrieben:Hast du von den vorgegebenen Dateien (abgesehen der pr4.cpp) auch andere Klassen angepasst?
Minimal.
Legst du bei dem AO Shading die einzelnen gesampleten Rays wie die normalen auch in die allgemeine Workqueue?
Ich benutze eine pixel-queue.
Ich bin zwar nun bei 0.44 Min (bei 24 Threads und einer "Jobsize" von 1.000) - aber mittlerweile hab ich absolut keine Optimierungsansätze mehr...
(innerhalb pr4.cpp - die anderen Dateien habe ich komplett unverändert gelassen!)
44sec oder 0,44min = 26,4sec ?
bttf hat geschrieben:Unsere Implementierung ist mit 24 Threads höchstens 2 bis 3 Sekunden schneller als mit 10 Threads. Kein Plan woran das liegt ^^
Bei mir gibt es signifikante unterscheide zwischen 12 und 24 threads.
„Reality is that which, when you stop believing in it, doesn't go away.“ Philip K. Dick

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

Re: Laufzeiten Sequentiell & Parallelisiert

Beitrag von core » 7. Jan 2012 02:02

x539 hat geschrieben:44sec oder 0,44min = 26,4sec ?
44 Sekunden. :)

x539 hat geschrieben:
bttf hat geschrieben:Unsere Implementierung ist mit 24 Threads höchstens 2 bis 3 Sekunden schneller als mit 10 Threads. Kein Plan woran das liegt ^^
Bei mir gibt es signifikante unterscheide zwischen 12 und 24 threads.
Das ist bei mir auch so, alles über 12 Threads verändert die Laufzeit nur noch <2 Sekunden.

Benutzeravatar
DB_420
Mausschubser
Mausschubser
Beiträge: 89
Registriert: 24. Nov 2010 15:12

Re: Laufzeiten Sequentiell & Parallelisiert

Beitrag von DB_420 » 11. Jan 2012 00:19

(kann gelöscht werden)
Tutor:
Mathe II Inf (SS12)
Mathe I Inf (WS11/12)

studentabc
Windoof-User
Windoof-User
Beiträge: 25
Registriert: 31. Okt 2011 13:56

Re: Laufzeiten Sequentiell & Parallelisiert

Beitrag von studentabc » 11. Jan 2012 18:51

Also wir kommen von der real-Time auf 50 Sekunden bei 12 Threads und haben folgendes Problem:
Während der Ausführung des Proramms haben wir mit htop die auslastung beobachet. Anfangs arbeiten noch 12 Threads und
aufeinmal fallen ein paar weg und rechnen nicht mehr weiter.
Kann uns da jemand weiterhelfen?

downsampling
Mausschubser
Mausschubser
Beiträge: 95
Registriert: 28. Mär 2011 22:58

Re: Laufzeiten Sequentiell & Parallelisiert

Beitrag von downsampling » 11. Jan 2012 18:59

Bei 10 Threads, 4x SSAA, 16x AO und 2 Rays auf einmal komme ich auf 35 sek.


Bei 10 Threads, 4x SSAA, 16x AO und 4 Rays auf einmal komme ich auf 17 sek.

JohannesRudolph
Windoof-User
Windoof-User
Beiträge: 31
Registriert: 7. Nov 2010 01:42

Re: Laufzeiten Sequentiell & Parallelisiert

Beitrag von JohannesRudolph » 13. Jan 2012 11:27

Das der Speedup bei 12 zu 24 Kernen nicht mehr so gut ausfällt ist zu erwarten, denn die Rechner haben keine "echten" 24 Kerne, sondern 2 x 6 + HT. Dass auch die theoretische Rechenleistung sich dann nicht mehr verdoppelt sollte dann klar sein.

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

Re: Laufzeiten Sequentiell & Parallelisiert

Beitrag von core » 13. Jan 2012 11:28

downsampling hat geschrieben:Bei 10 Threads, 4x SSAA, 16x AO und 2 Rays auf einmal komme ich auf 35 sek.


Bei 10 Threads, 4x SSAA, 16x AO und 4 Rays auf einmal komme ich auf 17 sek.
Anders herum wäre es logischer?

downsampling
Mausschubser
Mausschubser
Beiträge: 95
Registriert: 28. Mär 2011 22:58

Re: Laufzeiten Sequentiell & Parallelisiert

Beitrag von downsampling » 13. Jan 2012 11:39

core hat geschrieben:
downsampling hat geschrieben:Bei 10 Threads, 4x SSAA, 16x AO und 2 Rays auf einmal komme ich auf 35 sek.


Bei 10 Threads, 4x SSAA, 16x AO und 4 Rays auf einmal komme ich auf 17 sek.
Anders herum wäre es logischer?
Ist jetzt eh nichtig. Nachdem ich nen kleinen Helligkeitsbug gefixt habe, sind es jobsizeunabhängig 48 sek bei 10 Threads.

Sollte als noch ganz knapp für den 2.0 Pkt Speedup reichen

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

Re: Laufzeiten Sequentiell & Parallelisiert

Beitrag von bttf » 14. Jan 2012 13:07

Naja, bei 10 Threads brauchst du ja nur einen 5fachen Speedup für die 2 Punkte. Ausgehend von 4m 37s für die seq. Implementierung, muss man 60,2 Sekunden für den 5fachen Speedup erreichen. Das erreichst du mit 48s nicht knapp, sondern dicke :wink:

downsampling
Mausschubser
Mausschubser
Beiträge: 95
Registriert: 28. Mär 2011 22:58

Re: Laufzeiten Sequentiell & Parallelisiert

Beitrag von downsampling » 14. Jan 2012 14:07

bttf hat geschrieben:Naja, bei 10 Threads brauchst du ja nur einen 5fachen Speedup für die 2 Punkte. Ausgehend von 4m 37s für die seq. Implementierung, muss man 60,2 Sekunden für den 5fachen Speedup erreichen. Das erreichst du mit 48s nicht knapp, sondern dicke :wink:

Mhh okay habs mir nicht ausgerechnet, aber hatte von jemanden gehört dass es um 50s (wird wohl die Ladezeit nicht einberechnet haben ) sein sollten. :D

Antworten

Zurück zu „Archiv“