Bonjour,
J'ai des soucis d'allocations de mémoire avec des tableaux.
Pouvez vous me donner la taille maximale allouée à un tableau en fortran
Merci
Bonjour,
J'ai des soucis d'allocations de mémoire avec des tableaux.
Pouvez vous me donner la taille maximale allouée à un tableau en fortran
Merci
a ma connaissance, on est plutôt limité par la mémoire de la machine...
tu peux donner plus de détails sur ton problème ?
Quel genre de tableaux, automatiques ou dynamiques ?
Si tu fais:
tu vas depasser la taille de la pile dans laquelle les variables automatiques sont normalement placees. La taille de la pile peut varier de quelques kilos a plusieurs mega suivant les machines et est parfois reglable.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 integer, parameter :: NPD_LENGTH = 5000000 double precision, dimension(NPD_LENGTH) :: my_array
Pour contourner la taille limitee de la pile, les tableaux d'une certaine taille sont alloues dynamiquement (ce qui les cree hors de la pile, sur le tas).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 double precision, allocatable :: my_array(:) ... allocate(my_array(NPD_LENGTH)) ... deallocate(my_array)
Salut !
Bien qu'ayant travaillé avec de très gros tableaux, je n'ai jamais trouvé de limite absolue. Si les tableaux sont très gros, le programme se met à "swapper" sur disque et devient terriblement lent.
Jean-Marc Blanc
Merci Dazumba
J'essaye tout de suite avec la fonction allocate
le probleme d allocation dynamique est resolu en fortran 90, mais (pour moi par exemple) , comment eviter les problemes des gros tableaux (provenant de la discretisation des edp) en F77?
Bonjour à tous.
Il est évident qu'on ne peut pas stocker dans la mémoire vive plus de données qu'elle ne peut en contenir (Jacques II de Chabannes de La Palice dixit!). Si on a vraiment besoin de plus de mémoire, deux stratégies sont possibles:les problemes des gros tableaux
- Laisser faire le système d'exploitation; par exemple, comme je l'ai écrit dans une précédente réponse, Windows "swappe" sur disque des pans entiers de mémoire.
- Gérer soi-même et optimiser les transferts sur disque, de manière à minimiser plus le nombre de transferts que leur volume
J'ai personnellement eu à plusieurs reprises l'occasion d'écrire des programmes d'éléments finis et j'ai fait en sorte que la matrice soit tridiagonale par blocs. Ainsi j'ai pu traiter à l'époque des problèmes allant jusqu'à 3000 équations à 3000 inconnues sur une IBM7040 en ne disposant que de l'équivalent de 128 kiB.
Jean-Marc Blanc
Partager