Salut, j'ai codé un algo de crypto en C et en assembleur (x86 sur linux) et j'aimerais comparer la rapidité des deux. Seulement, je ne sais pas comment m'y prendre.
En C, la librairie time.h permet de connaître le temps d'exécution du programme. Mais j'ignore comment faire cela en assembleur.
J'ai trouvé l'instruction rdtsc qui permet de connaître le nombre de cycles d'horloge effectué entre deux morceaux du code. Mais j'ai l'impression qu'il y a un bruit énorme sur la valeur retournée (peut-être à cause de ce qui tourne sur le pc ?) Je ne vois pas alors comment comparer la rapidité de ces deux programmes. Le temps observé dans l'invit de commande n'est, semble-t-il, pas une référence...
Comment pourrais-je faire ?
Merci
tu peux appeller gettimeofday dans les deux cas.
appelle ton algo plein de fois pour réduire l'impact du "bruit"
Le 01 février 2023 à 22:09:34 :
tu peux appeller gettimeofday dans les deux cas.
Merci je ne connaissais pas !
Le 02 février 2023 à 22:48:53 :
Sous linux,time tonprogramme
encore plus pratique ! merci
Le 03 février 2023 à 15:39:07 :
appelle ton algo plein de fois pour réduire l'impact du "bruit"
Un peu long de faire des moyennes, et ça varie vraiment fortement alors bon ..
Normalement t'as même pas besoin de les comparer car un compilateur moderne de C peut très bien optimiser les choses et ça dépasse certainement et largement un code écrit par un expert d'assembleur.
Il suffit d'activer ton paramètre O3 sinon tu peux voir comment gérer les paramètres.
Le 10 février 2023 à 01:14:13 :
Normalement t'as même pas besoin de les comparer car un compilateur moderne de C peut très bien optimiser les choses et ça dépasse certainement et largement un code écrit par un expert d'assembleur.Il suffit d'activer ton paramètre O3 sinon tu peux voir comment gérer les paramètres.
Ce n'est pas forcement vrai. Il y a plein de cas ou le compilateur ne peut pas savoir que le reordonement d'instruction est possible. Ou que different pointeur sont aliase d'une facon qui permet d'eviter certaines operations memoire, ou ce genre de chose.
Oui, dans la plupart des cas c'est possible d'ecrire du code qui quand il est compile -O3 -march -mtune va avoir les memes performances. Masi souvent c'est parceque tu sais ecrire/lire le code assembleur sous jacent que tu sais comment ecrire le code C de facon a ce que le code assembleur genere soit optimise.