Faites marcher Python aussi vite que C avec Psyco

Posté par  . Modéré par Pascal Terjan.
Étiquettes :
0
26
nov.
2002
Linux
Un domaine dans lequel les JVMs sont plus avancées que Python est celui de l'optimisation des exécutions de bytecodes. Psyco, un compilateur spécialisé Python, aide à préparer le terrain. Pour le moment Psyco n'est qu'un module externe mais rien ne dit qu'un jour il ne sera pas inclus à Python lui-même. Avec seulement un peu de programmation supplémentaire, Psyco peut souvent s’utiliser pour augmenter la vitesse du code Python à la puissance dix. Cet article examine ce qu'est réellement Psyco et le teste dans quelques applications.

Aller plus loin

  • # Re: Faites marcher Python aussi vite que C avec Psyco

    Posté par  . Évalué à -3.

    A quand un pycoin² optimisé ??
    chrisix< help :-)
  • # Re: Faites marcher Python aussi vite que C avec Psyco

    Posté par  . Évalué à 6.

    Il existe tjrs la version Jpython qui elle beneficie de l'optimisation des JVM ...
    • [^] # Re: Faites marcher Python aussi vite que C avec Psyco

      Posté par  (site web personnel) . Évalué à 3.

      mais qui perd tout son interet, puisqu'il faut une jvm non libre pour le faire tourner
    • [^] # Re: Faites marcher Python aussi vite que C avec Psyco

      Posté par  (site web personnel) . Évalué à 6.

      Aucun intérêt AMHA. Je ne pense pas que le bytecode Jython tourne plus rapidement que le code Python "normal". Dans le cas de Jython, tu vas avoir - sauf grave erreur de ma part - du bytecode Jython interprété par la JVM Java. Donc ça fait 2 VMs en jeu, mais la VM Java ne se substitue pas à la VM Python. Tout au plus, lors de l'implémentation de Jython les développeurs ont pu exploiter astucieusement des fonctionnalités de la VM Java.

      L'article parle entre autres d'optimiser les routines de type "petite boucle répétitive", qui manipule des entiers et des flottants. Ce n'est pas un "optimisateur" magique générique qui transforme tout code en code qui va 10X plus vite. Simplement ça permet d'optimiser les petits bouts de code simples qui sont en général une plaie - en terme de perf - dans tous les langages de script. Typiquement, il est assez balaise de faire plus rapide (indépendemment de l'algo) en script l'équivalent du code C:

      for (i=0;i<n;++i) {
      sigma+=sigma*i;
      }

      Sinon l'article est pas mal et présente (je trouve) une bonne approche de la notion d'optimisation en général.
      • [^] # Re: Faites marcher Python aussi vite que C avec Psyco

        Posté par  (site web personnel) . Évalué à 1.

        > Je ne pense pas que le bytecode Jython tourne plus rapidement que le code Python "normal".

        Si si... c'est 1 peu + rapide (par ex. en calcul pur).

        En effet, Python "traditionnel" fonctionne en interpréteur, alors que avec Jython + JVM + JIT, le code Python termine en code natif -- donc + rapide.

        Par contre Python est assez léger, alors que Java l'est beaucoup moins, et Jython est encore une couche par dessus => ce que tu aurais pu gagner tu le reperd en mémoire et en temps de démarrage...
        • [^] # Re: Faites marcher Python aussi vite que C avec Psyco

          Posté par  (site web personnel) . Évalué à 1.

          En effet, le Python "traditionnel" fonctionne en interpréteur. Ceci dit il y a toujours le bytecode itermédiaire (.pyc) et il est possible de créer un binaire "natif" à partir de scripts Python.
          http://mail.python.org/pipermail/i18n-sig/2000-July/000348.html(...)

          Et il me semble que ce dont tu me parles (Jython + JVM + JIT) revient à peu près au même. A savoir: tu obtiens une série de classes qui contiennent l'interpréteur + le bytecode déjà compilé, mais - comme dans le cas du Python "natif" - ce n'est pas une compilation au sens traditionnel du terme...
          http://www.geocrawler.com/archives/3/7017/2001/6/0/5991844/(...)

          De ce que j'en sais, Jython est réellement une transposition de Python vers le monde Java. Un des grands avantages étant que tu as facilement accès aux bibliothèques Java, de même qu'avec le Python normal on s'interface assez bien avec les bibliothèques C. Mais je ne pense pas qu'il y ait de grandes différences au niveau des concepts d'interprétation, de bytecode, de compilation, etc. Fondamentalement, Python et Jython c'est la même chose.

          Il me paraîtrait étrange que Jython ait des extensions aussi intéressantes qu'un compilateur en bytecode Java - qui n'embarque pas l'interpréteur de bytecode Jython - sans que les responsables du projet Python n'aient pensé faire la même chose pour du code binaire natif. Si c'est possible en Java c'est possible en C. Enfin tout le monde peut se tromper 8-)
  • # Re: Faites marcher Python aussi vite que C avec Psyco

    Posté par  . Évalué à 1.

    De toute facon, je n'aime pas trop Python a cause de l'indentation . Il suffit de faire un copier-coller pour bousiller un programme et perdre une heure a comprendre pourquoi ca ne marche plus .
    C'est dommage parceque sinon c'est pas mal au niveau clarté , fonctionnalités , lib disponibles ,...
    • [^] # Re: Faites marcher Python aussi vite que C avec Psyco

      Posté par  . Évalué à 3.

      Il suffit de faire un copier-coller pour bousiller un programme et perdre une heure a comprendre pourquoi ca ne marche plus .

      Non, mais par contre, il faut respecter une grande rigueur dans l'indentation : ne pas alterner les tabulations ( mais de toutes façons, les tabulations en règle générale, ce n'est pas conseillé), et les espaces et garder toujours à l'esprit le nombre d'espace qu'on utilise et le respecter. Sinon Python se mélange les pinceaux.
      Mais c'est vrai que c'est pénible ;(
    • [^] # Re: Faites marcher Python aussi vite que C avec Psyco

      Posté par  . Évalué à 1.

      Justement ce que j'aime dans python c'est que tout le monde a la meme presentation des programmes. C'est beaucoup plus lisible.
    • [^] # Re: Faites marcher Python aussi vite que C avec Psyco

      Posté par  (site web personnel) . Évalué à 1.

      marrant, de mon point de vue, c'est LE point fort de Python
      • [^] # Re: Faites marcher Python aussi vite que C avec Psyco

        Posté par  . Évalué à 2.

        Tu ne connais pas Emacs ou indent ?
        Pour C, C++, Java et les autres, il suffit de suivre une convention et tout va bien.

        Par exemple pour C, la convention K&R semble toute indiquée, et pour Java, ca tombe bien, le langage a une convention propre.

        Comme ca, si quelqu'un pisse du code de travers, un p'tit coup de moulinette et ca devient tout propre :)

        BeOS le faisait il y a 20 ans !

    • [^] # Re: Faites marcher Python aussi vite que C avec Psyco

      Posté par  . Évalué à 1.

      Note que ça peut être un avantage: le copier/coller en programmation, c'est *mal* !!

      Tu risque de devoir faire la meme modification/correction 20 fois, si tu fais 20 copier/coller..


      Ceci dit au moins avec Python, tu es sur que le code est toujours indenté: c'est un language lecteur-friendly pas écrivain-friendly.

      Mais comme en maitenance de code, on passe plus de temps a relire du code qu'a en ecrire, c'est aussi du bénéfice pour le développeur.

      Un truc qui m'ennuie fortement c'est que ce sont les espaces qui sont conseillés pour indenter le code.
      Grrr, cela fait 10 ans que j'indente mon code religieusement avec des tabulations de 4 blanc et maitenant pour Python il faut changer, c'est con mais je n'aime pas du tout ça..
      • [^] # Re: Faites marcher Python aussi vite que C avec Psyco

        Posté par  . Évalué à 1.

        Tu risque de devoir faire la meme modification/correction 20 fois, si tu fais 20 copier/coller..

        Bah non, y a le search and replace et les regexps :-)

        Grrrruuuuuiiiiiikkkk

        L'est où la boite [-1] (parce que je vaux bien ?)
      • [^] # Re: Faites marcher Python aussi vite que C avec Psyco

        Posté par  . Évalué à 1.

        le copier/coller en programmation, c'est *mal* !!

        je me demande de plus en plus si tu n'as pas raison, j'ai eu énormément de conneries ces derniers temps à cause de ça.
    • [^] # Re: Faites marcher Python aussi vite que C avec Psyco

      Posté par  . Évalué à 2.

      tiens j'ai fait du makefile tout-à-l'heure, c'est la même merde :-)
  • # Re: Faites marcher Python aussi vite que C avec Psyco

    Posté par  . Évalué à 3.

    De toute maniere comme pour perl et autres langages de script on peut toujour utiliser SWIG pour lier avec du C ... comme ca les parties qui ont vraiment besoin d'etre optimisé sont en C par exemple ....
  • # Re: Faites marcher Python aussi vite que C avec Psyco

    Posté par  (site web personnel) . Évalué à 1.

    Super parce que j'ai commencé un jeu en 3D dans ce langage... même s'il y a une partie du moteur de 3D en C, la majorité reste en Python.
  • # Re: Faites marcher Python aussi vite que C avec Psyco

    Posté par  . Évalué à 1.

    Python est un langage non typé, psyco est obligé de faire des tests en dynamique sur le type des variables avant d'utiliser une function déjà compilée ou d'en générer une nouvelle à partir des sources. Il y a encore, je pense, du travail avant d'atteindre la vitesse du C.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.