Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]6293[/thread]

Ungewöhnliches Benchmarkergebnis



<< |< 1 2 3 >| >> 22 Einträge, 3 Seiten
ppm1
 2004-05-27 00:23
#82776 #82776
User since
2003-09-14
142 Artikel
BenutzerIn
[default_avatar]
Hallo

Ich habe mal folgenden Benchmarktest laufen lassen:


Code: (dl )
1
2
3
4
5
6
7
8
timethese(25000000, {
A => sub {use vars qw(@meine);},
B => sub {use vars qw($bilder $dbh $cgi $sth $statement $lnr $outtext);},
C => sub {use vars qw(%meine);},
D => sub {our @meine;},
E => sub {our ($bilder,$dbh,$cgi,$sth,$statement,$lnr,$outtext);},
F => sub {our %meine;}
});


Benchmark: timing 2500000 iterations of A, B, C, D, E, F...
        A:  0 wallclock secs ( 0.05 usr +  0.00 sys =  0.05 CPU) @ 50000000.00/s (n=2500000)
           (warning: too few iterations for a reliable count)
        B:  0 wallclock secs ( 0.44 usr +  0.00 sys =  0.44 CPU) @ 5681818.18/s (n=2500000)
        C:  0 wallclock secs ( 0.10 usr +  0.00 sys =  0.10 CPU) @ 25000000.00/s (n=2500000)
           (warning: too few iterations for a reliable count)
        D:  0 wallclock secs ( 1.54 usr +  0.00 sys =  1.54 CPU) @ 1623376.62/s (n=2500000)
        E:  1 wallclock secs ( 2.10 usr +  0.00 sys =  2.10 CPU) @ 1190476.19/s (n=2500000)
        F:  1 wallclock secs ( 0.72 usr +  0.00 sys =  0.72 CPU) @ 3472222.22/s (n=2500000)


PC: Celeron 400MHZ
256 MB Ram
Zum Zeitpunkt des Ausführens: Recht stark belastet... (naja)
Perl 5.6


Das ERgbnis ist schon Verwunderlich:
use vars viel schneller als our
Aber auch @meine bzw. %meine schneller als als einzelne Variablen.


Kann einer von euch nochmal das laufen lassen und mir dann Infos dazu geben, wie dass so kommt?
Ich finde das Ergebnis verwunderlich.
kabel
 2004-05-27 01:08
#82777 #82777
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
welchen sinn soll das haben?
die unterschiede sind dermaßen gering, dass du davon nichts merken wirst ...
-- stefan
esskar
 2004-05-27 01:52
#82778 #82778
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
warum soll es anders sein?
was hat ein leeres array oder ein leerer hash für einen unterschied zu einem leeren string? vorallem in perl! siehe perl-interna!
Gast Gast
 2004-05-27 10:11
#82779 #82779
Naja. Ich sehe da schon nen großen Unterschied zwischen use Vars und our.

z.B. beim array: 0.05 zu 1.54 das heißt ein Untershcied von mehr als das 30ig Fache.

Wie kommt das?
esskar
 2004-05-27 15:38
#82780 #82780
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
könnte daran liegen, das use aufrufe beim nur 1 mal pro script ausgeführt werden; our jedoch jedesmal!
kabel
 2004-05-27 20:10
#82781 #82781
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
das wird ja nur 25 millionen mal ausgeführt.
so und nun teile mal 30 durch 25 millionen.

perfomance wird woanders verschenkt 8)
-- stefan
Ishka
 2004-05-27 21:20
#82782 #82782
User since
2003-08-04
771 Artikel
HausmeisterIn
[Homepage] [default_avatar]
du solltest deinen Computer beim Benchmarken nicht durch andere Sachen im Hintergrund auslasten. Benchmark merkt nicht, ob jetzt der eigene Prozess so langsam ist, oder ob der eigene Prozess so wenig Resourcen bekommen hat.
sub z{if(@_){1while$x[$k=rand 10];t($t=$x[$k]=1)}print map"$z[$x[$_]]$_".($_%3?
"":"\n"),1..9}sub t{$j=0;$x[$_+1]==$t&&($j+=2**$_)for 0..8;z,die"Gewinner $z[$t]
"if grep$_==($j&$_),7,56,73,84,146,273,292,448;z,die"Gleichstand\n"if@x>9&&!grep
!$_,@x}@x=4;@z=qw{. [ (};z$^T&1;while(<>){next if$_>9||$x[$_];t$t=$x[$_]=2;z 1}
esskar
 2004-05-28 05:44
#82783 #82783
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=kabel,27.05.2004, 18:10]perfomance wird woanders verschenkt 8)[/quote]
tja... ich versteh viele PALs auch nicht...
auch wenn ich mich noch so anstrenge! :p
ppm1
 2004-05-28 16:46
#82784 #82784
User since
2003-09-14
142 Artikel
BenutzerIn
[default_avatar]
Es geht mir hier jetzt nicht wirklich um permformance gewinn oder so was.

Sondern nur, weil hier in 2 Themen darüber geredet wurde, dass our schneller sei als use vars .... aber dem scheint nicht so zu sein.


Auserdem:
Hashes in our sind doppelt so schnell wie Arrays....
Ich find das Merkwürdig.


Und deshalb wollt ich wissen wie die beiden dinge so zustande kommen.
sri
 2004-05-28 18:54
#82785 #82785
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hier werden mal wieder Äpfel mit Orangen verglichen.

1. our() und use vars () ist nicht das selbe! our ist lexical scoped, use vars package scoped.

2. Wie bereits von esskar erwähnt wird use vars nur einmal zur compile time ausgeführt.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
sri@odyssey:~$ perl -MO=Deparse test.pl
use Benchmark;
use vars ('@meine');
use vars ('$bilder', '$dbh', '$cgi', '$sth', '$statement', '$lnr', '$outtext');
use vars ('%meine');
timethese(25000000, {'A', sub {

}
, 'B', sub {

}
, 'C', sub {

}
, 'D', sub {
our @meine;
}
, 'E', sub {
our($bilder, $dbh, $cgi, $sth, $statement, $lnr, $outtext);
}
, 'F', sub {
our %meine;
}
});
test.pl syntax OK


Ergo: Dieser Thread ist unsinn. ;)
<< |< 1 2 3 >| >> 22 Einträge, 3 Seiten



View all threads created 2004-05-27 00:23.