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

Threads & Processus C++ Discussion :

Comment utiliser les thread dans ce cas ?


Sujet :

Threads & Processus C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 65
    Points : 58
    Points
    58
    Par défaut Comment utiliser les thread dans ce cas ?
    Bonjour,

    voilà mon problème. J'ai un programme qui s'exécute en monotâche et linéairement. C'est un calcul sur un maillage contenant N cellules pour résoudre des EDP. Il est constitué de trois boucles :

    1) la première boucle est un simple calcul linéaire, donc elle est rapide.
    2) la seconde est plus lente, car pour chaque cellule, elle nécessite de calculer une inversion de matrice. Cette boucle a besoin des données de chaque cellule calculées en 1). Autrement dit, la première boucle calcule p paramètres, qui doivent être passés comme condition initiale dans la seconde boucle pour calculer n paramètres supplémentaires.
    3) la troisième boucle a besoin, à chaque cellule, des p paramètres de la boucle 1) et des n paramètres de la boucle 2) pour obtenir k paramètres.

    En fait, je songe à paralléliser ce code, dans la mesure où le temps d'exécution est très rapide pour la première boucle, mais lente pour les 2 et 3. Dans un programme linéaire, je subis toute la lenteur de ces deux dernières boucles, tandis qu'en parallélisant, je pourrais lancer la boucle 2 alors que la 1 n'a pas fini, et la boucle 3 alors que la 2 n'est pas fini.

    Comment utiliser les thread dans ce cas ? cela nécessite de nombreuses notions qui dépassent un peu mes compétences, par exemple comment passer des données d'un thread à un autre....

    Quelqu'un pourrait m'aider s'il vous plait ?

    Je vous remercie par avance.

    Cordialement.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 65
    Points : 58
    Points
    58
    Par défaut
    Je vais préciser mes propos.

    Le premier thread que je crée, il est lié à une fonction qui contient une boucle

    for(int i=0;i<N;i++) ...

    Ce que je souhaiterais, c'est que la boucle du deuxième thread, de la forme
    for(int j=0;j<N;j++), début dès lors que i == 5. De plus, comment dire au second thread d'attendre le premier lorsque i == j ?

    j'ai vu que la fonction CreateThread (c'est celle que j'utilise) contient un pointeur LPVOID lpParameter pour un paramètre que l'on souhaite passer à un thread. Serait-ce un moyen de résoudre mon problème, c'est-à-dire passer par exemple l'entier i au second thread ??


    Merci.

    Cordialement.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 65
    Points : 58
    Points
    58
    Par défaut
    Je n'ai pas de réponses pour l'instant. Serait-ce parce que c'est trop facile ? ou trop dur ?

    ++

  4. #4
    Membre émérite
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Points : 2 677
    Points
    2 677
    Par défaut
    Citation Envoyé par ketchupi Voir le message
    Je n'ai pas de réponses pour l'instant. Serait-ce parce que c'est trop facile ? ou trop dur ?
    Je crois surtout que ton problème n'est pas très clair

    Peux-tu au moins faire un algo de principe du problème dans son ensemble ?
    Quelle IDE utilises-tu pour développer ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 65
    Points : 58
    Points
    58
    Par défaut
    Merci de votre réponse.

    J'utilise Borland C++ 5. pour clarifier mon problème, j'aimerais faire tourner 2 boucles en parallèle, qui communiquent l'une avec l'autre : elles s'envoient des paramètres, elles s'attendent....

    Je crée par exemple mon premier thread :

    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
    21
    22
    23
    24
    25
     
     
    void CCalcul::test()
    {
      HANDLE hThread1, hThread2;;
      hThread1 = CreateThread(NULL,0,&ThreadFunction1,lpParameter,0,0);
     
      hThread2 = CreateThread(NULL,0,&ThreadFunction2,lpParameter,0s,0);
     
      ExitThread(hThread1);
      ExitThread(hThread2);
    }
     
    void CCalcul::ThreadFunction1()
    {
      for(int i=0;i<N;i++)
        m_nX = m_nX + exp(i*5e-9); // m_nX est un entier membre privé de ma classe CCalcul
    }
     
    void CCalcul::ThreadFunction2()
    {
      for(int j=0;j<N;j++)
        m_nY = m_nX + 5e-9;  // m_nY est un autre entier membre privé de ma classe CCalcul
     
    }
    Dans la fonction ThreadFunction2, j'aimerais cependant que la boucle sur j utilise les nouvelles valeurs de m_nX que j'ai changé via la fonction ThreadFunction1. Ce qui signifie que mon thread2 doit commencer plus tard, et attendre éventuellement que la boucle sur i dans le premier thread soit suffisamment avancée pour lui permettre de continuer.

    Suis-je assez clair ?

    ++

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 47
    Points : 41
    Points
    41
    Par défaut
    Bonjour,

    Vous pourriez utiliser de la mémoire partagée si les "processus" doivent échanger des données entre eux, ça a l'avantage d'être rapide!
    http://c.developpez.com/telecharger/...moire-partagee

Discussions similaires

  1. Comment utiliser les datasets dans mon cas
    Par dachir dans le forum ASP.NET
    Réponses: 5
    Dernier message: 13/01/2009, 09h44
  2. comment utiliser les lock dans les threads ?
    Par skad dans le forum Général Python
    Réponses: 2
    Dernier message: 15/07/2008, 14h28
  3. Comment aborder les collisions dans mon cas?
    Par MonsieurHelmut dans le forum Physique
    Réponses: 4
    Dernier message: 18/02/2007, 16h56
  4. Utiliser les threads dans application Struts
    Par rach375 dans le forum Struts 1
    Réponses: 7
    Dernier message: 18/09/2006, 11h32
  5. Comment utiliser les Threads en VC++?
    Par mambo dans le forum MFC
    Réponses: 2
    Dernier message: 16/06/2006, 14h04

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