IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Fortran Discussion :

F77 taille tableau limitee ?


Sujet :

Fortran

  1. #1
    Membre régulier
    Homme Profil pro
    Collégien
    Inscrit en
    Mars 2003
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Mars 2003
    Messages : 192
    Points : 87
    Points
    87
    Par défaut F77 taille tableau limitee ?
    Hello :-)

    J'ai un code en fortran 77, qui comporte entre autre choses, 5 gros tableaux, dont la taille est donnee par le parametre 'np'.

    La valeur actuelle est : np = 36000000.
    ce sont des tableaux de real, donc 4 octets je pense.
    ca fait 4*36*1e6*5 = environ 600Mo de memoire.

    Ca passe sans probleme. Si je passe a np = 200000000 (200 millions), j'ai cette erreur a la compilation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ld: in /var/folders/Rq/RqdW-0VZEaOgHSMXLVSZLk+++TQ/-Tmp-//ifortzg8sFo.o, malformed .o file, symbol _equil_ with address 0xEE6CC150 is not with section 5 (__DATA,__data) address range of 0x19720 to 0x19B00
    make: *** [run] Error 1

    Je ne comprend pas. np=200millionsm ca fait environ 3.7Go de memoire, et ma machine en possede 32Go.

    Je suis pas tres habitue au fortran 77, je pensais que, ne possedant pas d'allocation dynamique, tous les tableaux allaient dans le stack... mais ma pile fait 8Mo donc a priori j'ai tord.

    Voyez-vous comment solutionner le probleme ?

    Merci !
    --
    Heimdall

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 488
    Points : 593
    Points
    593
    Par défaut
    Bonjour,

    Il est possible que ton problème vient du fait que tu dépasses les capacités d'indicage de tes gros tableaux (un indice est un entier, à priori codé par défaut sur 4 bits et de fait, si mes souvenirs sont bons, on se heurte à une barrière limitante correspondant à des tableaux individuels ne pouvant dépasser une taille de l'ordre de 2GB ).
    Regarde dans la doc de ton compilateur; il suffit parfois simplement d'imposer que les entiers soient codés sur 8 bits et/ou ajouter une option de compilation pour gérer ce type de cas (du type "pic : position independent code" ou "large memory size" pour pouvoir avoir de objets de taille > 2GB, etc.)

    Bonne continuation.

  3. #3
    Membre régulier
    Homme Profil pro
    Collégien
    Inscrit en
    Mars 2003
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Mars 2003
    Messages : 192
    Points : 87
    Points
    87
    Par défaut
    Hello,
    Oui je crois que tu as raison !

    cependant jai un probleme :

    j'ai ca dans la doc :

    This option tells the compiler to use a specific memory
    model to generate code and store data. It can affect code
    size and performance. If your program has COMMON blocks
    and local data with a total size smaller than 2GB,
    -mcmodel=small is sufficient. COMMONs larger than 2GB
    require-mcmodel=medium or -mcmodel=large. Allocation of
    memory larger than 2GB can be done with any setting of
    -mcmodel.

    IP-relative addressing requires only 32 bits, whereas
    absolute addressing requires 64-bits. IP-relative address-
    ing is somewhat faster. So, the small memory model has the
    least impact on performance.

    NOTE: When you specify -mcmodel=medium or -mcmodel=large,
    you must also specify compiler option -shared-intel to
    ensure that the correct dynamic versions of the Intel
    run-time libraries are used.

    Tells the linker to search for unresolved references in a
    multithreaded, dynamic-link run-time library.


    Mais lorsque j'ajoute -mcmodel=medium -shared-intel a mes options de compilation j'ai cette erreur :

    /opt/openmpi64i/bin/mpif77 -m64 -mcmodel=large -shared-intel -o a.out version5LE_AsymHyb.f
    ifort: command line warning #10152: option '-mcmodel large' not supported

    Jutilise ifort 11.1.


    Je comprends pas :-(
    --
    Heimdall

  4. #4
    Membre régulier
    Homme Profil pro
    Collégien
    Inscrit en
    Mars 2003
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Mars 2003
    Messages : 192
    Points : 87
    Points
    87
    Par défaut
    en fait maintenant je ne comprend meme plus pourquoi ca ne passe pas avec l'option par defaut qui est mcmodel=small.
    car mon plus grand tableau fait 0.74Go.... ca devrait etre bon non ?


    d'ou vient mon erreur de compilaiton alors :-/
    --
    Heimdall

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 488
    Points : 593
    Points
    593
    Par défaut
    Citation Envoyé par Heimdall Voir le message
    Mais lorsque j'ajoute -mcmodel=medium -shared-intel a mes options de compilation j'ai cette erreur :
    /opt/openmpi64i/bin/mpif77 -m64 -mcmodel=large -shared-intel -o a.out version5LE_AsymHyb.f
    ifort: command line warning #10152: option '-mcmodel large' not supported
    Possible que ça coince parce que openmpi n'a pas été compilé avec l'option '-mcmodel=large -shared-intel' (idée en l'air; à part ça je ne vois pas trop).

    Citation Envoyé par Heimdall Voir le message
    en fait maintenant je ne comprend meme plus pourquoi ca ne passe pas avec l'option par defaut qui est mcmodel=small.
    car mon plus grand tableau fait 0.74Go.... ca devrait etre bon non ?
    Je dois bien avouer que je n'ai jamais compris si cette "limite" des 2GB d'adressage devait se comprendre au sens de l'intégralité des éléments du programme ou individuelement pour chaque tableau...

    Désolé de ne pouvoir t'aider plus que ça.
    Bon courage pour la suite.

Discussions similaires

  1. Taille tableau par utilisateur
    Par nicodn02 dans le forum C
    Réponses: 56
    Dernier message: 26/04/2007, 17h28
  2. Aligner taille tableau sur celui du dessous
    Par linar009 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/09/2006, 16h02
  3. besoin d'aide probleme taille tableau
    Par zhao dans le forum C++
    Réponses: 8
    Dernier message: 28/09/2006, 09h14
  4. [Tableaux] taille tableau a deux dimensions
    Par nath-0-0 dans le forum Langage
    Réponses: 2
    Dernier message: 24/08/2006, 18h04
  5. [Tableaux] trouver taille tableau html en php
    Par eulalie15 dans le forum Langage
    Réponses: 4
    Dernier message: 03/07/2006, 13h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo