1. #1
    Membre à l'essai Avatar de FryHandiz
    Femme Profil pro
    Étudiant
    Inscrit en
    mars 2016
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mars 2016
    Messages : 26
    Points : 12
    Points
    12

    Par défaut Comment optimiser son script perl

    Bonjour,

    Je suis une débutante en Perl, je me débrouille un peu concernant l'écriture de script, cependant bien souvent j'ai un problème de "temps".
    En effet, je cherche à parser/gérer beaucoup de données et par exemple, je peux voir que mon dernier script est vraiiiiment très très très TRES lent
    Du coup, je souhaitais savoir si vous auriez des conseils à donner ou des choses à éviter lorsque l'on écrit des scripts pour qu'ils soient "optimisés".
    Par exemple, est-ce que passer par des tableaux ralentis ? Si oui, quelle alternative peut-on utiliser ? J'ai pu entendre parler de variable temporaire mais j'ai vraiment du mal avec ça :/ (concernant la compréhension toussa toussa)

    Merci d'avance pour vos conseils !

    EDIT : Je viens de m'intéresser à NYTProf qui n'est pas mal du tout !

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mai 2012
    Messages
    3 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : mai 2012
    Messages : 3 197
    Points : 10 408
    Points
    10 408
    Billets dans le blog
    1

    Par défaut

    Bonjour,

    impossible de répondre en général. Montre nous un de tes scripts trop lents, en précisant les volumes en entrée et en sortie, et en fournissant si possible des données en entrée, et on pourra peut-être t'aider.

    Citation Envoyé par FryHandiz Voir le message

    Par exemple, est-ce que passer par des tableaux ralentis ?
    Dans certains cas oui, dans d'autres non. Impossible de donner une réponse générale à ce genre de question. Parfois il faut utiliser un hachage au lieu d'un tableau, parfois non.
    Citation Envoyé par FryHandiz Voir le message
    J'ai pu entendre parler de variable temporaire mais j'ai vraiment du mal avec ça :/ (concernant la compréhension toussa toussa)
    Aucune idée de ce dont tu veux parler. Tu ne dois pas employer le bon terme.

    Citation Envoyé par FryHandiz Voir le message
    EDIT : Je viens de m'intéresser à NYTProf qui n'est pas mal du tout !
    Excellente idée. Il ne sert à rien de chercher à optimiser les performances d'un programme tant que l'on n'a pas établi où il passe beaucoup de temps. Et NYTProf est le meilleur outil pour ce faire.

  3. #3
    Membre à l'essai Avatar de FryHandiz
    Femme Profil pro
    Étudiant
    Inscrit en
    mars 2016
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mars 2016
    Messages : 26
    Points : 12
    Points
    12

    Par défaut

    Citation Envoyé par Lolo78 Voir le message
    Aucune idée de ce dont tu veux parler. Tu ne dois pas employer le bon terme.
    Oui, je voulais parler de "fichier temporaire". Enfin, je sais pas trop comment appeler ça autrement ah ah. J'avais vu quelque chose à ce sujet ici : https://docstore.mik.ua/orelly/perl4/cook/ch07_12.htm
    Mais finalement j'ai eu quelques soucis pour l'utiliser.

    Citation Envoyé par Lolo78 Voir le message
    Montre nous un de tes scripts trop lents, en précisant les volumes en entrée et en sortie, et en fournissant si possible des données en entrée, et on pourra peut-être t'aider.
    Donc voici un de mes scripts par exemple :
    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
     
    #!/usr/bin/perl
    use strict;
    use warnings 'all';
    use Data::Dumper;
    use Bio::SeqIO;
    use Bio::DB::Fasta;
    use Devel::NYTProf;
     
    my $seqio_obj = Bio::SeqIO->new(-file => "testTESTUSE.fasta", 
                                    -format => 'fasta');
     
    while ( my $seq_obj = $seqio_obj->next_seq ) {
      my $id = $seq_obj-> display_id;
     
      my $length = $seq_obj->length; 
      my $half_length;
      my $modulo = $length % 2; 
     
      if ($modulo == 1){ 
        $half_length = ($length-1)/2; 
      }
      elsif($modulo==0){ 
        $half_length = $length/2; 
      }
     
      my $TIR_de_debut = $seq_obj->subseq(1,$half_length);
      my $TIR_de_fin = $seq_obj->subseq($length+1-$half_length,$length);
      my $rev = $seq_obj->revcom;
      my $TIR_de_fin_rev = $rev->subseq(1,$half_length);
     
      my $script = `perl scripts/perl/sw_algo.pl $TIR_de_debut $TIR_de_fin_rev`;
      print $id,"\n";
      print $script;
    }
    Dans ce script j'appelle un autre script. Je ne sais pas si c'est très pertinent de vous le montrer.
    Mon jeu de données initial fait 3,6G.

    Autrement voici un jeu de données test :

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    >chr1.27840.30250
    TTAACTCTTATTATCAGTGAATTTATCATCATCCCCTATTTTACATAAGGAAATGGGGTTAGAAAgaccaaataacattttttcaacATCAAAACACTAGCTTGAGATCAAGCCCAGACTTGGATCTGTCGTCTGAATTCCaagctttttgttatttattgatatgttttgttgttttcatgcaATAATGC
    AAATCTTAGCCCAAACATTTTGTTAGTAGTACCAACTGTAAGTCACCTTATCTTCATACTTTGTCTTTATGTAAACCTAAATTAGATCTGTTTTTGATACTGAGGGAAAAACAAGGGAATCTAACACTAACCAGCCCGTAGTGTGTGGTCAACACTTTCGTTACTTTAGTATACATCACCCCAATTGTTTG
    TCTTCACCACACACTTTGGAGTTAGGTAGTAGTatctatttttacaaataagaaaacccaGGCACAAAGGGGTTGATTAGCAATTATCTTTTGAAAAGCCTGTAGTTGCTCATCTGAAGAAGTGACGGACCACCTCTTATTTAGTGGACAGACAGTAACTAGTTGAGAAGACAGGGGATTTTGTTGgcgga
    aaaaaaaatttatcaaaagtCGTCTTCTATCAGGGAGTTTTATGAGAAACCCTAGCTCCTCAGTTCCACAGTGGGTAACTGTAATTCATTCTAGGTCTGCGATATTTCCTGCCTATCCATTTTGTTAACTCTTCAATGCATTCCACAAATACCTAAGTATTCTTTAAtaatggtggttttttttttttttt
    gcatctatgaagttttttcaaattctttttaagTGACAAAACTTGTACATGTGTATCGCTCAATATTTCTAGTCGACAGCACTGCTTTCGAGAATGTAAACCGTGCACTCCCAGGAAAATGCAGACACAGCACGCCTCTTTGGGACCGCGGTTTATACTTTCGAAGTGCTCGGAGCCCTTCCTCCAGACCG
    TTCTCCCACACCCCGCTCCAGGGTCTCTCCCGGAGTTACAAGCCTCGCTGTAGGCCCCGGGAACCCAACGCGGTGTCAGAGAAGTGGGGTCCCCTACGAGGGACCAGGAGCTCCGGGCGGGCAGCAGCTGCGGAAGAGCCGCGCGAGGCTTCCCAGAACCCGGCAGGGGCGGGAAGACGCAGGAGTGGGGA
    GGCGGAACCGGGACCCCGCAGAGCCCGGGTCCCTGCGCCCCACAAGCCTTGGCTTCCCTGCTAGGGCCGGGCAAGGCCGGGTGCAGGGCGCGGCTCCAGGGAGGAAGCTCCGGGGCGAGCCCAAGACGCCTCCCGGGCGGTCGGGGCCCAGCGGCGGCGTTCGCAGTGGAGCCGGGCACCGGGCAGCGGCC
    GCGGAACACCAGCTTGGCGCAGGCTTCTCGGTCAGGAACGGTCCCGGGCCTCCCGCccgcctccctccagcccctccgGGTCCCCTACTTCGCCCCGCCAGGCCCCCACGACCCTACTTCCCGCGGCCCCGGACGCCTCCTCACCTGCGAGCCGCCCTCCCGGAAGCTCCCGCCGCCGCTTCCGCTCTGCC
    GGAGCCGCTGGGTCCTAGCCCCGCCGCCCCCAGTCCGCCCGCGCCTCCGGGTCCTAACGCCGCCGCTCGCCCTCCACTGCGCCCTCCCCGAGCGCGGCTCCAGGACCCCGTCGACCCGGAGCGCTGTCCTGTCGGGCCGAGTCGCGGGCCTGGGCACGGAACTCACGCTCACTCCGAGCTCCCGACGTGCA
    CACGGCTCCCATGCGTTGTCTTCCGAGCGTCAGGCCGCCCCTACCCGTGCTTTCTGCTCTGCAGACCCTCTTCCTAGACCTCCGTCCTTTGTCCCATCGCTGCCTTCCCCTCAAGCTCAGGGCCAAGCTGTCCGCCAACCTCGGCTCCTCCGGGCAGCCCTCGCCCGGGGTGCGCCCCGGGGCAGGACCCC
    CAGCCCACGCCCAGGGCccgcccctgccctccagccctaCGCCTTGACCCGCTTTCCTGCGTCTCTCAGCCTACCTGACCTTGTCTTTACCTCTGTGGGCAGCTCCCTTGTGATCTGCTTAGTTCCCACCCCCCTTTAAGAATTCAATAGAGAAGCCAGACGCAAAACTACAGATATCGTATGAGTCCAGT
    TTTGTGAagtgcctagaatagtcaaaattcacagagacagaagcagTGGTCGCCAGGAATGGGGAAGCAAGGCGGAGTTGGGCAGCTCGTGTTCAATGGGTAGAGTTTCAGGCTGGGGTGATGGAAGGGTGCTGGAAATGAGTGGTAGTGATGGCGGCACAACAGTGTGAATCTACTTAATCCCACTGAAC
    TGTATGCTGAAAAATGGTTTAGACGGTGAATTTTAGgttatgtatgttttaccacaatttttaaaaagctagtgaAAAGctggtaaaaagaaagaaaagaggcttttttaaaaagttaa
    >chr1.28537.30250
    TTAACTCTTCAATGCATTCCACAAATACCTAAGTATTCTTTAAtaatggtggtttttttttttttttgcatctatgaagttttttcaaattctttttaagTGACAAAACTTGTACATGTGTATCGCTCAATATTTCTAGTCGACAGCACTGCTTTCGAGAATGTAAACCGTGCACTCCCAGGAAAATGCAG
    ACACAGCACGCCTCTTTGGGACCGCGGTTTATACTTTCGAAGTGCTCGGAGCCCTTCCTCCAGACCGTTCTCCCACACCCCGCTCCAGGGTCTCTCCCGGAGTTACAAGCCTCGCTGTAGGCCCCGGGAACCCAACGCGGTGTCAGAGAAGTGGGGTCCCCTACGAGGGACCAGGAGCTCCGGGCGGGCAG
    CAGCTGCGGAAGAGCCGCGCGAGGCTTCCCAGAACCCGGCAGGGGCGGGAAGACGCAGGAGTGGGGAGGCGGAACCGGGACCCCGCAGAGCCCGGGTCCCTGCGCCCCACAAGCCTTGGCTTCCCTGCTAGGGCCGGGCAAGGCCGGGTGCAGGGCGCGGCTCCAGGGAGGAAGCTCCGGGGCGAGCCCAA
    GACGCCTCCCGGGCGGTCGGGGCCCAGCGGCGGCGTTCGCAGTGGAGCCGGGCACCGGGCAGCGGCCGCGGAACACCAGCTTGGCGCAGGCTTCTCGGTCAGGAACGGTCCCGGGCCTCCCGCccgcctccctccagcccctccgGGTCCCCTACTTCGCCCCGCCAGGCCCCCACGACCCTACTTCCCGC
    GGCCCCGGACGCCTCCTCACCTGCGAGCCGCCCTCCCGGAAGCTCCCGCCGCCGCTTCCGCTCTGCCGGAGCCGCTGGGTCCTAGCCCCGCCGCCCCCAGTCCGCCCGCGCCTCCGGGTCCTAACGCCGCCGCTCGCCCTCCACTGCGCCCTCCCCGAGCGCGGCTCCAGGACCCCGTCGACCCGGAGCGC
    TGTCCTGTCGGGCCGAGTCGCGGGCCTGGGCACGGAACTCACGCTCACTCCGAGCTCCCGACGTGCACACGGCTCCCATGCGTTGTCTTCCGAGCGTCAGGCCGCCCCTACCCGTGCTTTCTGCTCTGCAGACCCTCTTCCTAGACCTCCGTCCTTTGTCCCATCGCTGCCTTCCCCTCAAGCTCAGGGCC
    AAGCTGTCCGCCAACCTCGGCTCCTCCGGGCAGCCCTCGCCCGGGGTGCGCCCCGGGGCAGGACCCCCAGCCCACGCCCAGGGCccgcccctgccctccagccctaCGCCTTGACCCGCTTTCCTGCGTCTCTCAGCCTACCTGACCTTGTCTTTACCTCTGTGGGCAGCTCCCTTGTGATCTGCTTAGTT
    CCCACCCCCCTTTAAGAATTCAATAGAGAAGCCAGACGCAAAACTACAGATATCGTATGAGTCCAGTTTTGTGAagtgcctagaatagtcaaaattcacagagacagaagcagTGGTCGCCAGGAATGGGGAAGCAAGGCGGAGTTGGGCAGCTCGTGTTCAATGGGTAGAGTTTCAGGCTGGGGTGATGG
    AAGGGTGCTGGAAATGAGTGGTAGTGATGGCGGCACAACAGTGTGAATCTACTTAATCCCACTGAACTGTATGCTGAAAAATGGTTTAGACGGTGAATTTTAGgttatgtatgttttaccacaatttttaaaaagctagtgaAAAGctggtaaaaagaaagaaaagaggcttttttaaaaagttaa
    >chr1.33014.33173
    ttaaCATATTTGAAGTGCTTAAAAATGAGGCTTGTGTCCATAGATTAATGAGTGAATACACAAATGGTGATATGGACATACAGTGGAGTATTAGTCATAAAAAGGAAGGCAGAGCTGATCCATGGCACCATGTGACAGAACCTCAAAAGCATTAGgttaa
    >chr1.33014.36740
    ttaaCATATTTGAAGTGCTTAAAAATGAGGCTTGTGTCCATAGATTAATGAGTGAATACACAAATGGTGATATGGACATACAGTGGAGTATTAGTCATAAAAAGGAAGGCAGAGCTGATCCATGGCACCATGTGACAGAACCTCAAAAGCATTAGgttaagtggaagaagccagacacaggtCACCTattg
    tgtaattccatttataggaaatataCAGAATATGTAAATCCGTGGAGAAAGAAAGCCGATTTCCAGGGGCtaaggggaggggagaatgggaagTGGCTGCTTCATGGGTACAAGGTTTCATTTTGagctgatgaaaatgttttggaactacaTAGAGATAGTGTTGGCACAACATGGTGAATGTACTGAAT
    GCCACTGATTGTTCAATTTAAAATGGTCAAACTTATATGAATTtcacctccattaaaaaaaaaaaaaaaggaccagatgtggttgctcacacccataatcccaacactttggaaaaaggtgaaagtttttttttctttttttttttatatacttaagttctagggtacatgtgcataatgtgcaggttggA
    TACATAGATAtgcgtgtgccatgttggtttgctgcacccatcaacttgtcatttacattaggtatttcttctaatgctatccctcccccagccccccacccactgacaggccccagtgtatgatgttctcTGCCCCATGTccaagcgttctcattgttcaattcccacctgtgagtgagaacatgcagtgt
    ttggttttctgtctttgtgatagtttgctcagaatgatggtttccagcttcatccatgtccctgcaaaggacatgaactcatcctttttaatggctgcatagtatcccatggtatatatgtgccacattctcttaatccagtctgtcattgatggacatttgggttggttcaaagtctttgctattgtgaa
    tactgccacaataaacatacatgtgcatgtgtctttatagtagcacgatttataatcctttgggtatataccctaagaCCTGGGacgcatttaaagcagtgtgtaaagagacatttatagcactaaatgcccacaagagaccTCTGCCTGAGAACGTGGGTTTCAGCCTAAGAGTTGTAATATGTGTGCCC
    ATTCACAGGTGCTGCATCAGAGTCCCAGGTGGGAAGAAGGCAAGCATACACAAAAATGGTAAAAGGCAGAAAGGAGCCCAGTCTCGTTCTTTTTAAGAAGTTTTCCTAAGAATCTCCACCCAGCGACTTGCTCTCACATCTTCTTGGCCAGCACTGGACCACACAACTCCTTCTAGATACAGAGGAGTCCT
    AGGATTCTATGAGAAAGAAGGGGAGGGTGGGCAAAGGGCAGCCAGCTGTGCAGCATCTGCTGGAGACACCTAACCCTTGGTGGAGGGGTTGTGGTGCTGGGAGAAGGCTTTCTGGACGGTGTGACAGCAGAGATAAACTTAAAGGCCAAGTAGGAGTTACCCTGGTGAAGCAGGGCAGGGTTACAAGCATT
    CCAGCAACATGAAGCAGCAGGAgtgttttaattaaaagaagGCAGTTGCTGTAACCAACTATAAACAAATAAAGGCTTAAACACaatggaagtttatttctcactaaGGGAACATCCAAATCCATGATACTTTAAGTCAGGGACCCAGGTTCCTCCCATCTATGGTTCTGCCATCACTAATCTGGGTCTTC
    CACAATTGCCGTGCTCCTTGGAGGTGGGAAGAGCAGGCGGAGGACACGTGGGAGGTTTTAGGGACAAGCCTGGAGGCAGCATGCGTCACTCCCATGCAGAGTCCATTGGCCAATGCTGGCTCCGATGGCCACATCTCACTGCAGGGGCAGCTGGGAAATACAGTCTGGCTGTCTACCCAGGAGGAAGAGCA
    GCCAGTTTCTGCTGCTGATGATCAGGAGGTGGAGAAAATGTTCAGTCAGGCAGGGAGTGGGAATAGACAAGACCACAAGCAGCTTGGTGCCTCTGAAAGGGAGAGGGGTGGAGGGGAGACTAGAGAGGTGGGTAGGAATACTGGATTCCACTGACCACGTGCTGGATGTCACGCTTAGCCCTCCTGCTCTG
    TGCCGGGTTAGGCACCTGGTGTTTTACGTACATAATCTCAATTCTGTGAGGGCATCCGACCTGTGGGAAAAGAGCTGTTTGTTTCAAATGCCAGTCCTGCTTCCTAACAAGTGTTTAGAGCTTAATCGTGTTCAAAATACATATACAATGTTTAATACTTACAAGAATTTGGTGGGGAAAATATTACCATC
    TTTCCCTTTTGTGATTGGAGAAAAATGAGGCTTTGAAGGGTTtaagaacttgcccaaggtcggccaggtgcagtggctcatgtctataatcccaacactttgggaggctgaggtgggaggatcgcttgaggccaggagttcaagaccagcctgagcaacatagtgagactttgtctctataaaaaataaat
    aaataaataaaaacaacttgtccaaggtcagacAGGCAGCCTCTTAGTAAGCACACATATCCTCTATATTATACTACCTCTCATGGAGGATCTCCTGTGTTCTACAAATAGTCTGGACTTGAGCCAGAATGTGTTATAATCCTGGGATCACGGCCAGTGGGCTTAGAAGAAGCCATCTCTTTCTCATGCCA
    AGATGAGGCTCCCCCAGATTTGCTCAGACTTACCTATAGTCAGCAGCATCGGGGGTCAGGAAAGACTTCACGAAGCCATAAATGCATCCTTCTCGGGGCAGCACCTGGCTCTCCCAGGTGAGAGAGGACTCCATTTTCACAGGCAGGCGTGGGAGCTTCAGCACCCATCTCTGGGCCCAGAATGACCCACT
    GGAGACCTTACAGCTCTCCTGTCACCCCCAATTCCTGCCCCCTCTGCAGCCTTGGAGGAGAATGGAGCTGAAGGGCCTGCCCTCTGTAGGGTGAGAAAGGGAGGCTAAAGCCTGGTGCCCACTGCCCTGGCTGCTCCGCATTGCAGGAGCTGCGCCCTTCCTTTCCTGGCACAGGGTCCACAGCCCCGAAA
    CCCCGTTGTGTGGGAGCTGGGCACAGGGCAGCAGGACTAATCCTTGGAACAGCTCAGGGAGGATTATCCCAGCCACTGTCAGCAGCGGTGCAGCTGGCTCATTCCCATATAGGGGGAGGCCAGAGCCAGGGGCCTGCCACAAGTTggaaggctggggaaggggaggccAGCAGAGGTGTCCTGGCTGTGGG
    TGGCTCTGAGGGGGCTCTCAGGGGTGGGGCTAAATCTCAGGGGCAGGATTATGTAAATCAAACCAATTCTAGCCACAGAtttaaagtttggaaaaaaaaaaaaacccagcctggcggaaagaatttaaattataaaaacttagAAGTATGGAATGTGAAATCATCCTGTAGGTGCTTATTTAACAACGAAA
    TCATCCCGACACAATGAGCCATATGTGAAAAGTCATCCTTCCCCAACACATCCCCCAACAGGCACTCCTCAAGCCTCTCCCACCCAAGTGCTGGCATCCTCCCTGTCCTGCTTCACCTGAGACACCCCTTGTCTCATTAGACATGCAACTACGGGAGGGGTGACAGGAAGACAAGACACTATTTCCTCAGG
    CCCAGTTTGGTGTGGGGAGAAAGCCTCCTGATCCTGAAAGCAAGAATTTGACCAGAGCAGAAGTAATCAGTATGCAGATTGATTCTGTGGTATGTTAA
    >chr1.42607.43917
    ttaacccatatggaatgcaatggagGAAATCAATGACATATCAGATCTAGAAACTAATCAATTAGCAATCAGGAAGGAGTTGTGGTAGGAAGTCTGTGCTGTTGAATGTACACTAATCAATGATTCCTTAaattattcacaataaaaaaaaagattagaatagtttttttaaaaaaaaagcccagaaactA
    ATCTAAGTTTTGTCTGGTAATAAAGGTATATTTTCAAAAGAGAGGTAAATAGATCCACATACTGTGGAGggaataaaatactttttgaaaaacaaacaacaagttGGATTTTTAGACACATAGAAAttgaatatgtacatttataaatatttttggattgaactatttcaaaattataccataaaataact
    tgtaaaaatgtaggcaaaatgtatataattatggcATGAGGTATGCAACTTTAGGcaaggaagcaaaagcagaaaccatgaaaaaagtctaaattttaccatattgaatttaaattttcaaaaacaaaaataaagacaaagtggGAAAAATATGTATGCTTCATGTGTGACAAGCCACTGATACCTATTAA
    ATATGAAGAATATTATAAATCATATCAATAACCACAACATTCAAGCTGTCAGTTTGAATAGACAATGTAAATGACAAAACTACATACTCAACAAGATAACAGCAAACCAGCTTCGACAGCACGTTAAAGGGGTCATACAACATAATCGAGTAGAATTTATCTCtgagatgcaagaatggttcaaaatatgg
    aaaccaataaatgtgatatgccacactaacagaataaaaaataaaaatcatattatcatctcaatagatgcagaaaaagcattaacAAAAGTAAACATTCTTTCATAATAAGacatcagataaaacaaattaggaatagaaggaatgtaccgcaacacaataaaggccatatataacaagcccacagctaa
    catcataatagTAAAATCATCACACtggtaaaaaaaatgaaagcttttcctctaaggtcAGAAATAATATAAAGGTTCCCACTCTTGCTATTTCTATTCCATATCGTACTAAAAGTCCTAGCCAGGAcaattagacaaaataaaaataaaaacacccaaATTGGAAAGATAGAAGCAAACTTTTCTGTTTA
    CAGAtaacataatcttatatgtagaaaccCCTTAAaacttcagcaaaaaaaaaaaaaaaactacagagctagtaaattcagtgaagttgcagaatacaaaatcaacatacaaaaatcagtagtgtctCTATACACTAATAAGGACTTAACAGAGaaagaagttaa
    >chr1.42607.44061
    ttaacccatatggaatgcaatggagGAAATCAATGACATATCAGATCTAGAAACTAATCAATTAGCAATCAGGAAGGAGTTGTGGTAGGAAGTCTGTGCTGTTGAATGTACACTAATCAATGATTCCTTAaattattcacaataaaaaaaaagattagaatagtttttttaaaaaaaaagcccagaaactA
    ATCTAAGTTTTGTCTGGTAATAAAGGTATATTTTCAAAAGAGAGGTAAATAGATCCACATACTGTGGAGggaataaaatactttttgaaaaacaaacaacaagttGGATTTTTAGACACATAGAAAttgaatatgtacatttataaatatttttggattgaactatttcaaaattataccataaaataact
    tgtaaaaatgtaggcaaaatgtatataattatggcATGAGGTATGCAACTTTAGGcaaggaagcaaaagcagaaaccatgaaaaaagtctaaattttaccatattgaatttaaattttcaaaaacaaaaataaagacaaagtggGAAAAATATGTATGCTTCATGTGTGACAAGCCACTGATACCTATTAA
    ATATGAAGAATATTATAAATCATATCAATAACCACAACATTCAAGCTGTCAGTTTGAATAGACAATGTAAATGACAAAACTACATACTCAACAAGATAACAGCAAACCAGCTTCGACAGCACGTTAAAGGGGTCATACAACATAATCGAGTAGAATTTATCTCtgagatgcaagaatggttcaaaatatgg
    aaaccaataaatgtgatatgccacactaacagaataaaaaataaaaatcatattatcatctcaatagatgcagaaaaagcattaacAAAAGTAAACATTCTTTCATAATAAGacatcagataaaacaaattaggaatagaaggaatgtaccgcaacacaataaaggccatatataacaagcccacagctaa
    catcataatagTAAAATCATCACACtggtaaaaaaaatgaaagcttttcctctaaggtcAGAAATAATATAAAGGTTCCCACTCTTGCTATTTCTATTCCATATCGTACTAAAAGTCCTAGCCAGGAcaattagacaaaataaaaataaaaacacccaaATTGGAAAGATAGAAGCAAACTTTTCTGTTTA
    CAGAtaacataatcttatatgtagaaaccCCTTAAaacttcagcaaaaaaaaaaaaaaaactacagagctagtaaattcagtgaagttgcagaatacaaaatcaacatacaaaaatcagtagtgtctCTATACACTAATAAGGACTTAACAGAGaaagaagttaagaaaacaaTACCACTAACAATagaat
    ccaaaaaataaaatacttaggaataaattttaccaaacatctgtacactaaaaactataaaacattgaaaaaagaagTTGAATAAGACACATATAAATAGAAAGCTATCTCATGTTAA
    En utilisant NYTProf j'ai justement pu voir que les choses prenant beaucoup de temps sont mon while , ma aussi le 'revcom' (puis aussi l'appel de l'autre script).

    Merci d'avance pour votre aide !

  4. #4
    Membre éprouvé
    Inscrit en
    février 2003
    Messages
    1 138
    Détails du profil
    Informations forums :
    Inscription : février 2003
    Messages : 1 138
    Points : 1 139
    Points
    1 139

    Par défaut

    Bonjour,

    à la ligne 32, tu demandes à ton script Perl d'exécuter un autre script Perl.

    Peut être est-ce là où il faut commencer à chercher au sujet des lenteurs.

    Ton script Perl sw_algo.pl ne peut-il pas être transformé en lib (fichier .pm) ?

  5. #5
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mai 2012
    Messages
    3 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : mai 2012
    Messages : 3 197
    Points : 10 408
    Points
    10 408
    Billets dans le blog
    1

    Par défaut

    Bonjour FryHandiz,

    que le while prenne du temps, on s'y attend, puisque tout est fait dans cette boucle. Une petite question, cependant: as-tu un ordre de grandeur sur le nombre d'itérations effectuées par cette boucle?

    Quant à revcom, je n'ai aucune idée de ce que ça fait et n'en vois pas de trace dans les modules que tu utilises. Donc, là, je ne sais pas...

    Cette ligne retient mon attention:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    my $script = `perl scripts/perl/sw_algo.pl $TIR_de_debut $TIR_de_fin_rev`;
    Pour chaque itération de ta boucle while, tu lances ce script, ce qui veut dire que tu lances sans doute un shell, puis lances l'interpréteur Perl, puis compiles le script sw_algo.pl, et enfin exécutes ce script. Ça, c'est certainement très inefficace, surtout si ta boucle whilefait beaucoup d'itérations. Ne peux-tu pas mettre le contenu de ce script dans une fonction (ou une grappe de fonctions, voire un module) dans ton script principal. Je n'ai pas tous les éléments en main pour juger avec certitude, mais je pense que tu pourrais gagner vraiment beaucoup de temps en évitant cet appel externe répétitif. Peux-tu montrer le contenu de sw_algo.pl?

    D'ailleurs, pourrais-tu aussi fournir les informations détaillées de profilage données par NYTProf, cela m'aiderait sans doute à t'aider.

  6. #6
    Expert éminent Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    décembre 2012
    Messages
    2 526
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : décembre 2012
    Messages : 2 526
    Points : 7 007
    Points
    7 007

    Par défaut

    Bonjour,

    Je suis en accord avec Lolo78 et Arioch, faut vraiment éviter ce genre d'appel, voici un exemple qui montre la perte de temps du chargement d'un contexte processus: methode-d-utilisation-d-openssl-shell-cryptage-massif-mots-passe

    Sinon, pour ma part, lorsque je dois parser/traiter des données massivement, j'essaye autant que possible, de ne parcourir les données qu'un minimum de fois, quitte à les trier (dans le sens, les réorganiser) si par la suite ça peut me faire gagner un temps non négligeable.

    Un autre concept qui coule de source mais bien souvent au quel on ne pense pas, c'est quand on doit passer plusieurs filtre éliminatoire sur les données, on essaye d'abord de passer ceux qui élimine la plus grande partie en premier.

    On essaye aussi de réduire au minimum les entrées sorties car bien souvent, l'attente est au niveau de celles-ci et non au niveau du calcul pure.

    On réduits aussi les ouvertures/fermetures de fichiers massives au minimum: ici, je ne dis pas qu'il faut garder les fichiers ouverts, ce que je veux dire, c'est que l'on ne s'amuse pas à ouvrir et fermer le même fichier n fois, il existe des fonctions qui permettent de se déplacer dans les fichiers qui sont beaucoup moins couteuse que l'ouverture et la fermeture de fichier. En fait, les ouvertures et fermetures de fichiers ont presque le même impact qu'un chargement de contexte.
    Cordialement.

  7. #7
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    19 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 19 115
    Points : 496 079
    Points
    496 079

    Par défaut

    Bonsoir,

    Cela fait quelques temps, si ce n'est quelques années que je n'ai pas utilisé ce module.
    à part jeter un coup d’œil dans le deuxième script appelé, je ne vois où où l'on pourra optimiser ton programme.
    Tu utilises un module qui est déjà optimisé. Tu as un gros fichier de plusieurs Go contenant beaucoup de séquences.
    La fonction revcom te fournie la séquence reverse complémentaire, tu ne pourras pas faire mieux. De plus, tout est fait en mémoire, du moins, chaque séquence d'ADN (chaque itération du while) est analysée et mise en mémoire, ce qui permet aux fonctions ID, subseq... d'être rapide.

Discussions similaires

  1. Comment executer un script perl dans un script javascript ?
    Par Hamdi Hedhili dans le forum JavaScript
    Réponses: 12
    Dernier message: 01/11/2006, 18h09
  2. comment optimiser son code en calcul ???
    Par gronaze dans le forum C
    Réponses: 5
    Dernier message: 21/03/2006, 11h41
  3. Comment lancer un script perl dans un script perl
    Par kiza dans le forum Langage
    Réponses: 3
    Dernier message: 21/10/2005, 22h02
  4. [Perf] Comment optimiser son code ?
    Par Frifron dans le forum Général Java
    Réponses: 12
    Dernier message: 11/08/2005, 10h05
  5. comment executer un script perl svp?
    Par nico72 dans le forum Langage
    Réponses: 8
    Dernier message: 13/07/2005, 10h51

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