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 :

exécution sur plusieurs processeurs


Sujet :

C

  1. #1
    Membre averti Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Points : 441
    Points
    441
    Par défaut exécution sur plusieurs processeurs
    Bonjour,

    Imaginons le main suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for (i=0;i<VALMAX;i++)
    {
    pIn = (quelque chose qui dépend de i);
    fonctionDeBase(pIn,pOut);
    resultat = resultat + (quelquechose qui depend de pOut);
    }
    Pour deux valeurs de i, les pIn correspondants sont indépendants et les pOut qui résultent de l'exécution de fonctionDeBase aussi. Cette fonction mettant un certain a s'exécuter, je voudrais profiter des 8 processeurs de ma machine, pour gagner du temps. Mais je ne veux qu'un seul exécutable. Pourriez-vous m'aiguillonner sur la manière de faire cela en C ?

    Merci

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    Salut, il faut que tu fasses de la programmtion multi-threads. Tu peux par exemple utiliser la librairie pthread (avec un simple #include<pthread.h> dans ton code).

    Si tu veux un tutoriel très bien expliquer, il y en a un sur ce site (c'est d'ailleurs là où j'ai appris à en faire). Regarde la page de Emmanuel Delahaye entre autre. Tout y est expliquer.

    Ensuite, tu fais un VALMAX / nombre de processeurs et ça te dit combien de "i" tu dois mettre dans chaque thread.

    Après, c'est gagné.

  3. #3
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Si tu dispose d'une version récente de gcc ou d'une version pro de visual studio 8, tu peux tu utiliser openMP qui est spécialisé dans la répartition de calcul sur plusieurs cœurs de calcul (de manière transparente).

  4. #4
    Membre averti Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Points : 441
    Points
    441
    Par défaut
    Citation Envoyé par salseropom Voir le message
    Salut, il faut que tu fasses de la programmtion multi-threads. Tu peux par exemple utiliser la librairie pthread (avec un simple #include<pthread.h> dans ton code).

    Si tu veux un tutoriel très bien expliquer, il y en a un sur ce site (c'est d'ailleurs là où j'ai appris à en faire). Regarde la page de Emmanuel Delahaye entre autre. Tout y est expliquer.

    Ensuite, tu fais un VALMAX / nombre de processeurs et ça te dit combien de "i" tu dois mettre dans chaque thread.

    Après, c'est gagné.
    Merci pour ta réponse. J'avais sans doute mal compris mais je pensais que le multi-thread permettait de faire plusieurs taches à la fois, mais dans le même processus et que donc cela n'utilisait qu'un seul processeur.

    Je vais donc creuser de ce côté. C'est dommage car au boulot il y a certains sites qui sont filtrés et auxquels je n'ai pas accès et le site d'Emmanuel Delahaye en fait partie !!!

  5. #5
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Citation Envoyé par corentin59 Voir le message
    Merci pour ta réponse. J'avais sans doute mal compris mais je pensais que le multi-thread permettait de faire plusieurs taches à la fois, mais dans le même processus et que donc cela n'utilisait qu'un seul processeur.
    Dans le même processus bien sûr, mais un processus peut utiliser plusieurs coeurs ou processeurs. Il est par contre vrai que même si plusieurs coeurs sont disponibles, il n'est pas obligé que chaque thread aura un coeur dédié. Dans ton cas, il s'agit en fait plus d'un problème de parallélisation que de problème de multithreading. Creuse donc plutôtde ce côté (OpenMP, MPI, etc.).

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    Citation Envoyé par corentin59 Voir le message
    Je vais donc creuser de ce côté. C'est dommage car au boulot il y a certains sites qui sont filtrés et auxquels je n'ai pas accès et le site d'Emmanuel Delahaye en fait partie !!!
    sur le site de developpez.net tu trouveras dans les faq des tutoriels sur la libriaire pthread.

    Jusqu'à présent, je n'en ai jamais été déçu, et j'ai toujours eu 1 thread par processeur (pour peu que nombre de thread <= nombre de processeurs bien entendu)

  7. #7
    Membre averti Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Points : 441
    Points
    441
    Par défaut
    Merci de tous vos conseils. Je vais essayer les différentes propositions et je reviendrai sur le forum pour faire le bilan de mes expérimentations.

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/12/2009, 10h02
  2. Exécuter un macro sur plusieurs BD
    Par zalalus dans le forum VBA Access
    Réponses: 19
    Dernier message: 30/07/2009, 11h30
  3. Exécuter un programme java sur plusieurs machine
    Par sinfos dans le forum Langage
    Réponses: 4
    Dernier message: 23/09/2008, 11h14
  4. [MySQL] Exécuter une requête sur plusieurs serveurs MySQL
    Par sirbaldur dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 19/11/2007, 18h02
  5. Macro exécutée sur plusieurs onglets
    Par Aizen64 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 05/06/2007, 09h59

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