- Offizieller Beitrag
Hi,
ich hab mir eine Testumgebung erstellt, in der ich meine Algorithmen zum Primzahlbattle teste (nicht wundern, wegen der Zeiten: 1,5 GHz).
Dabei ist mir etwas seltsames aufgefallen:
- die Laufzeitabweichungen sind bei einem Skript max. 14%, beim anderen bis zu 25% !!
- führe ich die Skripts in einer Schleife immer abwechselnd aus ist die Abweichung am gerinsten
- wiederholte Ausführung eines Skriptes führt zu den stärksten Abweichungen
Messergebnisse
[01] 6.614 | 7.059 [02] 7.024 | 7.054 [03] 7.264 | 6.960
[04] 7.340 | 6.985 [05] 7.780 | 6.983 [06] 7.293 | 6.973
[07] 7.610 | 7.071 [08] 7.418 | 7.076 [09] 7.599 | 7.083
[10] 7.551 | 6.966
=== Algorithmus 1 ===
Min: 6.614 - vom Mittel: 90%
Max: 7.780 - vom Mittel: 105.86% - vom Min: 117.63%
Mittel: 7.349
=== Algorithmus 2 ===
Min: 6.960 - vom Mittel: 99.13%
Max: 7.083 - vom Mittel: 100.88% - vom Min: 101.77%
Mittel: 7.021
=============== Lauftest nur Algo 1:
[01] 6.742 | 0.000 [02] 7.846 | 0.000 [03] 7.876 | 0.000
[04] 8.108 | 0.000 [05] 8.236 | 0.000 [06] 8.108 | 0.000
[07] 8.256 | 0.000 [08] 8.103 | 0.000 [09] 8.009 | 0.000
[10] 8.385 | 0.000
=== Algorithmus 1 ===
Min: 6.742 - vom Mittel: 84.62%
Max: 8.385 - vom Mittel: 105.25% - vom Min: 124.37%
Mittel: 7.967
=============== Lauftest nur Algo 2:
[01] 0.000 | 7.181 [02] 0.000 | 7.856 [03] 0.000 | 6.849
[04] 0.000 | 6.907 [05] 0.000 | 6.875 [06] 0.000 | 7.150
[07] 0.000 | 6.974 [08] 0.000 | 6.891 [09] 0.000 | 6.927
[10] 0.000 | 6.899
=== Algorithmus 2 ===
Min: 6.849 - vom Mittel: 97.14%
Max: 7.856 - vom Mittel: 111.42% - vom Min: 114.7%
Mittel: 7.051
Alles anzeigen
Testumgebung
#include <Array.au3>
[/autoit] [autoit][/autoit] [autoit]Local $n_Schleife = 10
Local $a_Time1[$n_Schleife]
Local $a_Time2[$n_Schleife]
Local $t, $sMess = ''
For $i = 1 To $n_Schleife
$t = TimerInit()
_GetPrime_1()
$a_Time1[$i -1] = Round(TimerDiff($t)/1000, 3)
$t = TimerInit()
_GetPrime_2()
$a_Time2[$i -1] = Round(TimerDiff($t)/1000, 3)
$sMess &= '[' & StringFormat('%0' & StringLen($n_Schleife) & 'd', $i) & '] ' & StringFormat('%.3f', $a_Time1[$i -1]) & ' | ' & StringFormat('%.3f', $a_Time2[$i -1]) & @TAB
If Mod($i, 3) = 0 Or $i = $n_Schleife Then
ConsoleWrite($sMess & @CRLF)
$sMess = ''
EndIf
Next
Local $av1 = 0, $av2 = 0
For $i = 0 To $n_Schleife -1
$av1 += $a_Time1[$i]
$av2 += $a_Time2[$i]
Next
ConsoleWrite(@CRLF & '=== Algorithmus 1 ===' & @CRLF)
ConsoleWrite('Min: ' & @TAB & StringFormat('%.3f', _ArrayMin($a_Time1, 1)) & @TAB & '- vom Mittel: ' & Round( _ArrayMin($a_Time1, 1)/Round($av1/$n_Schleife, 3)*100, 2) & '%' & @CRLF)
ConsoleWrite('Max: ' & @TAB & StringFormat('%.3f', _ArrayMax($a_Time1, 1)) & @TAB & '- vom Mittel: ' & Round( _ArrayMax($a_Time1, 1)/Round($av1/$n_Schleife, 3)*100, 2) & '%' & @TAB & '- vom Min: ' & Round( _ArrayMax($a_Time1, 1)/_ArrayMin($a_Time1, 1)*100, 2) & '%' & @CRLF)
ConsoleWrite('Mittel: ' & StringFormat('%.3f', Round($av1/$n_Schleife, 3)) & @CRLF & @CRLF)
ConsoleWrite('=== Algorithmus 2 ===' & @CRLF)
ConsoleWrite('Min: ' & @TAB & StringFormat('%.3f', _ArrayMin($a_Time2, 1)) & @TAB & '- vom Mittel: ' & Round( _ArrayMin($a_Time2, 1)/Round($av2/$n_Schleife, 3)*100, 2) & '%' & @CRLF)
ConsoleWrite('Max: ' & @TAB & StringFormat('%.3f', _ArrayMax($a_Time2, 1)) & @TAB & '- vom Mittel: ' & Round( _ArrayMax($a_Time2, 1)/Round($av2/$n_Schleife, 3)*100, 2) & '%' & @TAB & '- vom Min: ' & Round( _ArrayMax($a_Time2, 1)/_ArrayMin($a_Time2, 1)*100, 2) & '%' & @CRLF)
ConsoleWrite('Mittel: ' & StringFormat('%.3f', Round($av2/$n_Schleife, 3)) & @CRLF & @CRLF)
Vielleicht könnt ihr ja mal testen, wie das bei euch aussieht - beliebige Funktionen in die Testumgebung einsetzen und los. Vielleicht ist es ja auch nur bei meinem Schlepptop so. :wacko:
Die verwendeten Funktionen verwenden übrigens ausschließlich lokale Variablen.