serom00
Messages postés5Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention12 décembre 2005
-
30 nov. 2005 à 02:39
serom00
Messages postés5Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention12 décembre 2005
-
30 nov. 2005 à 23:33
Voila je travail sous Visual 7
Je travail sur l'implementation d'un algorithme que je dois optimiser la vitesse d'execution.
Pour se faire j'utilise les fonction QueryPerformanceFrequency et QueryPerformanceCounter pour mesurer le temps de d'execution.
Tout se passe a merveille en mode debug, mais en release sa foire:
en fait je crois que le probleme viens de QueryPerformanceFrequency, car en debug il mesure une frequence de 3579545hz et 80hz!! en release.
Je voudrai savoir si la valeur de cette frequence est censee etre differente en debug et en release. Car si j'applique la frequence mesuree en debug sur les mesure de temps effectuee en Release et que je fais le calcul par moi meme, je trouve un temps d'execution coherent.
..............................................
..............................................
ma fonction a analyser
..............................................
..............................................
printf("Algorithm executed in %f sec\n",T); printf("freqHorloge %d, begin %d, end= %d \n",FreqHorloge,beginTime,endTime);
// Leave properly
printf("Press <Enter> to end.\n");
getchar();
return 0;
}
Donc voila, j'espere que quelqu'un pourra m'aider
J'en profite pour demander si quelqu'un ne connaitrai pas des bonnes sources pour apprendre a optimiser du code sous Visual:
Bouquin, tutorial, page web,etc....Ca me serai aussi tres utile
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 30 nov. 2005 à 09:23
Les variables FreqHorloge,beginTime,endTime ne sont pas du bon type.
Les fonctions PerfTimer demandent des LARGE_INTEGER qui sont en fait des entiers sur 64 bits. Or tu les déclares en long (32 bits) => il y a un écrasement des variables.
Pour un peu qu'en Debug les variables soit alignées sur 8 octets et en Release sur 4, ça marche en Debug mais pas en Release ( dans le cas d'alignement 8 octets, 4 octets vides sont laissés après chaque variable et du coup il n'y a pas décrasement).
Il faut donc déclarer :
LARGE_INTEGER FreqHorloge,beginTime,endTime;
ou (sous Visual)
unsigned __int64 FreqHorloge,beginTime,endTime; et caster comme tu l'a fait en LARGE_INTEGER(et là sera OK car les var sont compatibles)
Ensuite pour afficher tes var il faudra faire %I64u (ou%I64d) au lieu de %d
Si tu es sous visual il y a une option de linker appelée "Profiling" qui permet de faire ce que tu souhaites. Après avoir activer cette option (Project->settings, onglet link, categorie General) er recompiler le tout (Rebuil all) il suffit de démarrer le prog par
Build->Profile. A la fin de l'exécution tu auras des statistiques sur les fcts appelées et leur temps d'exec.
PS : ça c'est pour VC6, pour autre visual, doit exister mais je ne sais pas les manip à faire.
serom00
Messages postés5Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention12 décembre 2005 30 nov. 2005 à 23:33
Ok,
merci bien pour ce coup de main qui m'a ete bien utile.
Pour ce qui est du profiling, je ne sais pas pourquoi, mais la fonction n'est pas disponible sur ma version de visual. en tout cas je la trouve pas. J'avais deja chercher pas mal de temps avant.
Pour cela j'utilise Intel Vtune Performance Analyzers. Mais c'est sur que se serai plus pratique d'avoir acces au profiling directement sous visual.
Desole si je met si longtemps a repondre, mais je suis a l'autre bout de la terre et j'ai 10h de decalage avec vous.