C / Perl Performance

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
zorn
Beiträge: 697
Registriert: 19.08.2003 00:42:10
Wohnort: Berlin
Kontaktdaten:

C / Perl Performance

Beitrag von zorn » 12.12.2004 18:25:31

Bin gerade dabei mich in beides ein bischen tiefer einzuarbeiten. Ist die Performance der beiden vergleichbar oder hängt C das lahme Perl extrem ab? Spamassassin gibts ja auch in einer C-Variante aus Performance gründen. Ist der Unterschied wirklich so extrem. Klar - Perl ist im Endeffekt eine Interpretersprache. Gibts ne Art Benchmark dafür? Wie entscheide ich was ich in Perl mache, und wo ich besser C nehme?

thx
--
kallisti!

Benutzeravatar
bollin
Beiträge: 482
Registriert: 01.11.2003 23:31:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von bollin » 12.12.2004 18:37:58

Ich habe schon mal ein Perl-Programm geschrieben, das schneller als sein C++-Equivalent war. Das lag an einer Ineffizienz in der Standardbibliothek. Es kommt also immer auf den Einzelfall an.

Viele Grüße,
Torsten

Benutzeravatar
se8i
Beiträge: 1017
Registriert: 08.11.2002 17:02:20
Wohnort: nähe Karlsruhe
Kontaktdaten:

Beitrag von se8i » 12.12.2004 18:46:54

bollin hat geschrieben:Ich habe schon mal ein Perl-Programm geschrieben, das schneller als sein C++-Equivalent war. Das lag an einer Ineffizienz in der Standardbibliothek. Es kommt also immer auf den Einzelfall an.

Viele Grüße,
Torsten
außerdem ging es um C, nicht um C++ und das ist in Fall Geschwindigkeit ein großer Unterschied.
Ohne Beweise würde ich jetzt mal sagen, daß man in C schneller programmieren kann, aber es gibt sachen, für die Perl sicherlich sinnvoller ist als C.
Jazz is not dead, it just smells funny.

<mawe>
Beiträge: 24
Registriert: 07.09.2004 15:01:41
Wohnort: Purkersdorf

Beitrag von <mawe> » 12.12.2004 18:50:32

Hi!

Für einen groben Überblick kannst Du ja mal hier vorbeischauen. Solche Benchmarks sind allerdings mit Vorsicht zu geniessen :wink:
zorn hat geschrieben: Wie entscheide ich was ich in Perl mache, und wo ich besser C nehme?
Mach's einfach so: Erstmal das ganze Ding in Perl. Wenn's dir zu langsam ist, such die Performance-fressenden Stellen und schreib sie in C um. Oder such ein Modul, das schon in C oder Fortran geschrieben ist. Für Number-Crunching bietet sich z.B. PDL an :wink:

Gruß, <mawe>

Benutzeravatar
bollin
Beiträge: 482
Registriert: 01.11.2003 23:31:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von bollin » 12.12.2004 19:11:15

se8i hat geschrieben: außerdem ging es um C, nicht um C++ und das ist in Fall Geschwindigkeit ein großer Unterschied.
Ohne Beweise würde ich jetzt mal sagen, daß man in C schneller programmieren kann, aber es gibt sachen, für die Perl sicherlich sinnvoller ist als C.
In den allermeisten Fällen wird es zwischen C und C++ keine Geschwindigkeitsunterschiede geben. Und mein Beispiel mit einer Ineffizienz der C++-Standardbibliothek war sicher eine Ausnahme, aber die gibt es eben auch manchmal. Theoretisieren hilft sowieso nicht, du musst dein Problem erst einmal in ein Programm gießen und danach kann man sich die Geschwindigkeit anschauen.

Viele Grüße,
Torsten

Benutzeravatar
zorn
Beiträge: 697
Registriert: 19.08.2003 00:42:10
Wohnort: Berlin
Kontaktdaten:

Beitrag von zorn » 13.12.2004 02:44:55

Macht alles Sinn. Vielen Dank! Da ich in der Lernphase bin war mein Plan sowieso erst mal meine kleinen Projektchen in Perl zu coden um sie dann nach C zu portieren - als kleine Übung. Bin immer noch auf der Suche nach einem CPAN Equivalent für C!
--
kallisti!

Benutzeravatar
bollin
Beiträge: 482
Registriert: 01.11.2003 23:31:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von bollin » 14.12.2004 23:22:40

zorn hat geschrieben:Bin immer noch auf der Suche nach einem CPAN Equivalent für C!
Für C++ gibt es http://www.boost.org/.

Viele Grüße,
Torsten

jengelh
Beiträge: 7
Registriert: 20.12.2004 19:18:49
Wohnort: Göttingen
Kontaktdaten:

Re: C / Perl Performance

Beitrag von jengelh » 24.12.2004 13:53:45

Jaja, Standard C++-Bibliothek sollten man auch nie nutzen -- extremst langsamt: printf vs cout.
zorn hat geschrieben:Bin gerade dabei mich in beides ein bischen tiefer einzuarbeiten. Ist die Performance der beiden vergleichbar oder hängt C das lahme Perl extrem ab?
Faktor 12, wenn wir mal von reinem algorithmischem Code ausgehen (Plus, Minus, usw.), also keine Standardbibliotheksfunktionen, oder Dinge, die oft in den Kernelspace wechseln. (SETI als Paradebeispiel)

Benutzeravatar
bollin
Beiträge: 482
Registriert: 01.11.2003 23:31:33
Wohnort: Berlin
Kontaktdaten:

Re: C / Perl Performance

Beitrag von bollin » 24.12.2004 17:02:55

jengelh hat geschrieben:Jaja, Standard C++-Bibliothek sollten man auch nie nutzen -- extremst langsamt: printf vs cout.
Den C++-Code möchte ich erst noch sehen, der langsamer ist als equivalenter C-Code.
jengelh hat geschrieben: Faktor 12, wenn wir mal von reinem algorithmischem Code ausgehen (Plus, Minus, usw.), also keine Standardbibliotheksfunktionen, oder Dinge, die oft in den Kernelspace wechseln. (SETI als Paradebeispiel)
Mit

Code: Alles auswählen

use Inline;
o.ä. wird man wohl die meisten Geschwindigkeitsprobleme lösen können.

Viele Grüße,
Torsten

jengelh
Beiträge: 7
Registriert: 20.12.2004 19:18:49
Wohnort: Göttingen
Kontaktdaten:

Re: C / Perl Performance

Beitrag von jengelh » 24.12.2004 19:00:27

bollin hat geschrieben:
jengelh hat geschrieben:Jaja, Standard C++-Bibliothek sollten man auch nie nutzen -- extremst langsamst
Den C++-Code möchte ich erst noch sehen, der langsamer ist als equivalenter C-Code.
http://linux01.org:2222/f/slowcout.tbz2 -- einfach mal make'n und staunen.

Benutzeravatar
peschmae
Beiträge: 4844
Registriert: 07.01.2003 12:50:33
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: nirgendwo im irgendwo

Beitrag von peschmae » 24.12.2004 23:13:05

Naja, hält sich jetzt noch so in Grenzen. Was mich mehr verwundert ist
real 0m18.100s
mit std::cout << "print" << std::endl;

versus
real 0m4.167s
mit std::cout << "print\n";

MfG Peschmä
"er hätte nicht in die usa ziehen dürfen - die versauen alles" -- Snoopy

jengelh
Beiträge: 7
Registriert: 20.12.2004 19:18:49
Wohnort: Göttingen
Kontaktdaten:

Beitrag von jengelh » 25.12.2004 12:13:45

peschmae hat geschrieben:Naja, hält sich jetzt noch so in Grenzen.
Dann setz da erstmal 10E7 statt 10E6 ein...
Was mich mehr verwundert ist
real 0m18.100s
mit std::cout << "print" << std::endl;

versus
real 0m4.167s
mit std::cout << "print\n";
Wie ich schon sagte... libstdc++...

Antworten