Gcc, Optimisations et resultats....

Gcc, Optimisations et resultats.... - Divers - Linux et OS Alternatifs

Marsh Posté le 19-08-2003 à 15:56:37    

J'ai un programme de calcul numerique. J'ai essaye de le compiler avec differentes options d'optimisations et la surprise, les resultats du calcul sont differents et en plus ca ralenti:
 
"sans -O" : resultats de type 1 en 50s
avec -O1  : resultats de type 2 en 40s
avec -O2  : resultats de type 3 en 1m02s
avec -O3  : resultats de type 4 en 1m03s.
 
Les resultats ne sont pas tres differents a chaque fois mais quand meme c'est pas les memes et ca m'ennuie (et puis je ne trouve pas ca normal). Quant aux temps de calcul, ils sont fonctions du resultat donc on ne peut pas trop s'y fier (mais quand meme je ne pense pas que ce soit normal)
 
Il y a une explication ???
 
De plus en enlevant "-march=pentium4" j'ai un resultat cette fois si tres different !!!
 
j'utilise gcc 3.2.2 sur une RedHat 9 (mise a jour) et ma machine est un PIV 2.8C. Je n'ai constate aucun autre probleme.
 
 

Reply

Marsh Posté le 19-08-2003 à 15:56:37   

Reply

Marsh Posté le 19-08-2003 à 16:04:01    

mokett a écrit :

J'ai un programme de calcul numerique. J'ai essaye de le compiler avec differentes options d'optimisations et la surprise, les resultats du calcul sont differents et en plus ca ralenti:
 
"sans -O" : resultats de type 1 en 50s
avec -O1  : resultats de type 2 en 40s
avec -O2  : resultats de type 3 en 1m02s
avec -O3  : resultats de type 4 en 1m03s.
 
Les resultats ne sont pas tres differents a chaque fois mais quand meme c'est pas les memes et ca m'ennuie (et puis je ne trouve pas ca normal). Quant aux temps de calcul, ils sont fonctions du resultat donc on ne peut pas trop s'y fier (mais quand meme je ne pense pas que ce soit normal)
 
Il y a une explication ???
 
De plus en enlevant "-march=pentium4" j'ai un resultat cette fois si tres different !!!
 
j'utilise gcc 3.2.2 sur une RedHat 9 (mise a jour) et ma machine est un PIV 2.8C. Je n'ai constate aucun autre probleme.
 
 
 


Très différent avec le "-march=pentium4", cad exactement ?

Reply

Marsh Posté le 19-08-2003 à 16:09:45    

c'est complique a expliquer...
 
