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 :

Programmation pour processeur multi-coeurs ?


Sujet :

C

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 43
    Points : 31
    Points
    31
    Par défaut Programmation pour processeur multi-coeurs ?
    Bonjour.

    Dans le cadre d'un petit projet dans mon école, des amis à moi et moi-même avons du programmer un jeu dans lequel on peut soit faire du Humain vs Humain, Humain vs IA ou IA vs IA.

    Le projet est totalement achevé aujourd'hui et marche bien. L'algorithme utilisé pour l'IA peut être soit le Min Max ou l'Alpha Beta (les deux ont été programmés). En IA vs IA, le jeu est très rapide quand on est en profondeur 2, mais quand on passe à 3, voire 4, la temps de réflexion entre chaque coup augmente considérablement.
    J'ai pu remarquer que pendant ce temps de réflexion, un seul de coeur de mon processeur était utilisé.
    J'aimerais donc savoir si quelqu'un connait un moyen de rentre l'application multicoeur (pour réduire sensiblement ce temps). Etant un débutant dans le domaine, j'aprécierais beaucoup si vous pouviez me lancer sur des pistes où c'est assez bien expliqué.

    Merci.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Pour utiliser plusieurs cœurs simultanément, il faut que le programme exécute plusieurs threads.
    Si tu veux faire le même calcul sur plusieurs threads, il faut alors que ledit calcul soit parallélisable. Typiquement, une boucle dont les itérations sont plus-ou-moins indépendantes l'est. Une boucle où chaque itération dépend de la précédente n'est PAS parallélisable.

    Bref, la première chose à voir, c'est le niveau algorithmique. Si les algorithmes que tu emploies sont parallélisables, alors tu dois pouvoir en faire une implémentation sur plusieurs threads.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Tu peux utiliser OpenMP (inclus dans GCC, ici pous windows, omp.h)

  4. #4
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 43
    Points : 31
    Points
    31
    Par défaut
    Merci beaucoup !

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Les versions pro de Visual Studio 2005 et supérieur supportent également OpenMP.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Les versions pro de Visual Studio 2005 et supérieur supportent également OpenMP.
    Exact. Attention cependant à la version (je chipote , c'est juste un détail, mais qui pourrait faire la différence). Le compilateur VS 2008 utilise OpenMP 2.0.

    La version actuelle étant la 3.0.

  7. #7
    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,

    Je séparerai deux choses : d'un cote la programmation parallèle, et de l'autre la programmation multithread.

    Lorsque tu fais de la programmation multithread, tu ne t'occupes pas exactement de parallélisation : ton seul objectif doit être de séparer les différentes taches dans des threads, et éventuellement, si besoin, de gérer les points de synchronisation lorsque deux (ou plusieurs) threads ont besoin de se partager de l'information.
    Le programmes multi-threads peuvent etre executes dans tous les environnements, et sont optimises pour les processeurs multi-threads (un processeur, un ou plusieurs cœurs, qui peuvent chacun exécuter en parallèle un certain nombre de threads).

    De l'autre cote, dans la programmation parallèle, tu définis de manière explicite "telle fonction sera exécutée sur un premier cœur, et telle autre sur un second". Bien évidemment, cela fonctionne aussi avec un seul processeur qui ne dispose que d'un seul cœur.
    Les programmes parallèles peuvent ensuite être optimises pour un certain nombre de cœurs et/ou processeurs, en fonction des besoins.
    Idéalement, un programme parallèle tournera dans un environnement multi-processeur (et non pas multi-coeur).

    Bien sur, il est possible de faire de la programmation parallèle multi-threadée. Il est aussi possible de se tirer une balle dans le pied :-)

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Mais sur un système comme Windows, toute programmation parallèle reposera sur du multi-thread, la seule chose que le système accepte...

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Mais sur un système comme Windows, toute programmation parallèle reposera sur du multi-thread, la seule chose que le système accepte...
    d'où l'opacité et l'incompréhension globale du problème "parallèlisme", "multi-thread", etc etc..

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Tu sais, en l'occurence, "comme windows" incluait aussi les systèmes unixoïdes.

    Mais peut-être que je me suis trompé, et que tu vas me dire qu'on peut faire des programmes marchant sur tous les linux, avec de la programmation parallèle ne faisant pas appel à plusieurs threads (ou processus) ?

  11. #11
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Tu sais, en l'occurence, "comme windows" incluait aussi les systèmes unixoïdes.

    Mais peut-être que je me suis trompé, et que tu vas me dire qu'on peut faire des programmes marchant sur tous les linux, avec de la programmation parallèle ne faisant pas appel à plusieurs threads (ou processus) ?
    bien sûr...

    MPI est fait pour ça

    Et sur d'autres systèmes unixoides spécialisés (Silicon Graphics pour ne pas le nommer, en graphisme intensif, dès 1989, de même que InterGraph dès 1987), le "multi-coeur", ou plutôt "multi-CPU" était prévu, avec des variables d'environnement N_CPUS, et soit une parallèlisation manuelle ou automatique qui transformait toutes les boucles en "for ( i = 0 ; i < N_CPUS , ; i+)"..




    Une bonne discussion était ici-même:

    multi-threading et multi-core

  12. #12
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Tout ce qu'on m'a dit sur MPI en cours de parallélisme, c'est que ça servait pour des calculs parallèles multi-processus. En fait, on ne nous a pas montré grand-chose d'autres que des fonctions d'IPC plus élaborées que la moyenne (comme une réduction sur plusieurs processus)...

  13. #13
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    regarde les sources du Net sur MPI, ou sur Grid-Computing...

    C'est de très très très loin le plus utilisé pour tout ce qui est parallèlisme industriel, que ce soit multi-machines, multi-coeurs, etc etc...

    Tout simplement pour la raison ci-dessus : le même programme parallélisé peut tourner et sur plusieurs machines et sur plusieurs coeurs..

    Les threads étant locaux, ça ne marche que de manière limitée..

    Et de plus, pour l'écrasante majorité des vrais programmes/problèmes de parallèlisme, c'est la lourdeur du calcul qui est en cause, pas d'autres tâches..

    (d'où la référence au Grid-Computing)

    C'est donc par exemple calculer N blocs de multiplication de matrice en //, ou bien faire 2 calculs de propagation matricielle en //, etc etc..

    C'est pour ça que, dans la discussion que j'avais pointée plus haut, il y avait une vraie distinction entre les 2 approches..

    PS: je te répondrais qu MP plus tard dans la semaine

Discussions similaires

  1. Gestion processeur multi-coeurs
    Par doctorant_en_gallère dans le forum MATLAB
    Réponses: 2
    Dernier message: 15/02/2011, 09h07
  2. Réponses: 59
    Dernier message: 19/04/2010, 11h24
  3. fork() et processeur multi-coeur
    Par LaurentD88 dans le forum Débuter
    Réponses: 3
    Dernier message: 05/03/2010, 18h06
  4. programmation multi-coeur ?
    Par sunmat dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 31/10/2008, 13h20
  5. Programmes pour Multi-core?
    Par LeQuébecois dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 18/12/2007, 12h24

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