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 :

C++ et programmation sur Multi-Coeur


Sujet :

Threads & Processus C++

Vue hybride

Tozenkaun C++ et programmation sur... 06/09/2010, 22h50
stardeath déjà la grande question... 06/09/2010, 23h42
Tozenkaun J'ai pu voir que dans le... 07/09/2010, 00h13
Joel F si tu parallelise par taches,... 07/09/2010, 11h30
Tozenkaun Si éventuellement je... 08/09/2010, 11h59
Joel F pthread ou meiux... 08/09/2010, 14h56
Tozenkaun Ok merci, je commence à... 08/09/2010, 15h02
etienne.bezout Le core i7 bénéficie de... 25/11/2010, 15h51
Emmanuel Deloget A ce niveau, voici deux... 26/11/2010, 14h57
r.talhouk Programmation multi-core 06/10/2012, 21h13
gbdivers Pas tout compris :koi: Mais... 06/10/2012, 22h00
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 20
    Par défaut C++ et programmation sur Multi-Coeur
    Voilà, je programme depuis quelques temps un projet en C++ (un jeu)
    Et j'ai constaté que sur mon processeur (un core i7 860) le projet tourne plus vite en terme de frame rate de 10% sur 2 coeurs actifs que sur 4 actifs.

    Aussi afin d'optimiser les ressources de mon processeur j'aimerai savoir la meilleur manière de m'y prendre.

    J'utilise Visual C++ express edition 2010 (C++ et directX 10)
    Je suppose que je dois changer la structure de mes algorithmes pour les rendre parallèles et donc pouvez m'orienter sur les choix à faire (bibliothèques conseillées avec lien sur la doc , maximum de thread à créer... )

    Pour allez plus loin afin de rendre mon projet compatible avec d'autres processeurs (simple coeur ou double coeur...) comment acceder en C++ au caractéristique du processeur utilisé ?

    Merci d'avance pour vos précieux conseils

  2. #2
    Membre extrêmement actif

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 402
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 402
    Par défaut
    déjà la grande question c'est, je pense, est ce que tes algos sont parallélisables et est ce que la parallélisation va vraiment servir à quelque chose?

    je m'explique, tu es dans un jeu, que le proc soit à 100% en permanence tu t'en moques un peu. en plus le rendu doit être fait par le thread principal quoi qu'il arrive, donc pas parallélisable.

    en bibliothèque tu as :
    - openmp, le moins intrusif
    - threading building blocks, où il faut repenser entièrement son découpage de classe
    - les threads classiques, où il faut tout gérer à la main

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 20
    Par défaut
    J'ai pu voir que dans le commerce certains jeux sont optimisés pour les processeurs multi coeurs (c'est écrit dessus ), en ce sens j'ai déjà réfléchi à certaines parallélisations:

    par exemple sous traiter à des threads des morceaux de scène à afficher: puis tout synchroniser pour envoyer les infos à la carte graphique,
    paralléliser l'IA d'entités avec des ressources différentes (pour éviter des accés critiques au données)...

    voilà pour mes idées de parallélisations, donc oui c'est faisable.

    Maintenant c'est vrai que c'est peu être pas utile, mais mon expérience des threads (en JAVA) me fait dire que ça vaut peut-être la peine d'essayer...

  4. #4
    Membre Expert
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Par défaut
    Citation Envoyé par Tozenkaun Voir le message
    J'ai pu voir que dans le commerce certains jeux sont optimisés pour les processeurs multi coeurs (c'est écrit dessus ), en ce sens j'ai déjà réfléchi à certaines parallélisations:

    par exemple sous traiter à des threads des morceaux de scène à afficher: puis tout synchroniser pour envoyer les infos à la carte graphique,
    paralléliser l'IA d'entités avec des ressources différentes (pour éviter des accés critiques au données)...

    voilà pour mes idées de parallélisations, donc oui c'est faisable.

    Maintenant c'est vrai que c'est peu être pas utile, mais mon expérience des threads (en JAVA) me fait dire que ça vaut peut-être la peine d'essayer...
    si tu parallelise par taches, tu ne passera pas à l'échelle.
    La bonne stratégie est de paralléliser sur les entités et d'appliquer en parallele l'ensemble de la boucle de MAJ du jeu sur chaque entité, synchronisé puis pipeliné le rendu sur la GPU.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 20
    Par défaut
    Citation Envoyé par stardeath Voir le message
    en bibliothèque tu as :
    - openmp, le moins intrusif
    - threading building blocks, où il faut repenser entièrement son découpage de classe
    - les threads classiques, où il faut tout gérer à la main
    Si éventuellement je commercialise mon jeu (bien plus tard )
    -il faut une license pour TBB
    -Donc ma question est quel serait la meilleure bibliothèque à utiliser libre de droit
    Qu'entends tu par threads classique (où trouver la doc)

    Et dernière question pour reprendre mon 1er message du sujet:
    Pour allez plus loin afin de rendre mon projet compatible avec d'autres processeurs (simple coeur ou double coeur...) comment acceder en C++ au caractéristique du processeur utilisé ?

  6. #6
    Membre Expert
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Par défaut
    Citation Envoyé par Tozenkaun Voir le message
    Si éventuellement je commercialise mon jeu (bien plus tard )
    -il faut une license pour TBB
    -Donc ma question est quel serait la meilleure bibliothèque à utiliser libre de droit
    Qu'entends tu par threads classique (où trouver la doc)
    pthread ou meiux boost::thread

    Citation Envoyé par Tozenkaun Voir le message
    Et dernière question pour reprendre mon 1er message du sujet:
    Pour allez plus loin afin de rendre mon projet compatible avec d'autres processeurs (simple coeur ou double coeur...) comment acceder en C++ au caractéristique du processeur utilisé ?
    Jamais, au grand jamais. Ton code doit etre agn ostique de ces details, sinon il ne apssera pas à l'echelle.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 20
    Par défaut
    Ok merci, je commence à étudier tous ça en détails...

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 12
    Par défaut
    Citation Envoyé par Tozenkaun Voir le message
    Et j'ai constaté que sur mon processeur (un core i7 860) le projet tourne plus vite en terme de frame rate de 10% sur 2 coeurs actifs que sur 4 actifs.
    Le core i7 bénéficie de l'Intel Turbo Boost, qui en gros permet d'augmenter la fréquence de la moitié des coeurs en mettant l'autre moitié au repos.

  9. #9
    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
    A ce niveau, voici deux compte rendus de conférence publiés sur mon blog et sur gamedev.net:

    Practical multi-threading for game performance, par Leigh Davis (Intel) en se basant sur le travail conjoint de Intel et Crytek lors du développement du CryEngine 2.

    Designing a Game for Multi-core Platforms: Pitfalls & Performance Tuning, par Lionel Lemarié (Sony, tools team), recherche d'une architecture pour un hardware massivement multi-coeur (et son application à la PS3).

    Ce sont deux approches différentes. J'aime l'approche de Lionel, qui consiste à transformer les différentes action en un grand nombre de tâches indépendantes s'exécutant très rapidement. Il peut ensuite distribuer ces tâches indépendantes sur plusieurs thread hardware. La distribution elle-même est effectuée par un pseudo scheduler externe.

    0) (setup) pour chaque thread, on a une liste de tâche et un coût total
    1) A chaque tâche on associe un coût.
    2) Chaque fois qu'une tâche est créée, elle est ajoutée à la liste dont le coût total est le plus faible, et ce coût total est mis à jour.
    3) les threads dépilent les tâches et les exécutent.

    Il faut bien évidemment s'assurer que les tâches sont indépendantes entre-elles, sinon se posent des problèmes de synchro qui sont insurmontables (que faire si une tâche doit se synchroniser avec une tâche qui est dans la même file ?). Les questions de synchro se posent de toute façon, car il faut gérer les accès aux différentes ressources (en lecture/écriture). De plus, dans de très nombreux cas, le rendu doit être effectué par une tâche unique.

    Il y a de nombreux problèmes à résoudre, mais cette approche n'en reste pas moins très inétressante pour une architecture multi-coeur.

    Autre source d'information Intel Software Dispatch, et plus précisément leur manazine Parralel Universe. C'est principalement commercial, mais il y a de temps en temps des informations intéressantes.
    [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.

  10. #10
    Invité de passage
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Octobre 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1
    Par défaut Programmation multi-core
    La programmation multi-core est inefficace dans un programme unique , voir dangereuse elle pourra entrée en conflit avec le système d'exploitation qui gère , en parallèle l'exécution de centaines processus en faisant appel aux multiprocesseurs , qui arbitre le niveau d'importance de chacune , donc si vous avez besoin de faire fonctionner plusieurs taches dans un programme en utilisant plusieurs processeurs , il faudra savoir quand et comment interrompre le système d'exploitation , sachant que c'est difficile surtout si le système exécute des processus en level 0 , pour urgence surtout avec les vecteurs d'interruptions matériel et logiciel .

  11. #11
    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
    Citation Envoyé par r.talhouk Voir le message
    La programmation multi-core est inefficace dans un programme unique , voir dangereuse elle pourra entrée en conflit avec le système d'exploitation qui gère , en parallèle l'exécution de centaines processus en faisant appel aux multiprocesseurs , qui arbitre le niveau d'importance de chacune , donc si vous avez besoin de faire fonctionner plusieurs taches dans un programme en utilisant plusieurs processeurs , il faudra savoir quand et comment interrompre le système d'exploitation , sachant que c'est difficile surtout si le système exécute des processus en level 0 , pour urgence surtout avec les vecteurs d'interruptions matériel et logiciel .
    Pas tout compris
    Mais si j'ai bien compris la première phrase (programme unique -> multicore inefficace), clairement non

  12. #12
    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
    Citation Envoyé par gbdivers Voir le message
    Pas tout compris
    Mais si j'ai bien compris la première phrase (programme unique -> multicore inefficace), clairement non
    Je crois que la réponse est mieux compréhensible formulée en ces termes : l'OS sait mieux que nous quel coeur il doit affecter à quel thread. Ce en quoi je suis presque complètement d'accord (a ceci près qu'on eut tout à fait développer un système qui marche mieux en forçant l'exécution des threads sur tel ou tel coeur. Il faut savoir ce qu'on fait, c'est sûr, et ça n'est pas à la portée de tout le monde. Mais c'est clairement possible).

    Sur la première phrase, je pense qu'elle est mal tournée - l'auteur pensant surement que quand on parle de programmation multicoeur, on parle nécessairement de la programmation de l'affinité de chaque thread. Ce n'est pas le cas - on souhaite juste s'assurer que le nombre d'opérations qu'on va pouvoir exécuter dans un temps donné est linéairement dépendant du nombre de coeur ou de thread hardware proposé par le processeur ou l'OS. Ainsi, si demain un processeur avec deux fois plus de coeurs est utilisé, alors l'application sera deux fois plus performante.

    Ca parait simple dit comme ça, mais ça ne l'est pas du tout.
    [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. Équilibrage de threads sur machine multi-coeur
    Par le Benco dans le forum Linux
    Réponses: 1
    Dernier message: 25/05/2010, 13h31
  2. multi threading sur multi coeurs
    Par Pocus dans le forum Langage
    Réponses: 8
    Dernier message: 26/03/2010, 11h43
  3. Programmation Concurente sur plusieurs coeurs
    Par Beginer dans le forum Windows
    Réponses: 4
    Dernier message: 25/01/2010, 18h50
  4. Réponses: 12
    Dernier message: 06/01/2009, 18h43
  5. programmation multi-coeur ?
    Par sunmat dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 31/10/2008, 13h20

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