Bonjour à tous,
Je cherche à obtenir de bonne performance dans un programme C qui converti une image PNM en JPEG.
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
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; }
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:/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
Je suis beaucoup plus lent. Une idée? Des instructions à ajouter à la compilation?
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
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
Partager