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++/CLI Discussion :

Multiple implémentations d'une fonction


Sujet :

C++/CLI

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2013
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 94
    Par défaut Multiple implémentations d'une fonction
    Bonjour à toutes et à tous,

    Dans le cadre d'un programme qui effectue un algorithme, j'ai 2 fonctions qui ont le même prototype mais qui réalise un calcul de manière différente. Par exemple l'une emploie une certaine méthode mathématique, l'autre une seconde méthode mathématique, différente. Je souhaite laisser l'utilisateur choisir quelle méthode mathématique il souhaite utiliser en fonction de son problème. On peut imaginer par exemple 2 fonctions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    void compute_quantity_1( const arma::mat &, const arma::mat &, const unsigned ){...}
    void compute_quantity_2( const arma::mat &, const arma::mat &, const unsigned ){...}
    Je vois plusieurs manières de traiter cette question: pointeurs de fonctions, instructions pré-processeur, interface, templates, ...
    Sachant que la compilation de l'ensemble des sources est rapide (de l'ordre de 15-20 secondes), et que ces fonctions peuvent être appelées 10^15 ou 10^20 fois, y a t'il une approche à préférer? Quelles seraient les bonnes pratiques? Je n'ai pas pu trouver de guidelines précis sur le net.
    merci et bonnes fêtes!

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 448
    Par défaut
    Est-ce une question dans le cadre du C++ "natif" ou du C++/CLI (.NET), sujet de cette partie du forum ?
    En fonction du cadre, les réponses et problématiques sont différentes.

    Je ne vois pas de "multiple implémentations d'une fonction" dans votre cas, comme pourrait être une implémentation fonction de la plateforme d'exécution (portabilité, etc...)

    Ne jamais brider l'utilisateur de votre code, juste le guider pour l'utiliser "correctement".
    Donc favorisez la lisibilité/utilisabilité à une "performance brute incontrôlable".
    Votre description est beaucoup trop vague pour vous donner des prescriptions "précises".
    Utilisez des concepts que les utilisateurs de votre code maitrisent, sinon, personne ne se servira de votre machin.

    Vos fonctions sont appelées de manière très très intensive. Pourquoi ?
    Si c'est pour des données différentes, il peut être plus avantageux de faire un appel avec un jeu de données bien plus grand, économisant ainsi tous les parties prologue et épilogue d'un appel de fonction.
    S'il n'y a pas de dépendance de données ou algorithmiques, pourquoi ne pas se tourner vers le parallélisme, type shader, ou SIMD, par exemple.
    Pourquoi ne pas utiliser des Frameworks de calcul haute performance : HPC, Hadoop, etc... plutôt que de réinventer une roue carrée ?

    N'y a t'il pas des Framework spécialisés dans le domaine (calcul de structures, des fluides, éléments finis, etc...) qui sont déjà éprouvés ?

  3. #3
    Membre confirmé
    Inscrit en
    Février 2013
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 94
    Par défaut
    Bonjour,

    Oui tout à fait, j'ai cliqué brutalement sur le 1er lien C++ qui apparaissait après une recherche et qui m'a amené ici, j'en ai profité pour poster sans regarder le sous-forum ou je me trouvais. Entièrement ma faute. J'ai essayé de déplacer le sujet vers la racine du forum C++ mais je n'ai pas trouvé comment faire.

    Ne jamais brider l'utilisateur de votre code, juste le guider pour l'utiliser "correctement".
    Donc favorisez la lisibilité/utilisabilité à une "performance brute incontrôlable".
    Votre description est beaucoup trop vague pour vous donner des prescriptions "précises".
    Utilisez des concepts que les utilisateurs de votre code maitrisent, sinon, personne ne se servira de votre machin.
    Telle est bien mon intention. Je me suis mal exprimé: je souhaite laisser l'utilisateur décider de la méthode à choisir pour l'algorithme. Pour donner une idée c'est comme dans de nombreuses bibliothèques effectuant des régressions linéaires ou non-linéaires: on peut jouer sur les options. Dans mon cadre la méthode1 va par exemple utiliser les propriétés d'une matrice pour en déduire la solution, alors que pour la méthode2 va utiliser une approche basée sur des itérations. Les deux méthodes sont comparables mais n'apportent pas les mêmes bénéfices en termes de temps de calcul et de précision. A noter que ces méthodes sont appelées un grand nombre de fois pour faire évoluer un système plus grand (l'itération en cours dépend de l'itération précédente, une approche évolutionniste). Nous parallélisons (CPU) les évolutions (il faut répéter les évolutions pour converger vers un résultat).

    Pourquoi ne pas utiliser des Frameworks de calcul haute performance : HPC, Hadoop, etc... plutôt que de réinventer une roue carrée ?
    N'y a t'il pas des Framework spécialisés dans le domaine (calcul de structures, des fluides, éléments finis, etc...) qui sont déjà éprouvés ?
    Je ne suis pas sûr de suivre ici. Il n'y a pas de Framework (type librairie?) déjà implémenté(e) sur ce sujet. Nous réutilisons tout ce qui est déjà documenté dans notre domaine (c'est peut-être trop restrictif) pour produire un outil pour les chercheurs travaillant sur cette thématique.

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 448
    Par défaut
    Un domaine scientifique qui ne dispose pas de Frameworks/bibliothèques dédié, c'est très rare de nos jours.
    Peut-être que vous avez un peu trop "serré" votre domaine, non ?
    C'est quoi votre "domaine", SVP ?

    J'ai du mal à comprendre votre tâche dans la situation.
    Les briques de bases doivent fournir ce qu'il faut pour que le gout de l'utilisateur final ne soit pas bridé.
    En temps qu'utilisateur "final", vous faites comme cela vous arrange, car les briques de bases ne forcent pas un choix (cf. ligne précédente).

    N'ayant pas de vue d'ensemble, je me focalise sur le seul détail fourni, le grand nombre d'appel mais il y a peut-être des choses bien plus structurantes (localité/taille des données, dépendances, conditions limites, etc...).
    On risque de louper l'éléphant dans le couloir.
    Un grand nombre d'appel à des fonctions "simples" (peu de charge CPU) est un mauvais calcul, d'où ma suggestion d'augmenter "la portée" d'un appel, pour en réduire le nombre.

    Une approche "évolutionniste" casse le parallélisme.

    Moi, je chercherais un Framework pratique dans le domaine et je ferais en sorte que mon bidule soit facilement utilisable dans ce Framework.

  5. #5
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 390
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 390
    Par défaut
    Bonjour,
    Quand je vois "C++" et "Multiple implémentation d'une fonction", je pense aussitôt "polymorphisme".
    Donc ici une interface (une classe abstraite) qui va déclarer le prototype de la fonction (via une méthode), et divers classes qui implémentent cet interface, chacune avec un algorithme qui va bien.

    Le code qui va faire "tourner le tout" n'attend qu'une classe qui implémente cette interface, et le choix de l'algorithme se fait en choisissant la classe à instancier.

    Tatayo.

  6. #6
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 526
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 526
    Par défaut
    Citation Envoyé par Grasshoper Voir le message
    Je ne suis pas sûr de suivre ici. Il n'y a pas de Framework (type librairie?) déjà implémenté(e) sur ce sujet. Nous réutilisons tout ce qui est déjà documenté dans notre domaine (c'est peut-être trop restrictif) pour produire un outil pour les chercheurs travaillant sur cette thématique.
    bonjour quel outil de développement ? Visual Studio ?
    Quelles bibliothèques utilisées ? Win32, MFC ?
    Qu'est-ce que c'est arma::mat ?
    Apparemment c'est Armadillo.
    Donc quelle interface utilisateur ? Quel OS ?

    Pour faire des fonctions parallèles il faut utiliser des threads au besoin.
    Mais avant ça faut répondre aux questions que j'ai posées.

Discussions similaires

  1. Multiple Definition d'une fonction SDL
    Par doltox dans le forum Débuter
    Réponses: 7
    Dernier message: 01/07/2010, 14h52
  2. faire une selection multiple de feuilles en fonction de variables
    Par blackhelmet dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/10/2006, 10h32
  3. Réponses: 6
    Dernier message: 12/07/2006, 19h29
  4. Déclaration multiple d'une fonction
    Par Julien C. dans le forum Langage
    Réponses: 2
    Dernier message: 17/06/2003, 16h38

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