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

Langage C++ Discussion :

génération de code et compilation à la volée?


Sujet :

Langage C++

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 15
    Par défaut génération de code et compilation à la volée?
    Bonjour,

    Je suis en train de réfléchir à un problème que je voudrais vous soumettre.
    Le contexte est celui d'une librairie d'algèbre linéaire. On va dire que pour l'instant elle ne contient que des vecteurs.

    L'idée est d'écrire des expressions complexes comme
    a = b+c-2*d;
    et que celle-ci soit réduite à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for (i=0; i < n; ++i)
       a[i] = b[i] + c[i] - 2*d[i];
    Je connais le principe des expressions template, mais je ne peux pas l'appliquer dans mon cas. En effet, mes vecteurs peuvent aussi aller calculer sur la carte graphique où on se brosse pour les iterator

    Du coup je dispose d'un ensemble de fonctions en C comme par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void add(a, b, c) {
        for (i = 0 ; i < n ; ++i)
            a[i] = b[i] + c[i];
    }
    et leurs homologues en CUDA.

    Ne pourrais-je pas créer une classe expression, qui générerait le code voulu à partir du code de mes fonctions existentes, et le compilerait à la volée?

    Par exemple je ferais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Expr* = new Expr('=', '+', '-');
    et cela me créerait le fichier expr001.h, expr001.cpp et expr001.cu qui contiendraient ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    //!expr001.cpp
     
    // présent dans expr001.cu
    extern "C" void expr001kernel(vector& a, vector& b, vector& c, vector& d);
     
    // déclaré dans expr001.h
    void expr001 (vector& a, vector& b, vector& c, vector& d)
    {
        for (i = 0 ; i < n ; ++i)
            a[i] = b[i] + c[i] - d[i];
    }
    Une fois ceux-ci générés, je pourrais appeler ma méthode dans un fichier compilé plus tard avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #include "expr001.h"
    Expr->apply(a, b, c, d);
    Bref, que pensez vous de cette idée?
    Est-ce que c'est possible?
    Est-ce que ça a déjà été fait, en bien, en mal...?

    Merci de vos impressions

  2. #2
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Bonjour

    Je connais le principe des expressions template, mais je ne peux pas l'appliquer dans mon cas. En effet, mes vecteurs peuvent aussi aller calculer sur la carte graphique où on se brosse pour les iterator
    En fait, si, tu peux utiliser les expressions template avec CUDA :
    CUDA expression template

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 15
    Par défaut
    ouch au temps pour moi
    Je regarderai avec plaisir ce week end!

    Mais je maintiens ma question en rajoutant un petit truc.

    La phase de création des expressions serait faite avant compilation par un petit script perl qui créerait les fichiers source et rajouterait les headers partout où il faut...

  4. #4
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    Ou Softwire (http://gna.org/projects/softwire), pour ceux qui aiment l'asm (pas sur que ça marche su Windows 7).
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

Discussions similaires

  1. Génération de code & bpm4struts
    Par k4eve dans le forum BPM
    Réponses: 3
    Dernier message: 08/03/2007, 15h12
  2. Réponses: 3
    Dernier message: 24/08/2005, 14h45
  3. [UML] génération de code avec omondo.uml
    Par RENAULT dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 31/10/2003, 13h14
  4. [Lomboz] Génération de code pour EJB
    Par paikan dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 09/07/2003, 14h28

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