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 :

[Tableau dynamique / statique] Performance sur "grandes" données


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Février 2013
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 92
    Points : 49
    Points
    49
    Par défaut [Tableau dynamique / statique] Performance sur "grandes" données
    Bonjour à toutes et à tous,

    Je souhaiterais avoir des opinions sur une question de programmation en C. Le problème est le suivant: j'ai une série temporelle qui décrit le déplacement d'une particule dans un espace bidimensionnel. Je calcule le nombre de passages de cette particule dans chaque cellule d'un grand maillage en 2D pour estimer une espèce de densité (je ne rentre pas dans les détails). J'ai choisi de me placer localement dans une portion du maillage pour chaque couple de position de la particule entre 2 temps, afin de ne pas avoir à parcourir tous les nœuds du maillage pour savoir s'ils ont 'vu' la particule passer ou non (long!).
    Du coup, je me retrouve à sélectionner les nœuds qui sont voisins immédiats des observations que je traite et à stocker ces nœuds (ou 'sous-maillage') pour faire un calcul sur chacun d'eux. Il y a donc autant de sous-maillages que de positions de la particule. J'ai une contrainte de temps, l'algorithme doit être rapide car calculé sur un grand nombre de particules. Je ne connais pas la taille à priori de chaque sous-maillage, mais j'ai un indice: les déplacements sont rarement grands.

    Est-ce qu'il est préférable de :
    1. stocker ce 'sous-maillage' dans un tableau dynamique (la taille de chaque sous-maillage étant différente) contenant exactement les nœuds d'intérêt et que je libère après chaque utilisation (ce qui suppose de récréer ce tableau à chaque position),
    2. d'avoir un grand et unique tableau statique ou je mets les nœuds d'intérêt et que je n'aurais qu'à vider/réinitialiser à chaque utilisation après calcul de la stat qui m'intéresse,
    3. travailler directement sur le maillage d'origine avec des pointeurs qui définiront/contiendront mon sous-maillage,
    4. ne pas s'embêter avec un 'sous-maillage' et parcourir brutalement pour toutes les positions tous les nœuds du maillage et estimer ma stat (sachant que bcp de nœuds ne serviront à rien pour de petits déplacements de la particule, ce qui arrive souvent)
    5. opter pour une autre alternative ?


    Sachant que:
    • Dans tous les cas, chaque sous-maillage doit être réinitialisé (ou ses valeurs remises à zéro) pour chaque position de la particule
    • Les calculs sont effectués sur un serveur, pas de problème de mémoire (pour l'instant),
    • Les calculs sont déjà parallélisés,
    • Quelques chiffres: Il y a environ 30000 positions pour chaque particule, le maillage contient 1 à plusieurs millions de nœuds


    Merci par avance!

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 631
    Points : 10 559
    Points
    10 559
    Par défaut
    Ton "truc" me fait penser aux BSP (les niveaux de Doom) (ou à l'algo "clustering" de la radiosité):
    en gros, on va travailler soit avec des arbres soit avec des pondérations pour savoir où travailler (même s'il y a des approximations).

    Si ton point va vers la droite, ce n'est pas la peine d'aller voir ce qui se passe à gauche

  3. #3
    Membre du Club
    Inscrit en
    Février 2013
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 92
    Points : 49
    Points
    49
    Par défaut
    Merci pour ce retour rapide.
    Je ne connaissais pas mais ca a l'air effectivement intéressant.
    Et par curiosité personnelle, quelle méthode parmi celles que je proposais aurait été la plus rapide?
    Merci!

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 678
    Points
    13 678
    Billets dans le blog
    1
    Par défaut
    Quel est l'intérêt de recopier une partie de ton maillage ? Si tu cherches la performance, cette copie va te coûter forcément un peu. Si cette copie ne sert pas de changer le format des données pour avoir en "local" une structure plus pratique pour faire tes calculs, je pense que tu as intérêt à aller directement travailler sur le maillage complet, en utilisant des bornes pour limiter les calculs inutiles.

  5. #5
    Membre du Club
    Inscrit en
    Février 2013
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 92
    Points : 49
    Points
    49
    Par défaut
    Merci cette réponse est pleine de bon sens.
    Je vais effectivement récupérer seulement les bornes et travailler localement sur le maillage, sans stocker.
    L'idée du BSP me plait bien aussi, je trouve ca rapide et original.

    Cependant, par pure curiosité, j'ai lu différents topics sur les tableaux resizés dynamiquement et je me pose encore la question de savoir ce qui est le plus efficient.

    Merci pour vos retours en tous cas!

    G

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 631
    Points : 10 559
    Points
    10 559
    Par défaut
    Le problème de ta question ce sont des questions de mesure de temps

    Qui est le plus rapide: des allocations/ réallocations? des déférencements? des parcours arbres (*)? Autres?

    Bien cela se mesure sur plusieurs machines, sur la machine de production/ finale pour savoir comment et où optimiser

    Nous on ne peut pas trop répondre, juste donner des pistes de réflexion.

    Mais si tu as peur du temps des allocations/ réallocations, tu peux utiliser des techniques comme des memory pool


    * -> pour faire écho à ma remarque, extraire de ton maillage des informations qui vont permettent de trouver le point plus rapidement.

Discussions similaires

  1. [Conception] Insertion de champs d'un tableau dynamique dans une base de données
    Par loreleï85 dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 12/05/2011, 14h39
  2. Les ensembles (tableau dynamique/statique)
    Par Delnir dans le forum Débuter
    Réponses: 3
    Dernier message: 08/12/2008, 09h57
  3. Tableau dynamique de pointeurs sur const char*
    Par Le Mérovingien dans le forum Débuter
    Réponses: 6
    Dernier message: 05/06/2008, 14h23
  4. [SQL] Modification de champs d'un tableau dynamique dans une base de données
    Par loreleï85 dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 27/06/2006, 16h55
  5. Réponses: 1
    Dernier message: 23/06/2006, 11h19

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