Bonjour,
Sur une machine IBM AIX 6, compilateur xlc 11.0, j'ai une grosse application mono-thread qui traite énormément de données.
Maintenant, le code doit utiliser une lib qui intègre un mutex. Le programme est maintenant compilé avec la lib pthread. Le temps de traitement est à présent environ doublé (il passe à 1 heure).
J'ai réussi à isoler et reproduire le problème. Cela vient des accès fichiers avec fread, fwrite et fseek.
Voici un exemple pour reproduire le problème :
Si je compile avec "xlc -O2 temps_pthread.c", ça prend 5 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 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> int main() { FILE * fichier = fopen( "mon_fichier.bin", "w" ); if( fichier == NULL ) { printf( "fopen: %s\n", strerror( errno ) ); exit( 1 ); } for( int i = 0 ; i < 4000000 ; ++i ) { fseek( fichier, 0, SEEK_SET ); } printf( "ok\n" ); exit( 0 ); }
Mais si je compile avec "xlc -O2 -lpthread temps_pthread.c", ça prend 6 s.
Comment expliquer cette différence de temps d'exécution ?
Quel argument ajouter à xlc pour ne plus avoir de différence de temps ?
J'ai éplucher la doc de xlc, passé plusieurs heures à faire des recherches sur le net, mais je suis à cours d'idées.
Merci.
Partager