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 :

POSIX et affinité CPU


Sujet :

Threads & Processus C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut POSIX et affinité CPU
    Bonjour à toutes et à tous,

    je travaille actuellement sur différents portage d'application multicoeurs.
    L'application se veut de philosophie POSIX pour un portage cohérent.
    Cependant, la norme POSIX ne concerne pas la programmation multicoeur et aucune gestion de l'affinité CPU n'est prévue.

    Pire encore cette gestion diffère d'un système linux à un autre...
    Exemples :
    int sched_setaffinity(pid_t pid, unsigned int len, unsigned long *mask);
    int sched_setaffinity (pid_t __pid, size_t __cpusetsize, const cpu_set_t *__cpuset);
    int sched_setaffinity (pid_t __pid, const cpu_set_t *__mask);
    Après quelques recherches je suis tombé sur un projet de l'équipe d'Open-MPI qui développe une librairie pour rendre portable cette gestion de l'affinité : http://www.open-mpi.org/projects/hwloc/
    Elle est même portable sur windows.
    Mais elle ne gère pas VxWorks, un groupe d'utilisateurs parlaient de le porter mais il semble au vu des derniers messages en date qui remontent que cela soit un projet abandonné. Et vu les échanges c'est une charge de travail très conséquente donc je ne vais pas m'y risquer (j'entends par là que j'ai pas 6 mois devant moi pour ça...).

    Auriez-vous entendu parlé d'une autre librairie pouvant répondre à mes besoins ?

    En parallèle de mes recherches je réfléchi à une transformation de mes threads unix en task vxworks en impactant le minimum de choses mais ce n'est pas aisé...

  2. #2
    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 transgohan Voir le message
    Bonjour à toutes et à tous,

    je travaille actuellement sur différents portage d'application multicoeurs.
    L'application se veut de philosophie POSIX pour un portage cohérent.
    Cependant, la norme POSIX ne concerne pas la programmation multicoeur et aucune gestion de l'affinité CPU n'est prévue.

    Pire encore cette gestion diffère d'un système linux à un autre...
    Exemples :

    Après quelques recherches je suis tombé sur un projet de l'équipe d'Open-MPI qui développe une librairie pour rendre portable cette gestion de l'affinité : http://www.open-mpi.org/projects/hwloc/
    Elle est même portable sur windows.
    Mais elle ne gère pas VxWorks, un groupe d'utilisateurs parlaient de le porter mais il semble au vu des derniers messages en date qui remontent que cela soit un projet abandonné. Et vu les échanges c'est une charge de travail très conséquente donc je ne vais pas m'y risquer (j'entends par là que j'ai pas 6 mois devant moi pour ça...).

    Auriez-vous entendu parlé d'une autre librairie pouvant répondre à mes besoins ?

    En parallèle de mes recherches je réfléchi à une transformation de mes threads unix en task vxworks en impactant le minimum de choses mais ce n'est pas aisé...
    Ce n'est peut-être pas défini dans POSIX 2001, mais SUSV4 (=POSIX-1.2008)
    définit des fonctions dans <sched.h>. Cf. http://pubs.opengroup.org/onlinepubs...s/sched.h.html
    [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.

  3. #3
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    Oui mais malheureusement cette norme n'est suivi que par les linux.
    Donc byebye VxWorks.
    A l'heure actuelle je n'ai toujours trouvé aucune solution englobant tous les unix.

  4. #4
    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 transgohan Voir le message
    Oui mais malheureusement cette norme n'est suivi que par les linux.
    Donc byebye VxWorks.
    A l'heure actuelle je n'ai toujours trouvé aucune solution englobant tous les unix.
    VxWorks n'étant pas un Unix, et les Unix autres que Linux étant sérieusement à la traîne (à part quelques exemples particuliers, comme Solaris, qui est juste un peu à la traine, et les *BSD, qui sont de toute façon vaguement dans les choux (ça n'engage que moi)), je ne m'étonne pas trop.

    Le fait que VxWorks n'arrive pas en 2012 à implémenter un standard datant de 2008 ne me choque pas non plus outre mesure. Le site web assure un support complet de IEEE Std. 1003.1 (POSIX) mais sans donner d'information supplémentaire (il faudrait qu'ils supportent IEEE 1003.1-2008, ce qui n'est visiblement pas le cas).

    Deux solutions :

    1/ taper sur la tête de WindRiver pour qu'ils mettent à jour leur support POSIX
    2/ prévoir une couche de compatibilité

    Je ne vois pas comment tu peux faire autrement. Il y a 0 chances pour que tu sois à la fois compatible POSIX et compatible non POSIX sans avoir de code spécifique traitant de l'un des deux cas.

    Pour rappel, le rajout d'une couche de compatibilité est le scénario privilégié par la plupart des programmes Open Source ayant besoin de supporter de nombreux Unix. C'est même la base de l'idée derrière autocomf/automake : permettre la détection des features d'un système afin d'adapter le logiciel compilé au besoin spécifique de la cible.
    [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.

  5. #5
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    Ah mais on est bien d'accord...
    Je n'ai pas demandé une solution POSIX vu que j'ai moi même indiqué qu'il n'y en avait pas et ce dès mon premier message...

    La couche de compatibilité j'y pense depuis le début, mais c'est pas facile à organiser.
    On fonctionne avec des pthreads, or il n'y a du coup rien permettant de gérer leur affinité. Faut que je teste à coup de taskCpuAffinitySet(0, affinity) mais j'y crois pas trop...
    Donc cela voudrai dire un portage total vers des tasks... Et là c'est pas un petit boulot.
    Pas eu le temps de faire des tests en raison d'un déménagement de nos locaux, j'attends encore que le laboratoire soit utilisable.

  6. #6
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    J'ai lancé quelques tests et il semblerait que taskCpuSetAffinity() puisse agir sur les pthreads.
    J'ai encore des tests à faire sur une carte multicoeur car je ne fais que spéculer sur un test monocoeur, en effet sous VxWorks si on ne gère pas l'affinité la tâche n'est pas associée à un CPU en particulier contrairement à un système linux qui associe tous les CPUs. Or mon test me renvoie qu'avant un setaffinity mon pthread n'a aucune affinité, puis après m'indique une affinité avec le CPU 0.

Discussions similaires

  1. Différences dans la gestion de l'affinité CPU
    Par transgohan dans le forum Linux
    Réponses: 10
    Dernier message: 13/09/2012, 11h07
  2. Réponses: 6
    Dernier message: 24/08/2012, 17h54
  3. Vitesse du CPU, quantité de RAM... en C
    Par dclink dans le forum C
    Réponses: 4
    Dernier message: 07/07/2003, 20h48
  4. question sur les variables globales et les thread posix
    Par souris_sonic dans le forum POSIX
    Réponses: 5
    Dernier message: 13/06/2003, 13h59
  5. Trouver le % d'utilisation du CPU
    Par le mage tophinus dans le forum Assembleur
    Réponses: 20
    Dernier message: 21/04/2003, 19h43

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