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

C Discussion :

Allocation mémoire de très grande taille, et problème de swap


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 570
    Par défaut Allocation mémoire de très grande taille, et problème de swap
    Bonjour,

    je travaille actuellement sur un programme qui peut parfois demander d'allouer de très grosse quantité de mémoire (plusieurs matrices de 2 giga). Impossible de partager ce calcul ou de faire petit à petit (enfin on y réfléchie encore, mais ca voudrait dire recoder une très grosse bibliothèque).

    Je pensais qu'allouer une très grosse quantité de mémoire allait faire swaper l'ordi. Mais ce n'est pas le cas. Du moins pas sur tous. Sur mon ordinateur (une ubuntu 8.10 avec 5 giga de mémoire swap) le programme me donne un core dump. Sur un autre ubuntu 8.10, aucun problème le swap se fait, alors qu'il n'a que 750 Mo de mémoire swap disponible.

    Nous avons tester sur d'autres ordinateurs en kubuntu 7.10 (aucune idée du swap par contre), et ca plante également.

    Je voudrais donc savoir s'il est possible de forcer l'utilisation du swap, ou si vous aviez une idée d'où peut venir notre problème ?

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Es-tu sûr que l'allocation réussie sur les PC où cela plante? Testes-tu le retour de l'allocation?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 613
    Par défaut
    Tu n'as peut etre pas de swap sur certains de tes pc.
    la commande
    swapon -s
    Devrait de montrer quelle partition est dédiée a ta swap avec sa taille
    Il y a la commade free également

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Djobird Voir le message
    je travaille actuellement sur un programme qui peut parfois demander d'allouer de très grosse quantité de mémoire (plusieurs matrices de 2 giga). Impossible de partager ce calcul ou de faire petit à petit
    ..
    Je voudrais donc savoir s'il est possible de forcer l'utilisation du swap, ou si vous aviez une idée d'où peut venir notre problème ?
    C'est déjà dès le départ une mauvaise approche....


  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 613
    Par défaut
    Et si tu n'as pas assez de place en mémoire, tu peux écrire toi même sur disque, dans un fichier.

  6. #6
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 570
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    C'est déjà dès le départ une mauvaise approche....

    Si vous connaissez une bibliothèque permettant de faire des transformer de fourrier qui gère le problème que j'ai ca ma va aussi. Mais le je dois faire une transformer sur un tableau qui peut être gigantesque (ca commence a planter à partir de 600 000 000 de case par exemple), et je n'ai pas de moyen de lui donner petit bout par petit bout de tableau. Après je n'ai pas eu le courrage de regarder le code de la bibliotheque FFTW, je peux essayer au cas ou mais je ne sais pas si j'ai le niveau pour ca.

    Mon swap existe bien, après peut être est il mal utilisé je sais pas. A priori l'allocation marche sur l'autre pc puisque le pc gratte comme un fou, et surtout ne plante pas (alors qu'on effectue juste après l'allocation une écriture dans ce tableau).

    Travailler avec un fichier, je ne suis pas contre, mais c'est possible ? Enfin je veux dire les données,j'y ai des tats de boucles de calcul dessus (dont à la fin transformer de fourrier).

  7. #7
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Djobird Voir le message
    Si vous connaissez une bibliothèque permettant de faire des transformer de fourrier qui gère le problème que j'ai ca ma va aussi. Mais le je dois faire une transformer sur un tableau qui peut être gigantesque (ca commence a planter à partir de 600 000 000 de case par exemple),
    As-tu fait une analyse de la propagation des erreurs dans le cas d'une FFT d'une telle taille?

    En passant, dans une vie anterieure, j'ai publie un papier decrivant comment utiliser des caches de maniere assez efficace lors de calculs de FFT.

    et je n'ai pas de moyen de lui donner petit bout par petit bout de tableau. Après je n'ai pas eu le courrage de regarder le code de la bibliotheque FFTW, je peux essayer au cas ou mais je ne sais pas si j'ai le niveau pour ca.
    Mon swap existe bien, après peut être est il mal utilisé je sais pas. A priori l'allocation marche sur l'autre pc puisque le pc gratte comme un fou, et surtout ne plante pas (alors qu'on effectue juste après l'allocation une écriture dans ce tableau).
    Normalement, le swap est utilise sans intervention. Donc, reprenons les questions evidentes:

    Est-ce que tu es sur que tu as des OS 64 bits? (Parce que pour utiliser plus de 4GB de memoire dans un process, c'est ce qu'il faut).

    Est-ce que tu as bien compile en mode 64 bits? (Parce que sinon, avoir un OS et un swap adequat, ca ne sert a rien).

    En passant, tu ne m'as pas l'air d'avoir les competances pour mener a bien de maniere fiable ce que tu as entrepris. Dans quel contexte es-tu?

  8. #8
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Tu compiles en 32 bits ou en 64 bits ? Je ne sais pas trop comment ça se passe sous linux, mais sous beaucoup de systèmes tu ne peux pas allouer plus d'un segment (256 Mo sous AIX) pour le heap avec les options par défaut du loader. Pour allouer plus (jusqu'à un peu plus de 3 Go en 32 bits sous AIX), il faut jouer avec les options du loader.

    Si tu es en 64 bits tu ne devrais pas avoir ce genre de problèmes.

    En tout ca si tu coredump, c'est certainement que tu ne teste pas toutes les valeurs de retour de tes malloc()s.

  9. #9
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Djobird Voir le message
    Si vous connaissez une bibliothèque permettant de faire des transformer de fourrier qui gère le problème que j'ai ca ma va aussi. Mais le je dois faire une transformer sur un tableau qui peut être gigantesque (ca commence a planter à partir de 600 000 000 de case par exemple), et je n'ai pas de moyen de lui donner petit bout par petit bout de tableau. Après je n'ai pas eu le courrage de regarder le code de la bibliotheque FFTW, je peux essayer au cas ou mais je ne sais pas si j'ai le niveau pour ca.

    Mon swap existe bien, après peut être est il mal utilisé je sais pas. A priori l'allocation marche sur l'autre pc puisque le pc gratte comme un fou, et surtout ne plante pas (alors qu'on effectue juste après l'allocation une écriture dans ce tableau).

    Travailler avec un fichier, je ne suis pas contre, mais c'est possible ? Enfin je veux dire les données,j'y ai des tats de boucles de calcul dessus (dont à la fin transformer de fourrier).
    Ce que je voulais dire, sans parler des arguments des autres participants, c'est qu'avoir quelque chose qui fixe une telle taille en a-priori est voué à l'échec.

    Une approche correcte serait d'avoir tout paramétré, au minimum. Et de récupérer les erreurs fatales (du style "coredump") et de faire quelque chose d'adaptatif : si pas d'erreur, on avance. Si erreur, on découpe le problème.

    C'est en ça que je dis et répète : mauvais approche dès le départ.

    Quant à la FFT, non seulement Jean-Marc (et d'autres dans le foru algorithmes) peuvent t'être d'un grand secours, mais de plus encore une fois on retombe sur la même conclusion : mauvaise approche.

    Sans en savoir plus, c'est tout ce qu'on peut dire.

  10. #10
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    Quant à la FFT, non seulement Jean-Marc (et d'autres dans le foru algorithmes) peuvent t'être d'un grand secours,
    Plutot les autres. C'etait bien dans une vie anterieure. Je m'en sortirais vraisemblablement, meme sans documents, mais au prix d'un travail que je ne suis pas pret a faire pour repondre sur DVP.

  11. #11
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 570
    Par défaut
    Alors le projet est une parallélisation de calcul. Il existe une bibliothèque permettant d'effectuer des calculs physiques, ces calculs permettent (en très gros) de rajouter des points sur une courbe afin de la lisser. Plus on veut que la courbe soit lissée, plus il faut rajouter de points. Plus on veut de points, plus le tableau permettant de contenir ces points sera grand (pour info ces calculs sont en rapport avec des analyse de l'ordre du nanomètre). Or à un moment, afin de déterminer ces points il faut faire une transformer de fourier inverse sur ce tableau.

    J'ai repéré où avait exactement lieu le coredump et ses causes, ce n'est pas dans FFT, mais bien dans la bibli que j'utilise. Mais j'ai besoin de ce tableau pour être utilisé dans FFT (je ne sais pas si je suis clair :/)

    Sinon chaque allocation mémoire fait pour l'instant au maximum 1.5 giga, c'est en cumulé que je dépasse les 4 gigas, ca ne peut pas marcher quand même ?

    edit : Je viens d'avoir confirmation par mon collegue sur sur son ubuntu 8.10 32 bits, le swap s'effectuait bien et l'application terminait.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 11/05/2012, 12h25
  2. Liste de très grande taille
    Par paskal64 dans le forum Général Python
    Réponses: 8
    Dernier message: 12/09/2008, 16h32
  3. Comment avoir une fonte de très grande taille ?
    Par Gébix dans le forum Mise en forme
    Réponses: 2
    Dernier message: 13/01/2007, 18h47
  4. Réponses: 5
    Dernier message: 21/11/2006, 16h24
  5. problème de conversion de très très grande taille !
    Par Conficius dans le forum Langage
    Réponses: 2
    Dernier message: 05/11/2005, 22h14

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