Bonjour,
j'ai cherché à faire des tests de performance avec ma librairie giac compilée avec MSVC mais la fonction giac time() me renvoie toujours 0.
J'ai commenté #define HAVE_NO_SYS_TIMES_H dans config.h et adapté le code pour reproduire les fonctions de <sys/times.h> (soit avec https://www.codefull.net/2015/12/systim ... r-windows/, soit avec <ctime> de MSVC) mais je continue d'obtenir 0.
Y a-t-il autre chose que je pourrais tenter pour faire marcher time() ?
time() sous windows
Modérateur : xcasadmin
Re: time() sous windows
Je viens d'installer xcas 64 mingw et je vois que time() renvoie toujours 0 aussi.
Par contre ça marche avec xcas 64 cygwin.
Par contre ça marche avec xcas 64 cygwin.
Re: time() sous windows
Je vois, je vais essayer de faire fonctionner time() avec mingw.
Re: time() sous windows
Voila, ca devrait marcher avec ca dans la fonction _time() juste avant le #if defined(__APPLE__) || defined(PNACL)
Code : Tout sélectionner
#if defined VISUALC || defined __MINGW_H
struct _timeb timebuffer0,timebuffer1;
_ftime(&timebuffer0);
for (;i<1000;){ // do it 10 times more
for (;i<ntimes;++i){
eval(a,level,contextptr);
}
_ftime(&timebuffer1);
delta=(timebuffer1.time-timebuffer0.time)+double(timebuffer1.millitm-timebuffer0.millitm)/1000;
if (delta>0.1)
break;
if (delta>0.05) // max wait time will be 2 seconds
ntimes *= 2;
else {
if (delta>0.02)
ntimes *= 5;
else
ntimes *= 10;
}
}
return (delta/ntimes);
#endif
Re: time() sous windows
Impec !
J'ai dû en plus faire ces modifications :
Dans config.h : commenter #define HAVE_NO_SYS_TIMES_H
Dans global.h remplacer sys/times.h par sys/timeb.h
Dans global.cc(5384) remplacer /sysconf(_SC_CLK_TCK) par /CLOCKS_PER_SECS (est-ce équivalent ? Si non, les tests que je rapporte plus bas ne seront pas fiables)
Dans global.h ajouter :
J'ai fait deux tests, répétés plusieurs fois pour stabiliser les temps :
avec xcas cygwin64 :
Surprenant, je ne m'attendais pas à ça.
avec xcas cygwin64 :
Cette fois, MSVC vainqueur.
Je n'ai pas compilé xcas mingw pour faire marcher time() mais je suppose que les résultats seront meilleurs qu'avec cygwin...
Bon c'était plus pour le fun car je suppose qu'en fonction de la nature du test et des fonctions sollicitées, les performances seront très variables...
J'ai dû en plus faire ces modifications :
Dans config.h : commenter #define HAVE_NO_SYS_TIMES_H
Dans global.h remplacer sys/times.h par sys/timeb.h
Dans global.cc(5384) remplacer /sysconf(_SC_CLK_TCK) par /CLOCKS_PER_SECS (est-ce équivalent ? Si non, les tests que je rapporte plus bas ne seront pas fiables)
Dans global.h ajouter :
Code : Tout sélectionner
/* Structure describing CPU time used by a process and its children. */
struct tms
{
clock_t tms_utime; /* User CPU time. */
clock_t tms_stime; /* System CPU time. */
clock_t tms_cutime; /* User CPU time of dead children. */
clock_t tms_cstime; /* System CPU time of dead children. */
};
/* Store the CPU time used by this process and all its
dead children (and their dead children) in BUFFER.
Return the elapsed real time, or (clock_t) -1 for errors.
All times are in CLK_TCKths of a second. */
clock_t times (struct tms *__buffer);
typedef long long suseconds_t ;
Code : Tout sélectionner
$ ./giac_oo.exe
Expression : time(factoriser(makelist(n->x^n-1,1,100)))
// Warning: x, declared as global variable(s). If symbolic variables are required, declare them as local and run purge
Sortie giac : 0.0404
Code : Tout sélectionner
[0.025,0.02354878]
Code : Tout sélectionner
Expression : time(evalf(pi,100000))
Sortie giac : 0.000156
Code : Tout sélectionner
[0.00042578125,0.00038788203125]
Je n'ai pas compilé xcas mingw pour faire marcher time() mais je suppose que les résultats seront meilleurs qu'avec cygwin...
Bon c'était plus pour le fun car je suppose qu'en fonction de la nature du test et des fonctions sollicitées, les performances seront très variables...