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

Bibliothèques, systèmes et outils C Discussion :

Performance libvips pour généger des JPEG


Sujet :

Bibliothèques, systèmes et outils C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 211
    Par défaut Performance libvips pour généger des JPEG
    Bonjour à tous,

    Je cherche à obtenir de bonne performance dans un programme C qui converti une image PNM en JPEG.

    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
    #include <stdio.h>
    #include <vips/vips.h>
    //gcc -O3 -o testlibvips testlibvips.c `pkg-config vips --cflags --libs`
     
     
    int main() {
        if (VIPS_INIT("testlibvips") != 0) {
            vips_error_exit("unable to start VIPS");
        }
     
        // Chemins des fichiers d'entrée et de sortie
        const char *inputFile = "/tmp/test_raw.pnm";
        const char *outputFile = "/tmp/test.jpg";
     
        // Charger l'image PNM
        VipsImage *image = vips_image_new_from_file(inputFile, NULL);
        if (image == NULL) {
            vips_error_exit("unable to load input file");
        }
     
        // Enregistrer l'image en JPEG avec une qualité de 75 et sans les informations EXIF
        if (vips_jpegsave(image, outputFile, "Q",75, "strip", TRUE,  NULL) != 0) {
            vips_error_exit("unable to save output file");
        }
     
        // Libérer la mémoire
        g_object_unref(image);
     
     
        vips_shutdown();
     
        return 0;
    }
    Voici ce que j'obtiens avec le programme "clé en main" de linux CJPEG
    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
    seb@dell:/tmp$ time taskset -c 1 cjpeg -outfile test.jpeg test_raw.pnm
     
    real    0m0,014s
    user    0m0,009s
    sys     0m0,005s
    seb@dell:/tmp$ time taskset -c 1 cjpeg -outfile test.jpeg test_raw.pnm
     
    real    0m0,013s
    user    0m0,012s
    sys     0m0,001s
    seb@dell:/tmp$ time taskset -c 1 cjpeg -outfile test.jpeg test_raw.pnm
     
    real    0m0,013s
    user    0m0,013s
    sys     0m0,001s
    seb@dell:/tmp$ time taskset -c 1 cjpeg -outfile test.jpeg test_raw.pnm
     
    real    0m0,015s
    user    0m0,010s
    sys     0m0,005s
    seb@dell:/tmp$ time taskset -c 1 cjpeg -outfile test.jpeg test_raw.pnm
     
    real    0m0,018s
    user    0m0,008s
    sys     0m0,007s
    Et avec mon 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
    21
    22
    23
    24
    25
    seb@dell:~/c$ time taskset -c 1 ./testlibvips
     
    real    0m0,070s
    user    0m0,061s
    sys     0m0,009s
    seb@dell:~/c$ time taskset -c 1 ./testlibvips
     
    real    0m0,069s
    user    0m0,057s
    sys     0m0,012s
    seb@dell:~/c$ time taskset -c 1 ./testlibvips
     
    real    0m0,069s
    user    0m0,046s
    sys     0m0,023s
    seb@dell:~/c$ time taskset -c 1 ./testlibvips
     
    real    0m0,071s
    user    0m0,054s
    sys     0m0,017s
    seb@dell:~/c$ time taskset -c 1 ./testlibvips
     
    real    0m0,071s
    user    0m0,058s
    sys     0m0,013s
    Je suis beaucoup plus lent. Une idée? Des instructions à ajouter à la compilation?

    PS j'ai ajouté "taskset -c 1" pour effectuer le test sur 1 seul coeur mais cela ne change rien si je l'enlève.

    test_raw.zip

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Bonjour,

    C'est peut-être dû aux options de compilation.
    Quelles sont les options que tu utilises?
    Es-tu sûr de compiler une version release et pas une version debug?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 211
    Par défaut
    Citation Envoyé par dalfab Voir le message
    Bonjour,

    C'est peut-être dû aux options de compilation.
    Quelles sont les options que tu utilises?
    Je compile avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -O3 -o testlibvips testlibvips.c `pkg-config vips --cflags --libs`
    Citation Envoyé par dalfab Voir le message
    Es-tu sûr de compiler une version release et pas une version debug?
    non, enfin j'ai pas ajouté le -g

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Peut-être que cjpeg ne fait pas la même chose que toi.
    As-tu vérifié dans son code source?

  5. #5
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 630
    Par défaut
    Bonjour,

    Il y a aussi libjpeg-turbo qui utilise les opérations vectorielles (SIMD) pour grapiller du temps.

    Salutations

Discussions similaires

  1. [PC fixe] Performance requises pour regarder des films HD
    Par Tux1582 dans le forum Ordinateurs
    Réponses: 3
    Dernier message: 21/07/2013, 13h37
  2. Réponses: 1
    Dernier message: 16/12/2008, 18h42
  3. Audit des performances requises pour application
    Par LiohAu dans le forum Composants
    Réponses: 2
    Dernier message: 19/09/2008, 15h51
  4. Automatisation pour combiner des jpeg en pdf
    Par ridertart dans le forum Langage
    Réponses: 1
    Dernier message: 17/02/2008, 19h32
  5. Réponses: 3
    Dernier message: 22/01/2006, 17h57

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