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

  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 648
    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 648
    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