J'ai une simple classe de vecteurs mathématiques avec des opérateurs surchargés. Je voudrais obtenir des résultats de synchronisation pour mes opérateurs. Je peux facilement chronométrer mon + =, - =, * = et/= en chronométrant le code suivant:Opérateur de synchronisation +, opérateur-, opérateur * et opérateur/
Vector sum;
for(size_t i = 0; i<iter; ++i)
sum += RandVector();
cout << sum << endl;
Ensuite, je peux soustraire le temps qu'il faut pour générer des vecteurs aléatoires iter. Dans mes tests, Vector est en 3 dimensions, iter = 10,000,000.
J'ai essayé de faire la même chose avec +, -, *, /:
Vector sum;
for(size_t i = 0; i<iter; ++i)
sum = sum + RandVector();
cout << sum << endl;
Ensuite soustrayez le temps qu'il faut pour générer des vecteurs aléatoires iter et effectuer des missions iter, mais cela donne un « négatif » temps, ce qui m'amène à croire soit que le compilateur optimise l'opération, soit qu'il se passe quelque chose d'étrange. J'utilise gcc-4.7.2 en utilisant -O3 sur une machine Fedora Linux.
Voici mon code de synchronisation:
clock_t start, k = clock();
do start = clock();
while(start == k);
F()();
clock_t end = clock();
double time = double(end-start)/double(CLOCKS_PER_SEC);
cout << time - time_iter_rand_v - time_iter_ass;
Ici F est un objet de fonction qui exécute le code ci-dessus. time_iter_rand_v est le temps qu'il faut pour créer des vecteurs aléatoires iter et time_iter_ass est le temps qu'il a fallu pour les opérations d'assignation d'iter.
Ma question est alors comment obtenir un timing précis de seulement l'opérateur + la fonction pas d'assignations ou la génération de vecteurs aléatoires?
Comment faites-vous la synchronisation? – Gian
J'utilise clock() de –
pippin1289
Le compilateur ne peut pas faire tourner l'horloge en arrière, n'est-ce pas? Clairement, votre * code de synchronisation * est faux. – EJP