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

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    août 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : août 2019
    Messages : 3
    Points : 1
    Points
    1

    Par défaut Performance et multithreading

    Bonjour je fais de l'IA et j'aimerai utiliser au mieux mes CPU.
    Je m'explique je fais un algorithme genetique dont l'evaluation d'un individu prend pas mal de temps, je peux la parametrer pour qu'elle soit plus precise et stable mais pour cela les calcul augment exponentiellement, du coup je me retrouve avec un temps de calcul de plusieurs seconde par individu.
    Donc mon objectif est de faire du multithreading et utiliser au maximum les coeurs de mon processeur pour faire les calcules en paralleles (dans mon cas je ferai le calcul des individus en paralleles).
    Le hic est que je ne sais pas combien de thread je dois faire pour correctement optimiser mon programme. Si je n'en met pas assez je risque de gacher du temps. A l'inverse si j'en met trop a force de switcher entre mes differents thread je risque aussi de surcharger le processeur et de perdre du temps.
    Je voulais donc savoir si il exister une methode me permettant de dire si j'ai atteint le max des capacites de mon processeur, et que rajouter des thread me ferais perdre du temps. Ou alors une variable me permettant de dire le nombre de thread optimal. Je programme en C, et j'aimerai si possible une solution portatif (qui eviterait de modifier mon code en fonction du nombre de coeur de mon processeur).
    Merci pour votre aide .

  2. #2
    Membre éprouvé
    Avatar de emixam16
    Homme Profil pro
    Doctorant en sécurité
    Inscrit en
    juin 2013
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Doctorant en sécurité

    Informations forums :
    Inscription : juin 2013
    Messages : 237
    Points : 1 220
    Points
    1 220

    Par défaut

    Bonjour,

    En c, tu peux obtenir le nombre de coeurs avec get_nprocs() qui se trouve dans <sys/sysinfo.h>.

    Après, une règle empirique pour maximiser l'utilisation des coeurs est d'utiliser un processeur de plus que ton nombre de cœurs logiques disponibles. Mais si tu as un peu plus de thread que nb_proc+1, ce n'est pas très grave (2*nb_proc reste OK).

    Note: J'attire ton attention que même avec 64 cœurs, tu auras des performances accélérées au plus par un facteur 64, même moins en pratique. Ça peut sembler beaucoup mais si tu es en complexité exponentielle ça ne change quasiment rien. Ici, tu auras plus de gains en améliorant ta complexité de ton algo qu'en optimisant le parallélisme! Bien évidemment, ces deux types d'améliorations ne sont pas incompatibles!

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    août 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : août 2019
    Messages : 3
    Points : 1
    Points
    1

    Par défaut

    merci j'essairai ca . Et je sais que l'optimisation est primordial j'en suis meme un peu malade

  4. #4
    Membre éprouvé
    Avatar de emixam16
    Homme Profil pro
    Doctorant en sécurité
    Inscrit en
    juin 2013
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Doctorant en sécurité

    Informations forums :
    Inscription : juin 2013
    Messages : 237
    Points : 1 220
    Points
    1 220

    Par défaut

    Citation Envoyé par ris0cs Voir le message
    merci j'essairai ca . Et je sais que l'optimisation est primordial j'en suis meme un peu malade

    C'est la bonne attitude! Comprendre comment optimiser c'est un très bon moyen d'aller au fond des choses et donc de progresser en algorithmique! En plus c'est assez rigolo à faire IMHO.

    Comme tu es étudiant je me permets de te donner un dernier conseil: l'optimisation à tendance à complexifier le code. Donc si tu optimise trop violemment trop vite tu risque d'avoir un code incompréhensible et de galérer par la suite (et là, je parle par expérience) . "Premature optimization is the root of all evil" D. Knuth

    Bref, tout est une question d'équilibre

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    août 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : août 2019
    Messages : 3
    Points : 1
    Points
    1

    Par défaut

    Oui j'en fais deja les frais mon code est dur a entretenir mais bon comme mon code n'est pas tres long ca passe.
    Merci pour ton conseil

Discussions similaires

  1. Réponses: 16
    Dernier message: 01/10/2010, 13h47
  2. Informations performances multithreading
    Par comtention dans le forum Débuter
    Réponses: 6
    Dernier message: 29/01/2010, 14h53
  3. Réponses: 17
    Dernier message: 01/06/2009, 03h32
  4. Multithread performant pour du calcul
    Par RenaudM dans le forum Langage
    Réponses: 13
    Dernier message: 22/11/2008, 13h26
  5. multithreading et performance
    Par philippe V dans le forum C++
    Réponses: 9
    Dernier message: 20/11/2004, 01h25

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