Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
C++ Forum :: Rund um die Programmierung ::  Laufzeitunterschiede eines Programmes     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
Gruum
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.08.2000
Beiträge: 954
Beitrag Gruum Mitglied 16:02:47 12.01.2018   Titel:   Laufzeitunterschiede eines Programmes            Zitieren

Ich hab gerade starke Unterschiede in der Laufzeit eines Programms gemessen. Soweit ich das beurteilen kann waren die Bedingungen bei beiden Programmaufrufen gleich.
Folgendes habe ich gemessen:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
      36281,096582      task-clock (msec)         #    0,417 CPUs utilized          
           573.680      context-switches          #    0,016 M/sec                  
                20      cpu-migrations            #    0,001 K/sec                  
             1.108      page-faults               #    0,031 K/sec                  
    83.665.418.381      cycles                    #    2,306 GHz                      (34,89%)
    58.030.765.178      stalled-cycles-frontend   #   69,36% frontend cycles idle     (38,44%)
    29.051.574.180      stalled-cycles-backend    #   34,72% backend cycles idle      (43,87%)
    21.377.126.682      instructions              #    0,26  insn per cycle        
                                                  #    2,71  stalled cycles per insn  (52,59%)
     1.851.723.096      branches                  #   51,038 M/sec                    (55,66%)
        38.634.107      branch-misses             #    2,09% of all branches          (54,61%)
     7.115.369.559      L1-dcache-loads           #  196,118 M/sec                    (27,88%)
       192.363.330      L1-dcache-load-misses     #    2,70% of all L1-dcache hits    (23,69%)
        81.994.885      LLC-loads                 #    2,260 M/sec                    (20,26%)
        10.754.903      LLC-load-misses           #   13,12% of all LL-cache hits     (25,51%)
 
      86,992727931 seconds time elapsed

und:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
      23909,709295      task-clock (msec)         #    6,933 CPUs utilized          
           583.871      context-switches          #    0,024 M/sec                  
                23      cpu-migrations            #    0,001 K/sec                  
             1.108      page-faults               #    0,046 K/sec                  
    86.227.883.497      cycles                    #    3,606 GHz                      (38,19%)
    58.464.767.356      stalled-cycles-frontend   #   67,80% frontend cycles idle     (37,82%)
    29.589.604.814      stalled-cycles-backend    #   34,32% backend cycles idle      (37,73%)
    22.455.145.015      instructions              #    0,26  insn per cycle        
                                                  #    2,60  stalled cycles per insn  (47,63%)
     1.858.591.606      branches                  #   77,734 M/sec                    (46,99%)
         5.416.352      branch-misses             #    0,29% of all branches          (48,49%)
     7.098.454.126      L1-dcache-loads           #  296,886 M/sec                    (30,00%)
       166.669.209      L1-dcache-load-misses     #    2,35% of all L1-dcache hits    (23,47%)
        48.194.111      LLC-loads                 #    2,016 M/sec                    (22,60%)
            37.446      LLC-load-misses           #    0,08% of all LL-cache hits     (29,61%)
 
       3,448674623 seconds time elapsed

Die gesamte Prozessorauslastung lag während des ersten Programmlaufs bei etwa 14% und während des zweiten bei 94%. Wie kann so was passieren?
rapso
Moderator

Benutzerprofil
Anmeldungsdatum: 17.06.2002
Beiträge: 8770
Beitrag rapso Moderator 16:48:39 12.01.2018   Titel:   Re: Laufzeitunterschiede eines Programmes            Zitieren

Gruum schrieb:
ISoweit ich das beurteilen kann waren die Bedingungen bei beiden Programmaufrufen gleich.

vs
Zitat:
Die gesamte Prozessorauslastung lag während des ersten Programmlaufs bei etwa 14% und während des zweiten bei 94%. Wie kann so was passieren?

entweder falsch/unterschiedliches gemessen, oder die bedingungen waren nicht gleich. mehr moeglichkeit sehe ich nicht, aufgrund der mageren beschreibung.

_________________
follow me|
-Mod im Spiele-/Grafikprogrammierung
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1729
Beitrag Mr X Mitglied 22:49:26 14.01.2018   Titel:              Zitieren

Beim zweiten Mal war das Programm ja auch viel schneller fertig. Denkbar wäre, dass in größerem Umfang Dateien gelesen werden, und die beim zweiten Mal vom OS gecacht waren. Oder, da das Programm multithreaded zu sein scheint, vlt. hat sich da irgendwie die Synchronisation zwischen den Threads verschluckt durch schlampige Programmierung?
SideWinder
Alt-Moderator

Benutzerprofil
Anmeldungsdatum: 19.10.2001
Beiträge: 19243
Beitrag SideWinder Alt-Moderator 18:12:09 15.01.2018   Titel:              Zitieren

Mr X schrieb:
Beim zweiten Mal war das Programm ja auch viel schneller fertig. Denkbar wäre, dass in größerem Umfang Dateien gelesen werden, und die beim zweiten Mal vom OS gecacht waren. Oder, da das Programm multithreaded zu sein scheint, vlt. hat sich da irgendwie die Synchronisation zwischen den Threads verschluckt durch schlampige Programmierung?

Ja, klingt stark danach, dass I/O im ersten Lauf sehr lange gebraucht hat (und dementsprechend die Prozesserauslastung niedrig war, weil nur gewartet wurde).

Always do warm up before performance tests.

MfG SideWinder

_________________
http://www.dilbert.com/2009-06-11/
http://www.dilbert.com/2009-06-14/


Zuletzt bearbeitet von SideWinder am 18:12:26 15.01.2018, insgesamt 1-mal bearbeitet
C++ Forum :: Rund um die Programmierung ::  Laufzeitunterschiede eines Programmes   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.