[architecture] différences 32-64 bit

Fermé
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 28 janv. 2008 à 11:16
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 19 mars 2008 à 15:51
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 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
28 janv. 2008 à 12:51
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 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
28 janv. 2008 à 14:22
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 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
28 janv. 2008 à 16:34
Alors peut être regarder du côté de Fortran plutôt...
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
28 janv. 2008 à 17:20
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 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
28 janv. 2008 à 17:42
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 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
29 janv. 2008 à 08:57
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 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
29 janv. 2008 à 16:38
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 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
30 janv. 2008 à 15:44
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 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
30 janv. 2008 à 16:01
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 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
30 janv. 2008 à 16:23
Oui, j'utilise des double, donc coé sur 8octets (64 bits non?)
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
30 janv. 2008 à 16:39
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 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
30 janv. 2008 à 16:47
Mouaif bon....je t'abandonne à ton triste sort, je ne vois pas vraiment ce qui cloche.
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
31 janv. 2008 à 09:53
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
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 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 125
19 mars 2008 à 15:09
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 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298 > Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010
19 mars 2008 à 15:24
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 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 125 > Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023
19 mars 2008 à 15:34
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 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298 > Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010
19 mars 2008 à 15:51
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