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

Linux Discussion :

Compilation gcc multicore/multiprocesseur


Sujet :

Linux

  1. #1
    Membre éprouvé
    Avatar de f-k-z
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Juin 2006
    Messages
    403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2006
    Messages : 403
    Points : 928
    Points
    928
    Par défaut Compilation gcc multicore/multiprocesseur
    Bonjour à tous,

    J'ai écris un programme en C et j'aimerai qu'il utilise les 4 coeurs de mon processeur.

    J'utilise une boucle Do While, qui doit se dérouler 2⁵⁶-1 fois, donc autant utiliser mes 4 coeurs pour gagner du temps.

    Je me suis renseigné sur l'utilisation de OPENMP, mais visiblement, cela n'aime pas les boucle Do While, contrairement aux boucles For.

    Quelqu'un aurai-t'il une idée pour utiliser au mieux les 4 coeurs.

    Dans mes options de compilation, je dois absolument avoir les flags: -ansi et -O3.

    Cordialement,

    F-k-z

  2. #2
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Tu peux toujours transformer ta boucle do while en boucle for. Sinon tu peux te tourner vers les threads.

  3. #3
    Membre éprouvé
    Avatar de f-k-z
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Juin 2006
    Messages
    403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2006
    Messages : 403
    Points : 928
    Points
    928
    Par défaut
    Donc pour plus de détails, j'ai une partie de mon programme qui ressemble à ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Key=0x0ll;
    do{
     
    Key++;
    resultat = unefonction(Key);
     
    }while ( (Key != 0xFFFFFFFFFFFFFFFFll) && (resultat != valeurcherchee) );
    Donc ca me ferai rajouter un if dans ma boucle for non ?

  4. #4
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 129
    Points
    28 129
    Par défaut
    Bonjour,

    La programmation parallele se doit d'etre explicite, c'est a dire que le code n'est pas le meme entre un programme n'utilisant qu'un CPU/coeur et un programme utilisant ces fonctionnalites.

    Solutions pour programmer pour plusieurs CPUs :
    • threads
    • multi-process (fork)
    • bibliotheque parallele MPI
    • bibliotheque parallele OpenMP


    Dans ton cas, le surcout du a la programmation parallele ne sera masque que si tu trouves la valeur cherchee pour une grande valeur de 'Key'.

    Exemple d'algo que tu pourrais utiliser :

    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
     
    main()
    {
      MAX = 0xFFFFFFFFFFFFFFFFll;
     
       lancer_thread (0, (MAX / 4) -1 );
       lancer_thread (MAX / 4, (MAX / 2) -1 );
       lancer_thread (MAX / 2, (3 * MAX / 4) -1 );
       lancer_thread (3 * MAX / 4, MAX );
     
    }
     
    long int lancer_thread (int key, int max_computation)
    {
       do
       {
          resultat = unefonction(key);
          key++;
       }
       while ( (key <= max_computation) && (resultat != valeurcherchee) );
     
       return resultat;
    Question : comment tuer les threads si l'un d'entre eux trouve le resultat (Ne pas passer par les signaux) ?

  5. #5
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par gangsoleil Voir le message
    Question : comment tuer les threads si l'un d'entre eux trouve le resultat (Ne pas passer par les signaux) ?
    pthread_cancel() est ton amie.

  6. #6
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 681
    Points
    18 681
    Par défaut
    Citation Envoyé par gangsoleil Voir le message
    Question : comment tuer les threads si l'un d'entre eux trouve le resultat (Ne pas passer par les signaux) ?

    que reproches-tu à pthread_kill ?

  7. #7
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par gorgonite Voir le message
    que reproches-tu à pthread_kill ?
    Il n'y a rien à reprocher de particuliers à pthread_kill(), simplement, quand il s'agit de détruire des threads, pthread_cancel() est plus approprié, surtout avec la gestion des cleanup. Mais on pourrait aussi le faire avec des signaux bien que cela soit plus délicat.

  8. #8
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 681
    Points
    18 681
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    Il n'y a rien à reprocher de particuliers à pthread_kill(), simplement, quand il s'agit de détruire des threads, pthread_cancel() est plus approprié, surtout avec la gestion des cleanup. Mais on pourrait aussi le faire avec des signaux bien que cela soit plus délicat.
    ben disons déjà que tenter de faire du multi-processus ou du multi-thread en C est quelque chose de délicat, il est donc presque évident qu'une personne décidant de faire un vrai projet avec saura se montrer rigoureux

    je pensais plutôt à d'éventuels problèmes de portabilité de pthread_kill ?

  9. #9
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par gorgonite Voir le message
    je pensais plutôt à d'éventuels problèmes de portabilité de pthread_kill ?
    Vraiment? je ne pense pas, je ne développe pas sur tous les OS existant bien sûr mais j'ai quelques vielles reliques qui tournent encore et qui ont cette fonction, elle est tout de même normalisé depuis 1995, je pense que la majorité des "OS vendors" ont eu le temps de l'implémenter.

  10. #10
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 681
    Points
    18 681
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    Vraiment? je ne pense pas, je ne développe pas sur tous les OS existant bien sûr mais j'ai quelques vielles reliques qui tournent encore et qui ont cette fonction, elle est tout de même normalisé depuis 1995, je pense que la majorité des "OS vendors" ont eu le temps de l'implémenter.

    je m'interrogeais juste... perso, je ne l'ai utilisé que sur Linux et BSD, donc je n'ai jamais eu le problème

Discussions similaires

  1. Compilation gcc avec upnp
    Par YuGiOhJCJ dans le forum C
    Réponses: 6
    Dernier message: 25/05/2010, 12h42
  2. [debutant] compilation gcc et makefile
    Par harsh dans le forum Systèmes de compilation
    Réponses: 4
    Dernier message: 08/06/2006, 18h30
  3. Compilation gcc -shared -c *.c Puis archivage ?
    Par FrigoAcide dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 09/05/2006, 10h24
  4. Erreur compilation GCC
    Par KnightsOfTheRound dans le forum GCC
    Réponses: 8
    Dernier message: 07/11/2005, 15h28
  5. Option de compilation gcc : sem.h
    Par Luther13 dans le forum Linux
    Réponses: 8
    Dernier message: 29/12/2004, 12h29

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