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

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : janvier 2013
    Messages : 388
    Points : 713
    Points
    713

    Par défaut Comparaison entre Lua et Python

    Bonjour.
    Je commence l'apprentissage de LUA. Pour me faire la main, je traite la question de ce fil.

    Comme je suis à l'aise en PYTHON, j'ai d'abord fait un programme uniq_seq.py :
    Code Python : 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
    21
    22
    23
    24
    25
    26
    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
     
    import sys
     
     
    def keep_seq(filemane):
        with open(filemane, "r") as fobj:
            data = fobj.read().splitlines()
     
        # Trie par ordre alphabétique
        data.sort()
     
        ref = data[0]
        res = [ref]
        for seq in data[1:]:
            if seq.startswith(ref):
                continue
            ref = seq
            res.append(ref)
        return res
     
     
    if __name__ == '__main__':
        filemane = sys.argv[1]
        print("\n".join(keep_seq(filemane)))

    Puis uniq_seq.lua :
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    #!/usr/bin/lua
     
    local function read_file(filemane)
      local arr = {}
      local i = 0
      local file = io.open(filemane, "r")
      if file then
        for line in file:lines() do
          i = i + 1
          arr[i] = line
        end
      end
      io.close(file)
      return arr
    end
     
     
    local filemane = arg[1]
    local data = read_file(filemane)
     
    -- Trie par ordre alphabétique
    table.sort(data)
     
    local ref = data[1]
    local res = {ref}
    local i = 1
    for _, seq in ipairs(data) do
      local pattern = string.format("^%s", ref)
      _, n = string.gsub(seq, pattern, "")
      if n == 0 then
        ref = seq
        i = i + 1
        res[i] = ref
      end
    end
     
    print(table.concat(res, "\n"))
    Lorsque je compare :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    time ./uniq_seq.py data/sorted_length_pool_piRNA_embryo_02h_GSM12.txt > benchmark/out_py 
    
    real	0m4.191s
    user	0m3.648s
    sys	0m0.504s
    
    time ./uniq_seq.lua data/sorted_length_pool_piRNA_embryo_02h_GSM12.txt > benchmark/out_lua 
    
    real	0m27.840s
    user	0m27.184s
    sys	0m0.576s
    
    diff benchmark/out_py benchmark/out_lua 
    (rien)
    Je suis déçu des performances de mon programme LUA. Une rapide analyse a montré qu'il n'y a pas de "point d'étranglement"; tout est plus lent.
    Qu'est ce que je peux faire pour réduire le temps d'exécution ?

  2. #2
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 3 276
    Points : 11 918
    Points
    11 918
    Billets dans le blog
    5

    Par défaut

    Bonjour ! Je ne garantis pas l'utilité de ma réponse mais en lisant ton code deux choses me sont venues à l'esprit : 1° remplacer l'appel à la fonction format() par une simple concaténation et surtout 2° remplacer gsub() par match() qui (sauf erreur de ma part) suffit à faire la vérification désirée et donne moins de travail à la machine.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for _, seq in ipairs(data) do
      local pattern = "^" .. ref
      if not string.match(seq, pattern) then
        ref = seq
        i = i + 1
        res[i] = ref
      end
    end
    On pourrait même je crois faire l'économie de la variable pattern :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for _, seq in ipairs(data) do
      if not string.match(seq, "^" .. ref) then
        ref = seq
        i = i + 1
        res[i] = ref
      end
    end

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : janvier 2013
    Messages : 388
    Points : 713
    Points
    713

    Par défaut

    C'est bien vu. Mais on est loin de mes attentes. Le programme s'exécute en 23s, contre 4s pour la version PYTHON.

    Je joins la petite analyse que j'ai faite, qui me fait dire que tout est plus lent avec LUA.
    compare_py_lua.pdf

    J'espère que je m'y prends mal, parce qu'autrement je ne pense pas que je vais continuer.

  4. #4
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 3 276
    Points : 11 918
    Points
    11 918
    Billets dans le blog
    5

    Par défaut

    Citation Envoyé par __dardanos__ Voir le message
    J'espère que je m'y prends mal, parce qu'autrement je ne pense pas que je vais continuer.
    Moi qui me réjouissais de voir quelqu'un contribuer au forum Lua !

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2008
    Messages
    23 714
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2008
    Messages : 23 714
    Points : 171 641
    Points
    171 641
    Billets dans le blog
    35

    Par défaut

    Qu'en est t-il d'utiliser LuaJIT ?
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : janvier 2013
    Messages : 388
    Points : 713
    Points
    713

    Par défaut

    Merci LittleWhite.
    Je gagne 8s. Les options d'optimisation ne sont pas activées ni en Lua, ni en Python.
    Mais ça prend toujours plus de temps qu'en Python. Environ 5 fois plus (soit 12s).

    Nom : comparaison_lua_python_2.png
Affichages : 399
Taille : 47,3 Ko

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    mai 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : mai 2017
    Messages : 6
    Points : 8
    Points
    8

    Par défaut

    c'est normal que python soit plus rapide que lua... Mais le fait que ce dernier soit plus rapide ne veut rien dire,lua a à lui aussi des atouts que python n'a pas comme par exemple la taille en terme d'espace sur le disque dur où lua n'a rirn à envier à python ou encore d'autres choses... Chacun d'entre eux a ses défauts et ses qualités et ni python ni lua ne sont les meilleurs langages de code...

Discussions similaires

  1. Comparaison entre deux champs de deux tables différentes
    Par liam81150 dans le forum Requêtes
    Réponses: 1
    Dernier message: 26/09/2005, 20h53
  2. Requete de comparaison entre 2 champs
    Par wallaz dans le forum Access
    Réponses: 2
    Dernier message: 23/09/2005, 19h17
  3. Comparaison entre les classes et les fonctions
    Par Ashgenesis dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 08/09/2005, 19h09
  4. comparaison entre 2 tables
    Par halina dans le forum Requêtes
    Réponses: 10
    Dernier message: 13/05/2005, 15h18
  5. Réponses: 6
    Dernier message: 21/01/2004, 13h25

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