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 :

MPI + structures


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 13
    Par défaut MPI + structures
    Bonjour à tous,

    Je désire envoyer une structure en MPI. Voila ma structure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    typedef struct{
    	float a;
    	int* b;
    }structure_t;
    le b est alloué dynamiquement avec malloc(). Disons qu'il contienne n elements, je ne connais pas ce nombre à l'avance.

    J'arrive très bien à envoyer cette structure quand elle est alloué non dynamiquement, avec :
    par exemple, mais pas quand elle est alloué par un malloc.

    Je créé ma structure MPI comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
        structure_t resultat;
        MPI_Datatype MPI_NOUVEAUTYPE;
        MPI_Datatype oldtypes[2];
        int blockcounts[2];
        MPI_Aint offsets[2];
     
        MPI_Address( &resultat.a, &offsets[0]);
        oldtypes[0] = MPI_FLOAT;
        blockcounts[0] = 1; //La longueur du parcours
     
        MPI_Address( &resultat.b, &offsets[1]);
        oldtypes[1] = MPI_INT;
        blockcounts[1] = n; //Le parcours
     
        offsets[1] -= offsets[0];
        offsets[0]=0;
     
        // On créé la structure et on la prépare
        MPI_Type_struct(2, blockcounts, offsets, oldtypes, &NOUVEAUTYPE);
    A la reception, je ne peux pas acceder à mes données sous peine d'un seg fault. Tout se passe très bien quand ce n'est pas alloué dynamiquement par contre...

    Vous avez une idée ?

    Merci

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    C'est surtout que la structure ne contient pas les données mais leur adresse.
    Tu peux peut être envisager la construction suivante pour inclure le tableau dans la structure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    typedef struct{
    	float a;
    	int b[];
    }structure_t;
     
      n = ...;
      size_t dimstruct = sizeof(structure_t)+n*sizeof(int);
      structure_t * resultat = malloc(dimstruct);
    ...
      free(resultat);

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 13
    Par défaut
    Bonjour diogene et merci de l'intérêt porté à mon problème !

    Je ne savais pas qu'il étais possible d'allouer comme cela en C, je vais essayer cela de suite, je vous tiens au courant !

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 13
    Par défaut
    Rebonjour !

    C'était bien le problème Diogène, merci pour le coup de main, ca me dépanne bien !!

    Bonne journée, Sujet résolu.

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

Discussions similaires

  1. envoi de structure en MPI
    Par fatjoe dans le forum C++
    Réponses: 5
    Dernier message: 08/03/2008, 15h04
  2. recuperation de la structure d'une base
    Par pascalT dans le forum 4D
    Réponses: 7
    Dernier message: 07/06/2006, 15h32
  3. [tables systèmes] extraction de la structure d'une base
    Par laffreuxthomas dans le forum Autres SGBD
    Réponses: 6
    Dernier message: 23/03/2006, 13h24
  4. Structure de données de type "RECORD"
    Par chaours dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 30/09/2002, 17h10
  5. longueur d'une structure
    Par bohemianvirtual dans le forum C
    Réponses: 6
    Dernier message: 28/05/2002, 18h31

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