Mais en gros si j'enleve le -march.. mon prog trouve le bon  resultat des le debut et donc s'arrete tout de suite. ( le resultat n'est alors pas du tout comparable avec les autres)
 
PS : bien sur mon programme est sense etre deterministe...

Reply

Marsh Posté le 19-08-2003 à 16:15:02    

mokett a écrit :

c'est complique a expliquer...
 
Mais en gros si j'enleve le -march.. mon prog trouve le bon  resultat des le debut et donc s'arrete tout de suite. ( le resultat n'est alors pas du tout comparable avec les autres)
 
PS : bien sur mon programme est sense etre deterministe...


Tu as fait un peu de théorie des Langages/ Cours de compilation ?
Ainsi que vu les grandes archis/familles de µproc ?
Cé ton compilateur qui s'amuse à réordonancer certaines séquences de code, en espérant optimiser l'exécution de ton prog ... seulement des fois, l'optimisation ne tient pas compte de certains paramètres inhérents à ton programme, notamment que son séquencement est très spécifique et ne doit pas être chamboulé ... :o
Enfin bon, cé un vaste sujet, et tu peux trouver bcp de forum sur  Internet où l'on parle de tous ces pbs d'archi système et de compilos associés ... :)

Reply

Marsh Posté le 19-08-2003 à 16:24:39    

En fait je veins de changer de machine et je n'avais jamais remarque ce genre de trucs sur l'autre (athlon-xp)...
 
Mon programme est du calcul numerique assez standard, je n'ai pas essayer de faire de blagues au compilo..  :pt1cable:  
 
 

Reply

Marsh Posté le 19-08-2003 à 16:26:22    

si ton programme est sensé sortir le meme résultat à chaque fois pour les besoins de tes tests et que tu optiens quelque choses de different, y a un gros problème dans ton code.
 
"Les resultats ne sont pas tres differents a chaque fois mais quand meme c'est pas les memes"
 
et qui implique donc  => "Quant aux temps de calcul, ils sont fonctions du resultat donc on ne peut pas trop s'y fier"
 
c'est bien ça ? le problème étant que les mêmes données devraient produire les mêmes résultats
 
si tu veux, demande à ce que ce topic soit déplacer sur prog et poste du code / on pourra parler plus spécifiquement

Reply

Marsh Posté le 19-08-2003 à 16:27:54    

mokett a écrit :

En fait je veins de changer de machine et je n'avais jamais remarque ce genre de trucs sur l'autre (athlon-xp)...
 
Mon programme est du calcul numerique assez standard, je n'ai pas essayer de faire de blagues au compilo..  :pt1cable:  
 
 
 


Euh ... tu inverses les rôles là ... cé lui qui t'en fait des blagues ... :D

Reply

Marsh Posté le 19-08-2003 à 17:10:47    

Taz a écrit :

si ton programme est sensé sortir le meme résultat à chaque fois pour les besoins de tes tests et que tu optiens quelque choses de different, y a un gros problème dans ton code.
 
"Les resultats ne sont pas tres differents a chaque fois mais quand meme c'est pas les memes"
 
et qui implique donc  => "Quant aux temps de calcul, ils sont fonctions du resultat donc on ne peut pas trop s'y fier"
 
c'est bien ça ? le problème étant que les mêmes données devraient produire les mêmes résultats
 
si tu veux, demande à ce que ce topic soit déplacer sur prog et poste du code / on pourra parler plus spécifiquement


 
Ouais ca peut etre un probleme de code mais de ce cote la je suis oblige de m'en sortir tout seul. parce que d'une part c'est trop long et d'autre part legalement je ne pense pas avoir le droit de le publier sur  le net.....
 
En tout cas si c'est le code ca fait chier...  
 
Je vais refaire des tests sur mon athlon pour voir parce que ca me semble bizarre tout de meme...
 
et un truc un peu hors sujet :
 
Vous en pensez quoi de l'hyper threading sous Linux ???
si on utilise qu'"un seul proc" (enfin si on a une appli non threadee) il utilise tout de meme 100% des capacites du proc ?
je veux dire pour du calcul numerique est ce que ce ne serait pas plus efficace de desactiver l'HT ?

Reply

Marsh Posté le 20-08-2003 à 15:35:46    

si tu n'a pas un kernel 2.6 il est tres tres conseiller de desactiver l'hyper-threading.

Reply

Marsh Posté le 20-08-2003 à 15:40:52    

Ah ok merci !
 

Reply

Marsh Posté le 20-08-2003 à 15:40:52   

Reply

Marsh Posté le 20-08-2003 à 16:21:54    

ca ne proviendrait pas des erreurs d'arrondis tes differences de resultat ?
 
parceque du flottant calcule en classique, mmx, 3dnow, sse ne donne pas les memes arrondis

Reply

Marsh Posté le 20-08-2003 à 16:35:16    

si je pense en fait...
 
mais j'avais jamais remarque.
Les erreurs sont quand meme de l'ordre de 0.3% !
 
Par contre le temps d'execution qui augmente c'est quand meme bizarre... avec mon athlon ca marchait beaucoup plus "logiquement"
 
=> c'est peut etre les optimisations SSE2

Reply

Marsh Posté le 20-08-2003 à 16:40:14    

si au lieu de nous dire que "le temps augmente" tu surveillais un peu ton programme pour s'il fait pas 4x plus de boucle en 03 qu'en O1?


Message édité par Taz le 20-08-2003 à 16:40:30
Reply

Marsh Posté le 20-08-2003 à 16:43:22    

ouais je vais essayer avec une boucle de taille fixe.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed