[architecture] différences 32-64 bit

Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   -  
Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
Voila mon souci. J'ai un logiciel scientifique écri en C++ et fortran77, il est lourd (1000 fichiers environ) et donc difficilement analysable.
Je compile ce code en deux version : 32 bit grace à l'option -m32 de gcc, et en 64 bit grace à l'option -m64.
Je lance ces deux programme, et j'obtiens deux résultats différents.
Ma question est : pourquoi ??
Le programme n'utilise que des int et des double qui ont la même taille en 32 et 64 bit. D'après vous qu'est-ce qui mêne à cette différence alors qu'a priori la précision est la même.
Merci de m'aider si vous avez des piste.

Salutation !

Quand on sait pas, on touche pas !JBT
Char Snipeur
A voir également:

14 réponses

kilian Messages postés 8854 Statut Modérateur 1 526
 
Ya pas des types long? Parce qu'ils varient entre 32 et 64:
https://fr.wikiversity.org/wiki/Langage_C%2B%2B/Types
0
Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Non, justement, j'ai remarqué que c'était les seuls type qui variaient entre 32 et 64, et pas de type long (ni long int, ni long double)
0
kilian Messages postés 8854 Statut Modérateur 1 526
 
Alors peut être regarder du côté de Fortran plutôt...
0
Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
malheureusement, non plus...
les real*8 et les real*4 ont toujours la même taille, semblerai-til.
Je n'arrive pas à produire une diffrence de calcul à partir d'un calcul simple.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kilian Messages postés 8854 Statut Modérateur 1 526
 
L'idéal serait de localiser l'endoit dans le code qui coince... Je sais bien que c'est plus facile à dire qu'à faire :-)
0
Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Le problème, c'est que ça coince pas, les résultats sont juste différents.
La première différence visible se produit environ au 200éme pas de temps, mais si ça se trouve il y a des différence depuis bien avant.
0
kilian Messages postés 8854 Statut Modérateur 1 526
 
Je ne pourrais pas t'aider... Il faudrait au moins localiser la zone qui coince dans la source.
Donc mettre des printf à différents endroits, ou sortir le debuggeur...
0
Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Sortir le debugueru, je veux bien, mais l'arreter sur quel critère ?
quand au printf... il y a tellement de variables différentes ! En fesant un maillage avec une seul maille, peut être que ça simplifierai le problème avec seulement une grosse centaines de variables à tester.
En fait, je pensais que quelqu'un aurait une réponse un peu théorique sur les différences entre 32 et 64
0
kilian Messages postés 8854 Statut Modérateur 1 526
 
Ben à part ça je ne vois pas.
Les différences théoriques ne devraient pas se voir tant qu'on continue d'utiliser des variables 32 bits.
Tu utilises des doubles?

Peut être que les nombres flottaants 64 bits ne sont pas traités de la même façon.

0
Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Oui, j'utilise des double, donc coé sur 8octets (64 bits non?)
0
kilian Messages postés 8854 Statut Modérateur 1 526
 
Oui, 8 octets.
Mais je pense (sans être sûr) que les doubles sur les proc 32 bits sont séparés sur 2 registres puis les opérations se font avec du code spécifique fourni par ton système ou compilateur... C'est du moins comme ça que ça se passe pour les entiers 64 sur processeur 32 (les types long long).

Sur 64, ça se fait à priori en une instruction processeur.

Et ce qu'il y aurait une différence de précision entre les deux?
0
kilian Messages postés 8854 Statut Modérateur 1 526
 
Mouaif bon....je t'abandonne à ton triste sort, je ne vois pas vraiment ce qui cloche.
0
Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Je m'attend aussi à une différence de ce genre. Il est clair que si il y a un calcul sur deux registres, puis une opération spécifique, ça peut expliqué la différence.
Il est possible que dans certains cas lors d'une opération sur les doubles le collage des registres 32 bits entrainent un arrondi ou la suppresion d'un bit.
Je me galère pour trouver de la doc à ce sujet.
0
routier
 
Salut a tous
Je me pose une question?
Je tourne sur Xp Pro Coccinelle 3.5 . Et des amis me disent de passer sur Vista 64 Bits
Voila ma configuration :
Intel dual Core 6300 2 GHZ
Carte mere Asus P5B Deluxe
Carte Video Ge Force 7300 GS et 2G de RAM
Quand pense vous ?
Merci d'eclairer ma lanterne.
0
Mahmah Messages postés 497 Statut Membre 125
 
Bonjour,

Ceci est à vérifier bien sûr mais je pense que tu vas te faire chier car tous tes divers devront être signés et des fabriquants tels que NVidia par exemple ne le font pas forcément... Il y a peut-être un autre débat à ouvrir: un dual core 32 bits peut comprendre du 64 bits mais le fait-il aussi bien qu'un vrai processeur 64 bits ?

M.
0
Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 299 > Mahmah Messages postés 497 Statut Membre
 
Tiens, moi j'aurai dit le contraire...
comment un 32 bits peut il comprendre du 64 ?

Sinon, pour la question, je pense que Vista est encore à éviter pendant quelques années.
0
Mahmah Messages postés 497 Statut Membre 125 > Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention  
 
Les dual core d'Intel peuvent fonctionner en parallèle et se faire passer pour un seul processeur 64 bits.

M.
0
Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 299 > Mahmah Messages postés 497 Statut Membre
 
Ok merci.
Du coup tu perds pas mal d'avantage du dual corps. Il est clair qu'il vaut mieu un proc 64 pour travailler en 64.
0