Schrift
[thread]5544[/thread]

Perl vs ActiveState Perl: Geschwindikeit stark unterschiedlich

Leser: 1


<< |< 1 2 >| >> 15 Einträge, 2 Seiten
galaxy
 2006-04-04 16:29
#47770 #47770
User since
2006-04-03
30 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich habe mir bezogen auf den vorherigen Tread über das Hires Modul auf Empfehlung eines Administrators die ActiveState Perl version heruntergeladen. Da die Version 5.8.8.816 jedes mal nach der Installation Fehler aufwies, habe ich mich für die Version 5.6.1.638 entschieden. Dabei konnte ich nach der gegeben Anleitung problemlos Module installieren und verwenden.
Jedoch weisst die ActiveState Version von Perl einen deutliche Nachteil gegenüber der Perl Version, welche in dem Paket Xampp verwendet wird, auf.

Das folgende Skript habe ich mit beiden Versionen getestet:

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
$pfad_read ="C:\\Perl-Php-Vergleich\\Datei1\\testdatei.txt";
$pfad_write ="C:\\Perl-Php-Vergleich\\Datei2\\perl_writedatei.txt";
print "pfad\n";
#============================== Reads ==========================================

@Lesedatei = ("");               # Array for the Datasets
$i = 0;

open(EINGELESEN, "<$pfad_read") || die "Cant find file to read\n";
while(<EINGELESEN>)              # Runs through the File
{
 $Lesedatei[$i] = $_;           # Saves the File in an Array
 $i++;
}
close(EINGELESEN);
print "lesen\n";
#============================== Change==== =====================================

# this Array saves each line of the Lesedatei Array.
@Datenfelder = ("");

$Arraylaenge = @Lesedatei;

for ($i=0;$i<$Arraylaenge;$i++)
{
@Datenfelder = split(/,/,$Lesedatei[$i]);      # splits a line of the big array
$Zeile = $i+1;
@Datenfelder[0] = "\"Zeile ".$Zeile."\"";      # edit the first element of the "each line Array"
$Lesedatei[$i] = join(',',@Datenfelder);       # stores the edit in the big Array
}
print "bearbeiten\n";
#============================== Write ==========================================

# opens file to write changes
open(SCHREIBEN, ">$pfad_write") || die "Cant find file to write\n";;

foreach $Dateizeile (@Lesedatei)
{
 print SCHREIBEN "$Dateizeile";                # write in file
}

close(SCHREIBEN);
print "schreiben\n";


Die Grösse der Datei, welche ich zum Einlesen verwende, variiert dabei zwischen 2kb, 3mb oder 25mb.
Die Perlversion von Xampp erledigt die vom Skript vorgenommenen Aenderungen sehr zügig. Im Gegensatz dazu ist die Version von Activstate sehr lahm.

Bezogen auf die 3 Mb grosse Datei:
Activestate benötigt ca 7 Sekunden zur Abarbeitung des Skripts.
Das "normale" Perl hingegen höchstens 1 Sekunde.

Die 25 Mb datei wird vom normalen Perl in ca 20 Sekunden abgearbeitet, während Activestate für diese Datei 5 Minuten 30 sek benötigt

Ich unterscheide immerzwischen den Perlversionen, indem ich die Path Variable von Windows entsprechend anpasse.(Entweder C:\perl\bin; oder c:\apachefriends\xampp\perl\bin\; )

Aufgerufen wird das Skript dann immer aus dem entsprechenden Ordner mit: perl Skriptname.pl

Kann mir bei diesem Problem jemand helfen??

Danke für Tipps\n\n

<!--EDIT|galaxy|1144164648-->
renee
 2006-04-04 22:15
#47771 #47771
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das 816er Build von ActiveState solltest Du nicht nehmen, da sind Fehler drin. Aktuell ist das 817er Build...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
galaxy
 2006-04-05 12:30
#47772 #47772
User since
2006-04-03
30 Artikel
BenutzerIn
[default_avatar]
Nur noch so zur Info:

Nachdem ich den 816er Build runtergeladen habe kamen nach den Installation Fehler beim öffnen des ppm. Aus diesem Grunde hatte ich mich für die Version 5.6.1.638 entschieden. Hier funktioniert das einbinden von Modulen einwandfrei. Jedoch ist diese Version die von mir beschriebene sehr langsame Version (Warum auch immer)

Habe nun anschliessend genau in den selben Ordner, in den ich die 638er Version installiert hatte die 816er Version drüber installiert. Daraufhin funzt der ppm der 816er und es die Geschwindigkeit ist auch ok. Versteh ich zwar überhaupt nicht, aber nun funzt es.
Crian
 2006-04-05 14:08
#47773 #47773
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Perl 5.6 und Perl 5.8 solltest du aber nicht mischen =)

Wieso steht bei Dir neben dem Beitrag "Beiträge: 0" ... das ist irgendwie verwirrend!\n\n

<!--EDIT|Crian|1144231826-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
ptk
 2006-04-05 22:46
#47774 #47774
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Es ist gar nicht verwunderlich, dass unterschiedliche Perl-Builds unterschiedlich schnell sind. Man muss nur auf die Unmenge an Konfigurationsparametern schauen, die man beim Bauen von Perl einstellen kann. Zwischen größeren Perl-Versionssprüngen kommt noch hinzu, dass neue Funktionalität Perl langsamer macht bzw. an bestehenden Code Optimierungen durchgeführt wurden.
esskar
 2006-04-06 02:36
#47775 #47775
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=Crian,05.04.2006, 12:08]Wieso steht bei Dir neben dem Beitrag "Beiträge: 0" ... das ist irgendwie verwirrend![/quote]
strange; hab das mal von hand auf 2 justiert. mal sehen, wie es weiter geht\n\n

<!--EDIT|esskar|1144276645-->
esskar
 2006-04-06 02:40
#47776 #47776
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=ptk,05.04.2006, 20:46]Es ist gar nicht verwunderlich, dass unterschiedliche Perl-Builds unterschiedlich schnell sind. Man muss nur auf die Unmenge an Konfigurationsparametern schauen, die man beim Bauen von Perl einstellen kann. Zwischen größeren Perl-Versionssprüngen kommt noch hinzu, dass neue Funktionalität Perl langsamer macht bzw. an bestehenden Code Optimierungen durchgeführt wurden.[/quote]
Karlauer: ja, mit 5.6.1 liefen Endlosschleifen noch wesentlich schneller durch
renee
 2006-04-06 09:52
#47777 #47777
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
@ptk: Gibt es Benchmarks, die zeigen, wie viel das alles ausmacht?
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Strat
 2006-04-06 12:43
#47778 #47778
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
wenn man perl z.B. mit oder ohne thread-unterstuetzung compiliert, macht das schon so mal etwa 10% geschwindigkeitunterschied aus...

Unter Linux compiliere ich mir mein Perl meist selbst, aber eher aus dem grund, dass es dann vom Betriebssystem-Perl unabhaengig ist und nicht vom OS-Update aktualisiert wird. Bei manchem Modulen aendern sich naemlich leider Interfaces (z.B. CPAN:Readonly 1.01/1.03 mit use Readonly \$x => 20; zu use Readonly $x => 20; oder CPAN:Mail::Mailer test/testfile), und so kann ich im Falle einer Neuinstallation eine komplette Perl-Version inkl. Modulen bereitstellen, unter der mein Zeug getestet ist und laeuft.
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
ptk
 2006-04-07 01:16
#47779 #47779
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=renee,06.04.2006, 07:52]@ptk: Gibt es Benchmarks, die zeigen, wie viel das alles ausmacht?[/quote]
Ich kenne kein Dokument, wo so etwas systematisch zusammengetragen wurde. Aber man bekommt solche Dinge mit, wenn man (wie ich früher) bei den perl5-porters mitliest. Einige Sachen sind klar: es macht einen Unterschied, ob man ohne Optimierung kompiliert oder mit -O oder -O2 oder noch höheren Optimierungsstufen. Unter Windows hat man die Wahl zwischen gcc und Visual C. Auch bei gcc hat sich was getan, angeblich soll 3.x besseren Code erzeugen als die Version 2.x.

Dann das Threading, wie Strat schon erwähnt hat, obwohl ich in diesem Zusammenhang eher Zahlen um 5% gehört habe. Beim Threading ist es klar, warum Perl dadurch langsamer wird: jede interne Perl-Funktionen benötigt einen zusätzlichen Parameter, nämlich den Perl-Interpreter. Und das auch, wenn gar keine Threads verwendet werden! Die Verlangsamung tritt ein, wenn Thread-Unterstützung nur einkompiliert ist.

Die Wahl des mallocs kann sich unterschiedlich auf die Geschwindigkeit auswirken. Man hat die Wahl zwischen der Perl-Implementation (-Dusemymalloc) oder der Betriebssystemvariante. Erstere geht meist verschwenderischer mit dem Speicher um und ist dafür schneller. Je nach Betriebssystem wird die eine oder andere Variante standardmäßig genommen, beispielsweise bei Linux ist es die glibc-Variante, bei FreeBSD die perl-Variante.

Ich habe damals meine Perls immer mit 64-Bit-Integer-Unterstützung gebaut (das geht auch auf 32-Bit-Maschinen). Einfach, weil ich es cool fand. Benötigt habe ich es nie. Wer weiß, wieviele Terazyklen ich deswegen unnötig verbraten habe :-)
<< |< 1 2 >| >> 15 Einträge, 2 Seiten



View all threads created 2006-04-04 16:29.