Se connecter

Informatique

Programmation

Sujet : Comparaison de performance d'un programme : C / Assembleur
1
Gangrefeu
Niveau 8
01 février 2023 à 20:10:56

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 :-)

godrik
Niveau 22
01 février 2023 à 22:09:34

tu peux appeller gettimeofday dans les deux cas.

Doz35n
Niveau 8
03 février 2023 à 15:39:07

appelle ton algo plein de fois pour réduire l'impact du "bruit"

Gangrefeu
Niveau 8
04 février 2023 à 17:16:26

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 ..

Oberginee
Niveau 7
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.

godrik
Niveau 22
10 février 2023 à 15:20:17

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.

1
Sujet : Comparaison de performance d'un programme : C / Assembleur
   Retour haut de page
Consulter la version web de cette page