[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
Configuration: Windows XP
Firefox 2.0.0.11

14 réponses

  1. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    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
  2. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
     
    Alors peut être regarder du côté de Fortran plutôt...
    0
  3. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    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
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   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
  6. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    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
  7. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   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
  8. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    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
  9. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   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
  10. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    Oui, j'utilise des double, donc coé sur 8octets (64 bits non?)
    0
  11. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   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
  12. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
     
    Mouaif bon....je t'abandonne à ton triste sort, je ne vois pas vraiment ce qui cloche.
    0
  13. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    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
  14. 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
    1. 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
      1. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331 > 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
      2. 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
      3. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331 > 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