1 pièce(s) jointe(s)
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:
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:
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:
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.
Pièce jointe 651377