J’ai écrit du code C que j’appelle sous la forme MATLAB après l’avoir compilé avec MEX. À l’intérieur du code C, je mesure le temps d’une partie du calcul à l’aide du code suivant:
clock_t begin, end; double time_elapsed; begin = clock(); /* do stuff... */ end = clock(); time_elapsed = (double) ((double) (end - begin) / (double) CLOCKS_PER_SEC);
Le temps écoulé devrait être le temps d’exécution en secondes.
J’ai ensuite time_elapsed
la valeur time_elapsed
dans MATLAB (elle est correctement exscope; j’ai vérifié). Ensuite, côté MATLAB, j’appelle cette fonction C (après l’avoir compilée avec MEX) et mesure son temps d’exécution à l’aide de tic
et de toc
. Ce qui s’avère être une absurdité complète est que le temps que je calcule avec tic et toc est de 0.0011s (moyenne sur 500 exécutions, st. Dev. 1.4e-4), tandis que le temps renvoyé par le code C est de 0.037s ( moyenne sur 500 courses, st dev. 0,0016).
Ici, on peut remarquer deux faits très étranges:
Que se passe-t-il avec ces timers?
Vous comparez des pommes à des oranges.
Regardez la documentation de Matlab:
tic – http://www.mathworks.com/help/matlab/ref/tic.html
toc – http://www.mathworks.com/help/matlab/ref/toc.html
tic et toc vous permettent de mesurer le temps réel écoulé.
Examinons maintenant la fonction d’ horloge http://linux.die.net/man/3/clock .
En particulier,
La fonction clock () renvoie une approximation du temps processeur utilisé par le programme.
La valeur renvoyée est le temps CPU utilisé jusqu’à présent comme clock_t; Pour obtenir le nombre de secondes utilisées, divisez par CLOCKS_PER_SEC. Si le temps processeur utilisé n’est pas disponible ou si sa valeur ne peut pas être représentée, la fonction renvoie la valeur (clock_t) -1.
Alors, que peut expliquer votre différence:
Alors quoi faire … pour commencer, comparez des pommes avec des pommes! Ensuite, assurez-vous de prendre en compte la résolution de la timer.