IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lisp Discussion :

Temps d'execution d'un programme


Sujet :

Lisp

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 141
    Par défaut Temps d'execution d'un programme
    Bonjour,
    Suis pas un expert en common-lisp mais je trouve qu'il est long par rapport aux autres. J'ai trouvé le programme suivant en exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #!/usr/bin/clisp
    (dotimes (x 20)
      (dotimes (y 20)
        (format t "~3d " (* (1+ x) (1+ y))))
      (format t "~%"))
    Je l'execute avec :
    et j'obtiens:
    real 0m0.055s
    user 0m0.032s
    sys 0m0.024s

    Le même programme, réécrit en:

    ocaml :
    real 0m0.025s
    user 0m0.020s
    sys 0m0.004s

    perl:
    real 0m0.011s
    user 0m0.008s
    sys 0m0.004s

    c:
    real 0m0.002s
    user 0m0.000s
    sys 0m0.000s

    J'ai vu dans d'autres discussions que certains programmeurs utilisent lisp pour l'IA. Est-ce que la lenteur de lisp n'est pas un handicap ?
    Ou bien est-ce qu'il y a un moyen de le faire aller plus vite ?

    Merci.

  2. #2
    Membre émérite
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Par défaut
    Clisp est probablement l'implémentation de Common Lisp la plus lente. Va chercher SBCL (qui génère du code natif) et refait ton test.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 141
    Par défaut
    Citation Envoyé par GnuVince Voir le message
    Clisp est probablement l'implémentation de Common Lisp la plus lente. Va chercher SBCL (qui génère du code natif) et refait ton test.
    Merci pour ta réponse.
    J'ai installé sbcl (un petit coup de apt-get install sbcl)

    mais avec :
    ne fait que démarrer sbcl ;-)

    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #!/usr/bin/sbcl --userinit
    cela marche mais je ne sors pas de sbcl et donc je ne peux pas utiliser "time"

    Je dois louper quelque chose dans la doc ...
    Comme dit l'Anglais "I am stuck" ....

    D'autre part common-lisp est plus convivial, on peut remonter sur les expressions précédentes, pas avec sbcl si on s'est planté il faut tout réécrire.

  4. #4
    Membre émérite
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Par défaut
    Citation Envoyé par rutabagas Voir le message
    Merci pour ta réponse.
    J'ai installé sbcl (un petit coup de apt-get install sbcl)

    mais avec :
    ne fait que démarrer sbcl ;-)

    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #!/usr/bin/sbcl --userinit
    cela marche mais je ne sors pas de sbcl et donc je ne peux pas utiliser "time"

    Je dois louper quelque chose dans la doc ...
    Comme dit l'Anglais "I am stuck" ....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    $ cat > hello.lisp
    (format t "Hello world~%")
    (quit)
    ^D
    $ sbcl --noinform --eval '(progn (compile-file "hello.lisp") (quit))'
    ; compiling file "/home/vfoley/prog/lisp/hello.lisp" (written 21 DEC 2007 02:46:28 PM):
    ; compiling (FORMAT T ...)
    ; compiling (QUIT)
     
    ; /home/vfoley/prog/lisp/hello.fasl written
    ; compilation finished in 0:00:00
    $ sbcl --noinform --load hello.fasl
    Hello world
    $
    D'autre part common-lisp est plus convivial, on peut remonter sur les expressions précédentes, pas avec sbcl si on s'est planté il faut tout réécrire.
    La plupart du monde qui font du Lisp utilisent Emacs avec SLIME qui donne un accès direct au REPL et tu peux utiliser le clavier pour rappeler des commandes.

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Par défaut
    Citation Envoyé par rutabagas Voir le message
    [...]
    J'ai vu dans d'autres discussions que certains programmeurs utilisent lisp pour l'IA. Est-ce que la lenteur de lisp n'est pas un handicap ?
    Pour répondre spécifiquement à ceci, la réponse est oui. C'est un handicap. Et plusieurs travaux modernes se tournent vers d'autres langages, dont le C. Il faut alors revoir les techniques et obtenir d'autres algorithmes se qui se fait par des recherches universitaires de haut-niveau.

  6. #6
    Membre émérite
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Par défaut
    Voici une différence de performance entre SBCL et Clisp.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    * (time (loop for i from 1 to 100000 count (is-prime i)))
     
    Evaluation took:
      1.325 seconds of real time
      1.31 seconds of user run time
      0.0 seconds of system run time
      [Run times include 0.04 seconds GC run time.]
      0 page faults and
      122,059,280 bytes consed.
    9592
     
     
    [3]> (time (loop for i from 1 to 100000 count (is-prime i)))
    Real time: 13.130319 sec.
    Run time: 13.13 sec.
    Space: 328130352 Bytes
    GC: 486, GC time: 4.68 sec.
    9592
    Et le programme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    (defun range (start stop)
      (loop for i from start to stop collect i))
     
    (defun any (proc lst)
      (reduce #'(lambda (x y)
                  (or x (funcall proc y)))
              lst
              :initial-value nil))
     
    (defun is-prime (n)
      (let ((first-primes (list 2 3 5 7 11 13 17 19 23 29 31 37
                                41 43 47 53 59 61 67 71 73 79 83
                                89 97)))
        (cond ((member n first-primes) t)
              ((< n 2) nil)
              ((= 0 (mod n 2)) nil)
              ((any #'(lambda (x) (= 0 (rem n x))) (range 2 (sqrt n))) nil)
              (t (not (any #'(lambda (x) (= 0 (rem n x)))
                           (range 2 (sqrt n))))))))

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 141
    Par défaut
    Citation Envoyé par GnuVince Voir le message
    Voici une différence de performance entre SBCL et Clisp.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    * (time (loop for i from 1 to 100000 count (is-prime i)))
     
    Evaluation took:
      1.325 seconds of real time
      1.31 seconds of user run time
      0.0 seconds of system run time
      [Run times include 0.04 seconds GC run time.]
      0 page faults and
      122,059,280 bytes consed.
    9592
     
     
    [3]> (time (loop for i from 1 to 100000 count (is-prime i)))
    Real time: 13.130319 sec.
    Run time: 13.13 sec.
    Space: 328130352 Bytes
    GC: 486, GC time: 4.68 sec.
    9592
    Merci de ces exemples.
    Pour le premier je n'ai pas la fonction is-prime mais en mettant simplement
    count i à la place cela donne une grande différence.
    Mais je me suis fais un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (time (loop for i below 100000 count (print i)))
    et avec sbcl cela donne:
    Evaluation took:
    3.139 seconds of real time
    0.196013 seconds of user run time
    0.084006 seconds of system run time
    [Run times include 0.032 seconds GC run time.]
    0 calls to %EVAL
    0 page faults and
    191,992,112 bytes consed.
    100000

    et avec clisp:
    Real time: 3.49644 sec.
    Run time: 3.072192 sec.
    Space: 95209624 Bytes
    GC: 72, GC time: 0.424025 sec.
    100000

    Pour le Real time il n'y a pas beaucoup d'écart, et pour l'exemple que j'ai donné au debut, avec le fichier "monprog.fasl" l'execution est plus longue
    avec sbcl que l'execution de "monprog.cl avec clisp.

    Merci de m'avoir fait découvrir sbcl.
    Merci aussi Garulfo pour cette précision.

  8. #8
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Par défaut
    Est-ce ?

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 141
    Par défaut
    Citation Envoyé par Garulfo Voir le message
    Est-ce ?
    Ben d'après ta réponse précédente ce n'est pas nous sur le forum qui feront aller plus vite clisp ou sbcl mais ceci dit j'ai résolu le problème pour pouvoir remonter sur les expressions avec sbcl: j'ai installé le package "rlwrap".

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 27/07/2007, 18h38
  2. Temps D'execution D'un Programme
    Par hamska2 dans le forum C
    Réponses: 14
    Dernier message: 09/05/2007, 18h14
  3. temps d'execution d'un programme multithread
    Par La taupe dans le forum C
    Réponses: 2
    Dernier message: 10/01/2007, 17h44
  4. Réponses: 5
    Dernier message: 19/06/2006, 22h54
  5. temps d'execution d'un programme
    Par Invité(e) dans le forum C
    Réponses: 8
    Dernier message: 17/05/2006, 13h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo