Laufzeitunterschiede eines Programmes
-
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: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:
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?
-
Gruum schrieb:
ISoweit ich das beurteilen kann waren die Bedingungen bei beiden Programmaufrufen gleich.
vs
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.
-
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?
-
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