tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
1
ZUGRIFFE
411
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von port29
    port29 port29 ist offline deus.Server
    Registriert seit
    Dec 2001
    Ort
    Karlsruhe, Germany, Germany
    Beiträge
    856
    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.
     

  2. #2
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von port29 Beitrag anzeigen
    Jetzt stellen sich mir zwei Fragen:

    1) Lohnt sich das paralleles Programmieren nicht, wenn ich eine geringe Last in den Threads habe?
    Ja. Der Overhead entsteht hier vor allem auch durch die Funktionsaufrufe. (\edit: siehe http://msdn.microsoft.com/en-us/library/dd560853.aspx)
    Zitat Zitat von port29 Beitrag anzeigen
    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.
    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

  1. Paralleles Abfragen von Web-Services
    Von gtm im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 7
    Letzter Beitrag: 01.09.08, 13:15
  2. OpenGL, paralleles Licht "flackert"
    Von Cecidi im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 03.06.08, 18:29
  3. vb.net 50 % langsamer als c#?
    Von irchel im Forum .NET Café
    Antworten: 3
    Letzter Beitrag: 16.09.06, 20:28
  4. langsamer XP Start
    Von Carndret im Forum Microsoft Windows
    Antworten: 2
    Letzter Beitrag: 17.09.02, 20:53
  5. langsamer ?
    Von murdi im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 28.04.02, 13:33