begin process at 2012 05 29 05:09:16
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

fonctionne en debug mais pas en release?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

fonctionne en debug mais pas en release?

mercredi 30 novembre 2005 à 02:39:46 | fonctionne en debug mais pas en release?

serom00

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.


voila le code:


#include <stdio.h>
#include <windows.h>
#include <string.h>
#include <ctype.h>
#include <conio.h>
....

long FreqHorloge,beginTime,endTime;

int main (void)
{
 
 float T;
 int i,j;

 .......... 
    
 QueryPerformanceFrequency((LARGE_INTEGER*)&FreqHorloge);
 QueryPerformanceCounter((LARGE_INTEGER*)&beginTime);

..............................................
..............................................
ma fonction a analyser
..............................................
..............................................
 
 QueryPerformanceCounter((LARGE_INTEGER*)&endTime);
 T=(endTime-beginTime)/(float)FreqHorloge;


  
 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

Voila merci d'avance

mercredi 30 novembre 2005 à 08:51:01 | Re : fonctionne en debug mais pas en release?

buno

Administrateur CodeS-SourceS
Par définition, caluculer le temps d'exécution d'un code ne se fait pas en Debug mais en Release pour être "indépendant de Visual"

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
mercredi 30 novembre 2005 à 09:23:20 | Re : fonctionne en debug mais pas en release?

ymca2003

Réponse acceptée !
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.
mercredi 30 novembre 2005 à 11:38:44 | Re : fonctionne en debug mais pas en release?

BruNews

Administrateur CodeS-SourceS
Réponse acceptée !

Pour résumer:

LARGE_INTEGER lideb, lifin;

QueryPerformanceCounter(&lideb);
// LANCE TA FONCTION ICI
QueryPerformanceCounter(&lifin);
lifin.QuadPart -= lideb.QuadPart;

Te suffira de comparer les différentes valeurs de lifin.QuadPart suivant optimisations de tes fonctions.

et ne pas faire de tests en debug mais compilé en release avec toutes optimisations du compilo.

ciao...
[ Lien ]
BruNews, MVP VC++

mercredi 30 novembre 2005 à 23:33:43 | Re : fonctionne en debug mais pas en release?

serom00

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.

Merci encore


Cette discussion est classée dans : include, debug, release, freqhorloge, begintime


Répondre à ce message

Sujets en rapport avec ce message

debug vs release [ par coockiesch ] Hello!J'aimerais savoir les différences entre la compilation release et la compilation debug...Quels sont leurs avantages et leurs inconvéniants.Merci Debug & Release [ par hilairenicolas ] Bonjour à tous,j'ai un probleme étrange. Je developpe un .ocx qui n'a pas le meme comportement quand je le compile en mode debug ou en mode release. E assertion failed! + debug VS release [ par sro ] Bonjour,j'ai un ptit prgme cree a partir d'un "devolpement toolkit" pour webcam logitech. J'ai deja fait marche ce programme sans pb, mais maintenant new - debug / release [ par magic_Nono ] PB du new.... alors que ça passe avec des alloc classiquesOn me conceil d'utiliser des new plutot que des malloc en C++très bien maisvoici un petit mo mode debug / mode release avec Visual C++ [ par franckydeluka ] Bonjour à tous,je viens de créer une dll en mode débug et quand je l'appelle à partir d'un autre programme ça marche nickel sans problème.ensuite je l Visual C++ 6.0: générer une version de debug/release [ par oh81 ] Bonjour,  J'ai installé visual C++ sur mon Pc depuis ... J'ai remarqué que  quand je remplace "win32 debug" par "win32 release" ou l'inverse dans "Pro run debug != run release [ par Galmiza ] Salut,mon programme ne tourne pas de la meme facon quand je le compile en release ou en debug. C'est une sorte de moteur 3D, la difference est visible Debug | Release [ par 3psilon ] Slt,J'aurais aimer avoir quelques informations sur les modesdebug et release de VC 6.J'ai bien compris que, en mode debug, le compilo ajoute des infor tri listview ( debug - release ) [ par 3psilon ] Bonjour a tous,J'explique mon probleme :A titre pédagogique, j'ai crée une application (sans mfc avec VC 6), ou j'ai crée des listviews.Je rempli les Debug - Release - Probleme à l'execution... [ par Matt67 ] Bonsoir,Voici un morceau de code qui recupere le chemin de l'application et change l'extention en .ini (Dites moi si mon code est bien 'codé')LPTSTR l


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,250 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales