ERLEDIGT
NEIN
NEIN
ANTWORTEN
1
1
ZUGRIFFE
411
411
EMPFEHLEN
-
07.06.10 10:17 #1
Hallo Leute,
ich wollte mal etwas mit der .Net Parallelen Bibliothek herumspielen, doch leider hielt sich mein Erfolg leider in Grenzen. Ich habe jetzt einfach ein mini Programm erstellt, das nichts anderes macht, als hochzuzählen und damit CPU Zeit zu verbrauchen.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
DateTime beginTopDownTime = new DateTime(0); DateTime endTopDownTime = new DateTime(0); Int64 bla = 1; beginTopDownTime = DateTime.Now; for (Int64 i = 1; i < 2000000000; i++) { bla += i; } endTopDownTime = DateTime.Now; TimeSpan topDownTime = (TimeSpan)(endTopDownTime - beginTopDownTime); MessageBox.Show("bla" + bla + " " + topDownTime); bla = 1; beginTopDownTime = DateTime.Now; Parallel.For(0, 2000000000, i => { bla += i; }); endTopDownTime = DateTime.Now; topDownTime = (TimeSpan)(endTopDownTime - beginTopDownTime); MessageBox.Show("bla" + bla + " " + topDownTime);
Nun, bei dem sequentiell laufendem Code bekomme ich bei einer 2-CPU Maschine eine Laufzeit von 10 Sekunden, bei dem Parallel.For Teil sind es rund 25 Sekunden. Ich erkläre es mir eigentlich durch einen höheren Overhead, der zum erstellen und verwalten der Threads notwendig ist.
Jetzt stellen sich mir zwei Fragen:
1) Lohnt sich das paralleles Programmieren nicht, wenn ich eine geringe Last in den Threads habe?
2) Wieso hat der Compiler den Schrott, den ich geschrieben habe, nicht einfach weggeputzt? In der Regel ersetzt er doch so ein Quatsch durch feste Werte.
-
07.06.10 10:27 #2
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Ja. Der Overhead entsteht hier vor allem auch durch die Funktionsaufrufe. (\edit: siehe http://msdn.microsoft.com/en-us/library/dd560853.aspx)
Nur bei simplen Aufgaben (z.B. wenn du bla = i setzt, dann kann der Compiler optimieren und gleich bla auf 2000000000 setzen und die Schleife entfernen). Sonst würde jedesmal Kompilieren 10 Sekunden dauern...
Benutze doch einfach zur Zeitmessung eine Stopwatch.
Und hast du mal die Ergebnisse verglichen ob auch das Gleiche herauskommt? Du greifst ja da von mehreren Threads auf eine Variable zu...
GrußGeändert von deepthroat (07.06.10 um 11:19 Uhr)
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
Ähnliche Themen
-
Paralleles Abfragen von Web-Services
Von gtm im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 7Letzter Beitrag: 01.09.08, 13:15 -
OpenGL, paralleles Licht "flackert"
Von Cecidi im Forum C/C++Antworten: 1Letzter Beitrag: 03.06.08, 18:29 -
vb.net 50 % langsamer als c#?
Von irchel im Forum .NET CaféAntworten: 3Letzter Beitrag: 16.09.06, 20:28 -
langsamer XP Start
Von Carndret im Forum Microsoft WindowsAntworten: 2Letzter Beitrag: 17.09.02, 20:53 -
langsamer ?
Von murdi im Forum Relationale DatenbanksystemeAntworten: 1Letzter Beitrag: 28.04.02, 13:33





Zitieren
Login





