UNE CLASSE DE CHRONO QUI VA JUSQU'A LA NANOSECONDE !
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019
-
17 sept. 2005 à 11:55
themadmax
Messages postés4Date d'inscriptionmercredi 24 juillet 2002StatutMembreDernière intervention28 mars 2007
-
28 mars 2007 à 16:23
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
Il suffit de forcer le thread sur un CPU, ici sur le premier CPU en ne donnant l'affinité qu'à un seul processeur, ici le premier
SetThreadAffinityMask(GetCurrentThread(),1);
Zyph0s
Messages postés2Date d'inscriptionmardi 31 août 2004StatutMembreDernière intervention 2 juillet 2006 2 juil. 2006 à 16:45
Ce code ne marche pas sur un processeur Multi-core. Sauf si on le force sur un seul core. Quelqu'un a une solution ?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 28 mars 2006 à 15:27
Un appel system + 1 multiplication et 1 division
Tu penses gagner quoi en ASM ?
nightlord666
Messages postés746Date d'inscriptionvendredi 17 juin 2005StatutMembreDernière intervention23 mai 200710 28 mars 2006 à 14:39
Si ça intéresse quelqu'un, je vais peut-être refaire une version de la classe en assembleur pour la rendre plus rapide à l'éxécution. Dès que je l'aurais finie, je la posterai sur asmfr.com.
nightlord666
Messages postés746Date d'inscriptionvendredi 17 juin 2005StatutMembreDernière intervention23 mai 200710 28 mars 2006 à 14:28
--> Ordepedro
Ca ne doit pas influer beaucoup(une mise de valeur dans la pile) donc c'est une bonne idée. Je vais rajouter ça dans la classe.
Ndisalvio
Messages postés3Date d'inscriptionjeudi 16 février 2006StatutMembreDernière intervention27 avril 2006 16 févr. 2006 à 13:23
En fait je pense que c'est le temps d'executer la classe qui fait que le temps trouve est légèrement supérieur à 10ms (en Ns bien shur)
ordepedro
Messages postés1Date d'inscriptionjeudi 12 janvier 2006StatutMembreDernière intervention22 janvier 2006 22 janv. 2006 à 12:17
Merci pour ton code nightlord666, il va m'être bien utile.
Sinon petite question: Pourquoi ne pas remplacer les 3 fonction GetDiff... par une seule du genre ?
#define mS 1000
#define uS 1000000
#define nS 1000000000
DWORD GetDiff(UINT Unite) //'Unite' prenant les valeure mS uS ou nS
{
__int64 t1;
QueryPerformanceCounter((LARGE_INTEGER*)&t1);
return (DWORD)(((t1 - t0) * Unite) / freq);
}
Est ce que c'ette écriture influe sur le résultat ou sur la rapidité du code ?
vangeurmasker
Messages postés99Date d'inscriptionmercredi 12 mai 2004StatutMembreDernière intervention29 mars 2006 24 oct. 2005 à 15:09
Deux petits commentaires
- 1 seconde 10e9 nanosecondes> 10 millisecondes = 10 000 000 nanosecondes
- la fonction sleep ne permet en aucun cas de faire une pose précise.
Sinon cette source est bien hormis la faute ligne 46 il manque un zero
nightlord666
Messages postés746Date d'inscriptionvendredi 17 juin 2005StatutMembreDernière intervention23 mai 200710 20 sept. 2005 à 18:57
bweps -> Bah j'ai testé et avec 23 processus lancés, j'arrive à une précision à 10 nanosecondes près...
dominion -> Je ne sais pas, le meilleur moyen est de regarder à l'execution du programme la ligne : "10 millisecondes = xxx nanosecondes". Comme ca tu voit bien la précision : plus la valeur xxx s'approche de 10000, plus c'est précis.
bweps
Messages postés17Date d'inscriptiondimanche 12 décembre 2004StatutMembreDernière intervention10 mai 2007 19 sept. 2005 à 14:55
bweps
Messages postés17Date d'inscriptiondimanche 12 décembre 2004StatutMembreDernière intervention10 mai 2007 19 sept. 2005 à 14:52
salut, je vais être lourd, mais ça ne vous dérange pas que votre mesure prenne aussi en compte le temps d'exécution de toutes les applis qui tournent en même temps, alorss que vous cherchez une précision si grande ?
cs_dominion
Messages postés230Date d'inscriptionmardi 21 janvier 2003StatutMembreDernière intervention15 mai 2008 19 sept. 2005 à 01:27
nightlord666 << Le prog marche, ok... Mais moi je parlais de la précision du calcul... Tu vois un chiffre mais d'après ce qu'on m'a dit la précision du dit chiffre dépend de la carte mère (ce qui paraît logique). Je voulais juste confirmation ;-)
nightlord666
Messages postés746Date d'inscriptionvendredi 17 juin 2005StatutMembreDernière intervention23 mai 200710 18 sept. 2005 à 16:26
dominion ► Je ne sais pas mais moi ça marche sur ma carte mère toute pourrie alors ça devrait marcher sur ton ordi. Essaie le programme et comme ça tu es sur.
Urgo ► Merci, je vais corriger ça dès aujourd'hui.
cs_Urgo
Messages postés780Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention16 avril 20091 18 sept. 2005 à 15:52
Le langage (sans "u" en français), svp!
cs_dominion
Messages postés230Date d'inscriptionmardi 21 janvier 2003StatutMembreDernière intervention15 mai 2008 18 sept. 2005 à 00:56
J'ai entendu dire que la nanoseconde ne peut être calculée que par des ordis nouvelle génération (P4 ou XP+)... Est-ce vrai ???
28 mars 2007 à 16:23
class PerfChrono
{
///la frequence de l'horloge
__int64 m_freq;
///Temp initial
__int64 m_t0;
public:
enum Unit { ms, micros, nanos };
PerfChrono(void);
~PerfChrono(void);
void start(void);
DWORD getDiff(Unit unit = ms);
};
2 juil. 2006 à 17:03
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/directx9_c/Game_Timing_and_Multicore_Processors.asp
Il suffit de forcer le thread sur un CPU, ici sur le premier CPU en ne donnant l'affinité qu'à un seul processeur, ici le premier
SetThreadAffinityMask(GetCurrentThread(),1);
plus d'info sur :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/setthreadaffinitymask.asp
2 juil. 2006 à 16:45
28 mars 2006 à 15:27
Tu penses gagner quoi en ASM ?
28 mars 2006 à 14:39
28 mars 2006 à 14:28
Ca ne doit pas influer beaucoup(une mise de valeur dans la pile) donc c'est une bonne idée. Je vais rajouter ça dans la classe.
16 févr. 2006 à 13:23
22 janv. 2006 à 12:17
Sinon petite question: Pourquoi ne pas remplacer les 3 fonction GetDiff... par une seule du genre ?
#define mS 1000
#define uS 1000000
#define nS 1000000000
DWORD GetDiff(UINT Unite) //'Unite' prenant les valeure mS uS ou nS
{
__int64 t1;
QueryPerformanceCounter((LARGE_INTEGER*)&t1);
return (DWORD)(((t1 - t0) * Unite) / freq);
}
Est ce que c'ette écriture influe sur le résultat ou sur la rapidité du code ?
24 oct. 2005 à 15:09
- 1 seconde 10e9 nanosecondes> 10 millisecondes = 10 000 000 nanosecondes
- la fonction sleep ne permet en aucun cas de faire une pose précise.
Sinon cette source est bien hormis la faute ligne 46 il manque un zero
20 sept. 2005 à 18:57
dominion -> Je ne sais pas, le meilleur moyen est de regarder à l'execution du programme la ligne : "10 millisecondes = xxx nanosecondes". Comme ca tu voit bien la précision : plus la valeur xxx s'approche de 10000, plus c'est précis.
19 sept. 2005 à 14:55
http://www.cppfrance.com/codes/UNE-CLASSE-SIMPLE-EN-C-POUR-MESURER-LE-TEMPS-D-EXECUTION-D-UNE-PORTION-DE-CODE-SUR-UNE-MACHINE-NON-DEDIEE-AUX-TESTS-WINDOWS-/33788.aspx
19 sept. 2005 à 14:52
19 sept. 2005 à 01:27
18 sept. 2005 à 16:26
Urgo ► Merci, je vais corriger ça dès aujourd'hui.
18 sept. 2005 à 15:52
18 sept. 2005 à 00:56