Performance-Unterschiede C++ vs Python und C vs Python



  • Daß C++ und C performanter als Python, dürfte klar sein.

    Aber wie groß sind die Unterschiede.
    Gibt es da Erfahrungswerte?


  • Mod

    Python gegen die compilierten Sprachen: Ungefähr Faktor 50. Kann auch 10 sein, kann auch 100 sein, kommt eben stark drauf an, was man genau macht. Aber nun hast du eine ungefähre Vorstellung von der Größenordnung des Unterschieds für ein "normales" Programm.

    Ein gesonderter Vergleich C vs. Python und C++ gegen Python macht nicht viel Sinn, da C und C++ sich nicht viel tun. Sofern man es nicht absichtlich drauf anlegt ein Programm zu schreiben, dass die kleinen Unterschiede möglichst stark hervorhebt. Genau so könnte man sicherlich mit Absicht gezielt ein Programm schreiben, dass in Python genau so schnell ist wie in C oder in C++* (aber man wird es kaum schaffen, dass es schneller wird) oder eines, das eine Million mal langsamer ist.

    *: Irgendwas, wo die Geschwindigkeit maßgeblich durch das Warten auf Systemcalls (teure IO-Operationen) beschränkt ist, liegt nahe.



  • SeppJ schrieb:

    Genau so könnte man sicherlich mit Absicht gezielt ein Programm schreiben, dass in Python genau so schnell ist wie in C oder in C++* (aber man wird es kaum schaffen, dass es schneller wird)

    Nach meinen repräsentativen Messungen ist die Programmiersprache Python prinzipiell immer Faktor 500 schneller als C++.

    #include <cstdio>
    #include <unordered_set>
    
    int main()
    {
      const int n = 60000;
      const unsigned long long x = 1912233391;
      std::unordered_set<unsigned long long> data;
      for (int i=0; i<n; ++i)
        data.insert(i*x);
      printf("numbers inserted: %zu\n", data.size());
    }
    
    N = 60000
    X = 1912233391
    data = {i*X for i in range(N)}
    print("numbers inserted: {0}".format(len(data)))
    

    Python: 0.02s user 0.00s system 90% cpu 0.026 total
    C++: 12.78s user 0.00s system 99% cpu 12.797 total

    (Funktioniert vermutlich nur mit GCC/Clang weil diese die GNU libstdc++ verwenden)



  • representativebenchmarker schrieb:

    Gutes Benchmark.
    Ich würde ein wenig Performanceloss opfern und 62233 nehmen, die stupst einen nicht sofort auf die Wirkungsweise.





  • Man muss dazu aber sagen, dass in Python viel mit Libs(PyGame, PyNum, OpenCV2 usw) gearbeitet wird, die selbst in C oder C++ geschrieben sind. Daher ist oft die reine Python-Geschwindigkeit fast ganz zu vernachlässigen. Dafür ist Code schnell geschrieben und dank dem Interaktiven Interpreter super schnell getestet und debuggt. Ich bin noch nie mit einer Sprache so schnell voran gekommen wie mit Python. Wer wenig Zeit für die Entwicklung hat, für den ist Python wie gemacht.



  • Da muss ich gegen halten.
    Umso groesser das Programm ist, umso schwieriger wird es, alle Fehler zu finden und umso wichtiger, dass das Design wenige Fehler zulaesst. In einer typisierten Sprache wie C++ findet man Typfehler und Schreibfehler in Variablennamen schon durch den Compiler und hat dadurch zwei Fehlerquellen weniger.



  • Schlangenbeschwörer schrieb:

    Dafür ist Code schnell geschrieben

    Ja, da kann man ganz schnell ganz viele Bugs einbauen, die man dann ganz schwer wieder findet.


Anmelden zum Antworten