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

Langage Perl Discussion :

Questionnement optimisation ressource


Sujet :

Langage Perl

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 195
    Points : 121
    Points
    121
    Par défaut Questionnement optimisation ressource
    Bonjour,

    pour un futur besoin je vais découper tout le réseau classe A 10.0.0.0/8 en sous réseaux avec un masque de /24..

    Le résultat des sous réseaux s'affichant avec un /24 à la fin, je supprime cette partie et ensuite pour chaque sous réseaux, obtenir tous les adresses de host entre .230 et 252.

    J'ai un test sans et avec référence. Le temps du second et ressource sont meilleurs mais vu le temps, j'ai du rater une optimisation quelque part.

    Je suis sur :
    I7-4600U
    8G de RAM
    strawberry 5.26.1 portable

    Sans référence.

    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
    use strict;
    use warnings;
    use feature 'say';
    use Data::Dumper;
    #no warnings ('uninitialized', 'substr');
    use NetAddr::IP;
    use Benchmark;
     
     
    my $t0 = Benchmark->new;
     
    my $ip = new NetAddr::IP('10.0.0.0/8');
     
    my @objects = $ip->split(24);
     
    my $NET;
    my $nbhost;
     
     
    for my $IP (@objects) {
    	$NET++;
    	foreach ( 230 .. 252) {
    		my $host = NetAddr::IP->new($IP) + $_;
    		$host =~ /(\d+\.\d+\.\d+\.\d+)\b\/\d+/;
    		say $1;
    		$nbhost++;
    	}
    }
     
    say "Nombre de reseaux $NET";
    say "Nombre adresse totale $nbhost;
     
    my $t1 = Benchmark->new;
    my $td = timediff($t1, $t0);
    print "the code took:",timestr($td),"\n";
    ### RESULTAT BENCHMARCK
    Nombre de reseaux 65536
    Nombre adresse totale 1507328
    the code took:1882 wallclock secs (608.70 usr + 65.84 sys = 674.55 CPU)


    Avec référence

    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
    use warnings;
    use feature 'say';
    use Data::Dumper;
    #no warnings ('uninitialized', 'substr');
    use NetAddr::IP;
    use Benchmark;
     
    my $t0 = Benchmark->new;
     
    my $ip = new NetAddr::IP('10.0.0.0/8');
     
    my @objects = $ip->split(24);
    my $ref_objects = \@objects;
     
    my $NET;
    my $nbhost;
     
    #### VERSION PROCESSLESS
    foreach my $IP (@$ref_objects) {
    	$NET++;
    	foreach ( 230 .. 252) {
    		my $host = NetAddr::IP->new($IP) + $_;
    		$host =~ /(\d+\.\d+\.\d+\.\d+)\b\/\d+/;
    		say $1;
    		$nbhost++;
    	}
    }
     
    say "Nombre de reseaux $NET";
    say "Nombre adresse totale $nbhost;
     
    my $t1 = Benchmark->new;
    my $td = timediff($t1, $t0);
    print "the code took:",timestr($td),"\n";
    ### RESULTAT BENCHMARCK
    Nombre de reseaux 65536
    Nombre adresse totale 1507328
    the code took:1623 wallclock secs (548.33 usr + 44.00 sys = 592.33 CPU)

    Merci pour vos pistes

  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 612
    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 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Franchement, une différence de l'ordre de 15% entre deux tests de ce genre n'est pas très significative et peut être un artéfact des tests (disons que je considère généralement que ça commence à devenir significatif à partir de 15%, on est donc ici juste à la limite).

    A vu de nez, la seule différence est l'utilisation d'un tabkeau ou d'une référence à un tableau. Je ne pense pas que ça puisse faire vraiment une différence.

  3. #3
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 286
    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 : 4 286
    Points : 12 742
    Points
    12 742
    Par défaut
    Bonjour,

    Je pense que tu auras du mal à réduire (sauf en parallélisant), car tu sembles dans les temps d'après le benchmark ICI
    Le gars ne dit rien sur sa plateforme, mais au final via le module NetAddr::IP, on gère environ 2500 IP par seconde, ce qui nous fait dans les 602 secondes pour toutes tes IP.
    Cordialement.

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 195
    Points : 121
    Points
    121
    Par défaut
    Merci pour vos retour.
    j'avais un doute d'avoir rajouté des étapes en trop et/ou mla faites mais le temps que tu indiques sembles indiquer que je ne pourrais pas faire mieux.

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 195
    Points : 121
    Points
    121
    Par défaut
    Pour la petite histoire avec un sub en plus on peut vraiment faire baisser le temps traitement de manière franche.
    La partie CPU supplémentaire doit venir du fait que contrairement à avant j'avais plusieurs programmes lancés.


    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
    use strict;
    use warnings;
    use feature 'say';
    use Data::Dumper;
    #no warnings ('uninitialized', 'substr');
    use NetAddr::IP;
    use Benchmark;
     
     
    my $t0 = Benchmark->new;
     
    my $ip = new NetAddr::IP('10.0.0.0/8');
     
    my @objects = $ip->split(24);
    my $ref_objects = \@objects;
     
    my $NET;
    my $nbhost;
     
    #### VERSION PROCESSLESS
    foreach my $IP (@$ref_objects) {
    	$NET++;
    	HOST($IP);
    }
     
     
    sub HOST {
    	my $IP = shift;
    	foreach ( 230 .. 252) {
    		my $host = NetAddr::IP->new($IP) + $_;
    		$host =~ /(\d+\.\d+\.\d+\.\d+)\b\/\d+/;
    		my $add = $1;
    		say $add;
    		$nbhost++;
    	}
    } 
     
     
    say "Nombre de reseaux $NET";
    say "Nombre adresse totale $nbhost";
     
    my $t1 = Benchmark->new;
    my $td = timediff($t1, $t0);
    print "the code took:",timestr($td),"\n";

    ### RESULTAT
    Nombre de reseaux 65536
    Nombre adresse totale 1507328
    the code took:1026 wallclock secs (644.72 usr + 24.39 sys = 669.11 CPU)

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 05/03/2013, 12h07
  2. optimisation de ressources
    Par goute dans le forum Langage
    Réponses: 1
    Dernier message: 20/01/2009, 19h23
  3. Optimisation ressources java
    Par fanabi dans le forum NetBeans
    Réponses: 1
    Dernier message: 19/05/2008, 11h27
  4. optimisation ressource proccesseur
    Par szambaux dans le forum ActionScript 1 & ActionScript 2
    Réponses: 4
    Dernier message: 31/10/2007, 19h24
  5. Optimisation des ressources
    Par Civet dans le forum Langage
    Réponses: 4
    Dernier message: 19/04/2007, 15h55

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