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

Calcul scientifique Python Discussion :

Bizarrerie chargement fichier volumineux


Sujet :

Calcul scientifique Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Pistolero_JB
    Homme Profil pro
    Inscrit en
    Juin 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2008
    Messages : 42
    Par défaut Bizarrerie chargement fichier volumineux
    Bonjour a tous,

    c'est mon premier post ici,

    j'ai une bizarrerie sur python et je ne vois pas pourquoi et comment gerer ca. Quelques mots sur le contexte, je charges en memoire (dans une variable python) un fichier volumineux ~5Go (liste de donnee provenant d'une matrice de 28805x28805 elements). Bref, mon probleme est dans le chargement du fichier dans la variable, par exemple si j'execute ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    n    = 100000000
    data = [0.0] * n
    val  = 1.25e+02
    for i in xrange(n):
        data[n] = val
    quand j'alloue de la memoire pour la variable, j'utilise ~ 740 Mo, et lorsque la boucle tourne pour remplir la variable data la mémoire reste constante car allouer au debut. Maintenant si j'execute ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    from string import atof
     
    n    = 100000000
    data = [0.0] * n
    val  = '1.25e+02'
    for i in xrange(n):
        data[n] = atof(val)
    la memoire utiliser au depart est de 740 Mo a l'allocation puis ne cesse d'augmenter pendant ma boucle pour atteindre les 3.9 Go. Je penses que le probleme est que atof me retourne un flottant different du flottant utilise en allocation... qu'elle est le probleme... comment convertir ma chaine de caractere en flottant 32 bit.

    Une suggestion ?

    Merci

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Bizarre.

    Déjà, le module string est déprécié. Tu as essayé avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    n    = 100000000
    data = [0.0] * n
    val  = '1.25e+02'
    for i in xrange(n):
        data[n] = float(val)
    ?

    Et pour des données aussi importantes, tu devrais passer à Numpy

  3. #3
    Membre éclairé Avatar de Pistolero_JB
    Homme Profil pro
    Inscrit en
    Juin 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2008
    Messages : 42
    Par défaut
    Le probleme est identique avec float(), la solution numpy je l'utilise actuellement en attendant, car quand j'alloue une variable array de type float 32 bit, la memoire reste constante. Le probleme avec ma variable array, c'est que j'ai remarque un ralentissement sur le temp d'acces des donnees, et donc un ralentissement de l'algo... ralentissement constater mais non evaluer, pas encore.

    Effectivement, c'est tres bizarre...

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Louche. Essaie de chopper le nombre de références en cours (je ne sais plus quelle est la fonction dans sys, mais ça devrait donner une indication).

  5. #5
    Membre expérimenté
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 304
    Par défaut
    Rien de nouveau : soit le programme utilise moins de mémoire, mais est plus lent, soit il utilise plus de mémoire et il est plus rapide. C'est très difficile d'avoir les deux en même temps.

  6. #6
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Les deux programmes travaillent sur des listes de même taille, et à chaque fois un seul élément est modifié. Ta remarque est donc complètement à côté du problème.

  7. #7
    Membre expérimenté
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 304
    Par défaut
    Citation Envoyé par Pistolero_JB Voir le message
    ...la solution numpy je l'utilise actuellement en attendant, car quand j'alloue une variable array de type float 32 bit, la memoire reste constante. Le probleme avec ma variable array, c'est que j'ai remarque un ralentissement...
    Oups pardon. Mais j'ai cru lire qu'avec numpy il n'y avait pas de problème de mémoire, vu que numpy utilise des tableaux C, mais des problèmes de lenteurs.

    Les deux autres solutions utilisent des listes et non des tableaux. Dans un cas, des floats sont directement injectés et la mémoire reste constante, dans l'autre, des chaînes sont converties en float et là la mémoire augmente.

    J'en conclu donc :

    • utilisation de numpy => temps plus lent mais pas de prob de mémoire.
    • utilisation de listes pythons => pas de prob de temps mais problèmes de mémoire à la conversion des float.


    J'ai bon là ?

  8. #8
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Non, c'est lors de l'utilisation de la fonction float() ou atof() qu'il y a une fuite mémoire. Peut-être.

  9. #9
    Membre expérimenté
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 304
    Par défaut
    C'est ce que j'entendais par conversion de float.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 17/10/2006, 18h27
  2. [FLASH] Pb de caractères quand chargement fichier .txt
    Par origami-graphics dans le forum Flash
    Réponses: 1
    Dernier message: 12/02/2006, 14h53
  3. chargement fichier bizarre
    Par jiceher dans le forum C++
    Réponses: 14
    Dernier message: 28/08/2005, 14h52
  4. Chargement fichier volumineux
    Par kirsoul dans le forum Installation
    Réponses: 2
    Dernier message: 26/07/2005, 14h53
  5. [Plugin][Jar] Chargement fichier de conf d'un jar
    Par vberetti dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 29/06/2005, 14h03

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