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

Langage Delphi Discussion :

multi threading sur multi coeurs


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 72
    Points : 74
    Points
    74
    Par défaut multi threading sur multi coeurs
    Bonjour,

    Question basique certainement...

    Si j'exécute plusieurs threads dans un programme Delphi:

    - D7
    - BDS 2007

    et suivant différents OS:

    - XP
    - Vista
    - Seven

    Est ce que Windows va de façon optimale répartir les threads sur chaque coeur, ou il y a des précautions à prendre suivant les combinaisons sus citées?

    Merci par avançe
    Philippe/Pocus.

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 448
    Points
    28 448
    Par défaut
    Citation Envoyé par Pocus Voir le message
    Bonjour,

    Question basique certainement...

    Si j'exécute plusieurs threads dans un programme Delphi:

    - D7
    - BDS 2007

    et suivant différents OS:

    - XP
    - Vista
    - Seven

    Est ce que Windows va de façon optimale répartir les threads sur chaque coeur, ou il y a des précautions à prendre suivant les combinaisons sus citées?

    Merci par avançe
    Philippe/Pocus.
    ce qu'il faut regarder c'est surtout le nombre de thread et le nombre de coeurs, pour le reste l'OS fait ce qu'il peut
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 72
    Points : 74
    Points
    74
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    ce qu'il faut regarder c'est surtout le nombre de thread et le nombre de coeurs, pour le reste l'OS fait ce qu'il peut
    Oh ca sera simple, au plus 1 thread par coeur... ce qui m'inquiète c'est le "l'OS fera ce qu'il peut " ...

  4. #4
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 173
    Points
    4 173
    Par défaut
    Citation Envoyé par Pocus Voir le message
    Oh ca sera simple, au plus 1 thread par coeur... ce qui m'inquiète c'est le "l'OS fera ce qu'il peut " ...
    Qu'est-ce qui t'inquiête la dedans ? Windows fait un très bon travail à ce sujet.
    Maintenant si vraiment ça t'inquiête, tu peux définir l'affinité de chaque thread avec les CPU disponibles, grâce à la fonction :
    SetThreadAffinityMask
    Elle te permet de restreindre les CPU que chaque thread peut utilisé, et ainsi affecter un thread à un CPU donné.

    Cependant, c'est rarement une bonne idée (à moins de vouloir définir des quotas CPU, ou de vouloir réserver un CPU pour une tâche donnée). Car si le CPU affecté est utilisé, le thread ne pourra pas s'exécuter en utilisant un autre CPU disponible...

  5. #5
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 667
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 667
    Points : 6 998
    Points
    6 998
    Par défaut
    Citation Envoyé par Franck SORIANO Voir le message
    Qu'est-ce qui t'inquiête la dedans ? Windows fait un très bon travail à ce sujet.
    Ah bon !
    Moi, mon quad core : le premier travaille, le deuxième un peu, et les deux autres jamais. Et quand le premier est à fond, les deux derniers n'aident jamais.

    Citation Envoyé par Franck SORIANO Voir le message
    Cependant, c'est rarement une bonne idée (à moins de vouloir définir des quotas CPU, ou de vouloir réserver un CPU pour une tâche donnée).
    C'est justement ce qu'il serait bien que le système permette de faire.

    Citation Envoyé par Franck SORIANO Voir le message
    Car si le CPU affecté est utilisé, le thread ne pourra pas s'exécuter en utilisant un autre CPU disponible...
    Certes. Mais dans mon cas, comme j'ai deux coeurs qui ne travaillent pas, autant les occuper.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 72
    Points : 74
    Points
    74
    Par défaut
    Justement c'est de cela dont je voulais parler. Certains disent "laissent Win se débrouiller", d'autres pensent qu'il est mieux de lui baliser le chemin (SetThreadAffinityMask entre autre).

    C'est vrai que comme cela, j'aurai tendance à être du 2e avis (même si ce n'est pas un avis trés éclairé), parce que si justement je regarde l'utilisation des 4 coeurs de mon PC pendant qu'il fait tourner un jeu AAA (du genre avec un moteur Unreal 3 et un moteur physique, donc certainement pas du monothread) et bien je ne peux pas dire que les charges soient vraiment réparties, ce serait plutôt coeur 1 = 100%, le 2e à 25% et les 3 et 4 qui se tournent les pouces.

    Aprés, sans preuve, je ne peux dire si c'est l'optimum, mais ca n'y ressemble pas...

  7. #7
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 173
    Points
    4 173
    Par défaut
    Citation Envoyé par Lung Voir le message
    Ah bon !
    Moi, mon quad core : le premier travaille, le deuxième un peu, et les deux autres jamais. Et quand le premier est à fond, les deux derniers n'aident jamais.
    C'est vrai que comme cela, j'aurai tendance à être du 2e avis (même si ce n'est pas un avis trés éclairé), parce que si justement je regarde l'utilisation des 4 coeurs de mon PC pendant qu'il fait tourner un jeu AAA (du genre avec un moteur Unreal 3 et un moteur physique, donc certainement pas du monothread) et bien je ne peux pas dire que les charges soient vraiment réparties, ce serait plutôt coeur 1 = 100%, le 2e à 25% et les 3 et 4 qui se tournent les pouces.
    Le problème ne vient pas de windows, mais de la conception même des applis.
    Déjà, il n'y a pas de miracles. Pour que les 4 coeurs tournent au maximum de leur capacité, il faut qu'il y ait en permanence 4 threads activable prêt à consommer du CPU. Or dans la pratique, un thread passe son temps à attendre quelque chose. Soit une E/S, soit le résutlat d'un calcul précédent effectué par un autre thread.

    Prenons l'exemple du jeu si tu veux : Le moteur physique est une chose, mais il ne va pas avoir grand chose à faire tant que le joueur n'a pas fait quelque chose qui nécessite de recalculer la scène.
    Le rendu des images est effectué par la carte 3D, l'ensentiel des calculs se passe dans les shaders.
    De même, pour le son, ce n'est pas la gestion des sons à jouer qui va écrouler le processeur. Ensuite, c'est la carte son qui travaille...
    Au final, même si le jeu est multi-threadé (et encore, il n'y a que les jeux récents qui le sont réellement), ça ne veut pas dire qu'il y a de quoi occuper les 4 CPU.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    707
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 707
    Points : 777
    Points
    777
    Par défaut
    C'est bien ce qu'il me semblait, le multi-core, c'est de l'arnaque !

  9. #9
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 173
    Points
    4 173
    Par défaut
    C'est la même chose qu'une machine multi-processeurs.
    Il faut en avoir l'utilité, avoir des applis qui savent le gérer, ou vouloir faire tourner plusieurs applis en même temps, ou mettre plusieurs utilisateurs sur la même machine en TSE...

    Lorsque je recompresse mes enregistrements de la TNT, je peux te dire que j'apprécie de voir les 4 coeurs tourner !

Discussions similaires

  1. Multi-threading, programmation multi-coeur
    Par Napech dans le forum C
    Réponses: 0
    Dernier message: 17/06/2010, 21h17
  2. Multi Select sur Multi Lists
    Par Sergejack dans le forum Flex
    Réponses: 4
    Dernier message: 22/04/2008, 11h15
  3. Multi-session sur Multi-base
    Par minimarch76 dans le forum Spring
    Réponses: 8
    Dernier message: 04/10/2007, 15h28
  4. Aide sur Multi-Threading
    Par Fred2209 dans le forum Windows
    Réponses: 7
    Dernier message: 18/04/2007, 17h26
  5. Réponses: 1
    Dernier message: 23/05/2005, 15h52

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