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

Bibliothèques, systèmes et outils C Discussion :

Performance et multithreading


Sujet :

Bibliothèques, systèmes et outils C

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2019
    Messages : 5
    Points : 4
    Points
    4
    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 chevronné
    Avatar de emixam16
    Homme Profil pro
    Chercheur en sécurité
    Inscrit en
    Juin 2013
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

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

    Informations forums :
    Inscription : Juin 2013
    Messages : 333
    Points : 1 828
    Points
    1 828
    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
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2019
    Messages : 5
    Points : 4
    Points
    4
    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 chevronné
    Avatar de emixam16
    Homme Profil pro
    Chercheur en sécurité
    Inscrit en
    Juin 2013
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

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

    Informations forums :
    Inscription : Juin 2013
    Messages : 333
    Points : 1 828
    Points
    1 828
    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
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2019
    Messages : 5
    Points : 4
    Points
    4
    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 avec Java
    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